用表格栏填充VBA userform的combobox以及一个附加选项
我正在开发一个应用程序,擅长与VBAforms。 在一种forms中,我有一个combobox让用户select客户名称,这个combobox的行源是一个命名范围(客户名称表的名称列)。 一切工作正常,但我需要添加1或更多的combobox中不存在的表列中的项目。 例如,我需要在cobmobox中添加“全部”项目,以便用户可以select特定的客户名称或全部。 在其他地方,我不想添加“其他”项目在同一个行的combobox,所以如果客户是新用户可以select其他,然后在文本框中键入名称。
我尝试下面的代码来添加一个项目
Private Sub UserForm_Activate() With Me.testCombo .AddItem "All" End With End Sub
但我得到错误运行时错误'70'权限被拒绝
如果我从combobox中删除rowsource属性然后上面的代码工作,但只有一个项目“全部”显示。
注意:我不想在客户表中添加“全部”和“其他”,这可能是简单的解决scheme,但会导致其他问题。
尝试像这样:
Private Sub UserForm_Activate() Dim rowValue As Variant Dim lngCount As Long Dim myCell As Range Dim varCombo() As Variant With Me.ComboBox1 ReDim varCombo(Me.ComboBox1.ListCount) For Each myCell In Range(.RowSource) varCombo(lngCount) = myCell.value lngCount = lngCount + 1 Next myCell .RowSource = "" For lngCount = LBound(varCombo) To UBound(varCombo) - 1 .AddItem CStr(varCombo(lngCount)) Next lngCount .AddItem "All" .AddItem "Nothing" End With End Sub
正如在评论中提到的,通过ASH,您应该取消设置.RowSource属性。 然而,你不会失去它,如果你运行这个代码两次,那将是一样的。 在我的代码中,我使用UBound(varCombo) - 1
,因为我使用lngCount=lngCount+1
上最后循环通过单元格。
像这样的东西可以做你需要的东西
Dim a() As Variant Dim b() As String Dim s As String a = Application.Transpose(Range("a1:a5").Value) s = "Please select;" & Join(a, ";") Erase a b = Split(s, ";") Me.ComboBox1.List = b
谢谢大家的帮助,主要问题是ASH的权限,如果设置了Rowsource,那么不能在ComboBox中添加任何项目。 所以我从表单中的属性中删除RowSource。 并写下面的代码,似乎一切工作正常。 我希望我的代码足够简单。
Private Sub fillComboBox() Dim comboData As Range With Me.CWR_CustName ' first option of comobobox will be All .AddItem "All" For RW_Cust = 1 To Range("tblCust").Rows.Count ' add each customer name from customer table name column .AddItem (Range("tblCust[Name]")(RW_Cust)) Next RW_Cust End With End Sub