Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 在组合框中永久添加值_Excel_Vba_Office365 - Fatal编程技术网

Excel 在组合框中永久添加值

Excel 在组合框中永久添加值,excel,vba,office365,Excel,Vba,Office365,我有这部分代码,在运行创建新列的宏后,在组合框中添加最后一个列字母 ColumnLetter = Split(Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Cells.Address(5, 0), "$")(0) Worksheets("Sheet1").CB1.AddItem ColumnLetter 效果很好,但一旦我关闭文件,记录就会消失,是否存在永久保

我有这部分代码,在运行创建新列的宏后,在组合框中添加最后一个列字母

ColumnLetter = Split(Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Cells.Address(5, 0), "$")(0)

Worksheets("Sheet1").CB1.AddItem ColumnLetter

效果很好,但一旦我关闭文件,记录就会消失,是否存在永久保存此数据的解决方案?

您必须在每次打开文件时填充组合框,或者必须将值存储在工作表中,并将组合框
行源
链接到该数据范围(然后它将保留数据):


示例:将数据存储在A1:A50范围内的工作表
combodata
,然后将该combobox的行源设置为
combodata!A1:A50

您必须在每次打开文件时填充组合框,或者必须将值存储在工作表中,并将组合框
行源
链接到该数据范围(然后它将保留数据):


示例:将数据存储在A1:A50范围内的工作表
combodata
,然后将该combobox的行源设置为
combodata!A1:A50

谢谢你的建议,我用这种方式解决了问题

Private Sub Workbook_Open()

        Dim lastCol As Integer
        Dim ColName As String
        Set male = Worksheets("Male")
        lastCol = male.Cells(5, male.Columns.Count).End(xlToLeft).column
        male.CB1.Clear
        For i = 7 To lastCol
            ColName = Replace(Split(Columns(i).Address, ":")(0), "$", "")
            male.CB1.AddItem ColName
        Next i
End Sub

谢谢你的建议,我就是这样解决的

Private Sub Workbook_Open()

        Dim lastCol As Integer
        Dim ColName As String
        Set male = Worksheets("Male")
        lastCol = male.Cells(5, male.Columns.Count).End(xlToLeft).column
        male.CB1.Clear
        For i = 7 To lastCol
            ColName = Replace(Split(Columns(i).Address, ":")(0), "$", "")
            male.CB1.AddItem ColName
        Next i
End Sub

正如您提到的,在运行创建新列并在组合框中添加最后一列字母的宏之后,我假设在运行宏之前,组合框中已经填充了当前列

此外,正如您所提到的,一旦关闭文件,组合框记录就会消失,我假设您希望在打开文件时在组合框中填充当前列字母的列表

下面是代码。按照Peh的建议,将其粘贴为Thisworkbook对象代码

Private Sub Workbook_Open()
LCol = Cells(1, Columns.Count).End(xlToLeft).Column

For i = 1 To LCol
Cols = Cols & Split(Cells(1, i).Cells.Address(5, 0), "$")(0) & ","
Next
Cols = Left(Cols, Len(Cols) - 1)

ColsArr = Split(Cols, ",")

'Aa your combobox object is named CB1
Worksheets("Male").CB1.List = ColsArr

End Sub

每当打开文件时,组合框将填充使用过的列字母

,正如您提到的,在运行创建新列的宏并在组合框中添加最后一个列字母后,我假设在运行宏之前组合框已经填充了当前列

此外,正如您所提到的,一旦关闭文件,组合框记录就会消失,我假设您希望在打开文件时在组合框中填充当前列字母的列表

下面是代码。按照Peh的建议,将其粘贴为Thisworkbook对象代码

Private Sub Workbook_Open()
LCol = Cells(1, Columns.Count).End(xlToLeft).Column

For i = 1 To LCol
Cols = Cols & Split(Cells(1, i).Cells.Address(5, 0), "$")(0) & ","
Next
Cols = Left(Cols, Len(Cols) - 1)

ColsArr = Split(Cols, ",")

'Aa your combobox object is named CB1
Worksheets("Male").CB1.List = ColsArr

End Sub

每当打开文件时,组合框将填充使用过的列字母

记录是否消失?当文件再次打开时,您似乎不希望组合框为空。您可以使用事件填充组合框值。因此,一旦打开工作簿后立即运行事件过程,您将不会看到空的commbobox。但这样,我需要知道所有已填充列的列表,以我的方式,在找到combobox值的同时填充combobox值。另一种方法可能是拼写列字母,它可以执行如下操作:for column=G toColumnLetter@chuck22如果要循环遍历列,则需要使用它们的编号。例如
工作表(“Sheet1”)。列(“A”)
工作表(“Sheet1”)。列(1)
相同,因此您可以对i=1到5执行
操作,并使用列号。顺便说一句,你看到我下面的答案了吗?如果你想在打开工作簿时填充组合框,你可以使用工作簿\打开事件填充它。如果在此过程中添加其他列,则可以使用宏或工作表更改事件过程将列字母添加到组合框中。你的问题/评论不清楚目的是什么。是的,但在我的情况下,它不适用,因为我没有可能添加其他表格。记录消失?当文件再次打开时,您似乎不希望组合框为空。您可以使用事件填充组合框值。因此,一旦打开工作簿后立即运行事件过程,您将不会看到空的commbobox。但这样,我需要知道所有已填充列的列表,以我的方式,在找到combobox值的同时填充combobox值。另一种方法可能是拼写列字母,它可以执行如下操作:for column=G toColumnLetter@chuck22如果要循环遍历列,则需要使用它们的编号。例如
工作表(“Sheet1”)。列(“A”)
工作表(“Sheet1”)。列(1)
相同,因此您可以对i=1到5执行
操作,并使用列号。顺便说一句,你看到我下面的答案了吗?如果你想在打开工作簿时填充组合框,你可以使用工作簿\打开事件填充它。如果在此过程中添加其他列,则可以使用宏或工作表更改事件过程将列字母添加到组合框中。从您的问题/评论中不清楚目的是什么。是的,但在我的情况下,它不适用,因为我无法添加其他工作表。
Dim lastCol,只要长
•列计数是
Long
而不是
Integer
。就是这样。。干杯。
Dim lastCol只要长
•列计数是
Long
而不是
Integer
。就是这样。。干杯