我有一个动态范围用于在vba中设置组合框。
范围从A3
开始(不包含任何内容),并且一直到A3:A9999
,具体取决于范围内的元素数量。
然后代码从范围中提取数据并将其存储在本地变体中。
我在VBA中的代码是:
If tempj <> Null Then
cmb_JobNum.List = tempj
End If
当数组中有0个元素tempj = Null
时,它不会尝试设置列表。
当数组中有1个元素tempj = [Value of cell]
时,它会将列表设置为该单个元素。
当数组中有2个或更多元素时,tempj
现在是一个数组,因此尝试将其等同于单个元素会引发“类型不匹配”错误。我不知道如何更新代码以便它不会被错误捕获,因为每次运行equate都会崩溃。
答案 0 :(得分:0)
你可以尝试这样:
Dim i As Long
For i = LBound(tempj) To UBound(templ)
cmb_JobNum.AddItem tempj(i)
Next
此代码将遍历您的数组并将其中的每个元素添加到组合框中。因此,如果数组是empy,则不会添加元素,当有&gt; 0元素时,则会添加所有元素。
答案 1 :(得分:0)
以下是使用动态命名范围设置填充
的示例Option Explicit
Public Sub test()
With ThisWorkbook.Worksheets("Sheet6") '<== change as appropriate
.ComboBox1.ListFillRange = .Range("dynRange").Address
End With
End Sub
通过名称管理器添加 dynRange
公式(Ctrl + F3)
=OFFSET(Sheet6!$A$3,0,0,COUNTA(Sheet6!$A:$A),1)
使用工作表更改事件自动更新组合框:
您可以将其绑定到范围A3:A9999上的Worksheet_Change事件中,以自动更新Combobox。
如果绑定到包含组合框的工作表的代码窗格中的事件,您可以拥有以下内容:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A3:A9999")) Is Nothing Then
Application.EnableEvents = False
Me.ComboBox1.ListFillRange = ThisWorkbook.Worksheets("Sheet6").Range("dynRange").Address
Application.EnableEvents = True
End If
End Sub
示例代码运行:
包含Combobox的工作表的代码窗格:
注意:强>
这是假设一个ActiveX组合框,但可以轻松更新Form Control ComboBox。
对于表单控件swop out lines并使用:
With Shapes("Drop Down 2").ControlFormat '<== change to appropriate name
.ListFillRange = ThisWorkbook.Worksheets("Sheet6").Range("dynRange").Address
End With
编辑:对于UserForm组合框,您可以填充初始化,例如
Private Sub UserForm_Initialize()
cb1.RowSource = Sheet1.Range("dynRange").Address
End Sub
答案 2 :(得分:0)
想出来
If VarType(tempj) <> 0 Then
If VarType(tempj) = 8 Then
cmb_JobNum.AddItem tempj
Else
cmb_JobNum.List = tempj
End If
End If