我必须遗漏一些显而易见的东西,但不知何故我会遇到类型不匹配的错误。
Private Sub btnGenerate_Click()
populateListBox "Table_Install_Base", 1, Me.lbPressType
end sub
Sub populateListBox(sTableName As String, iColumn As Integer, lb As ListBox)
Dim v, e
With Sheets(1).ListObjects(sTableName).ListColumns(iColumn).DataBodyRange
v = .Value
End With
With CreateObject("scripting.dictionary")
.comparemode = 1
For Each e In v
If Not .exists(e) Then .Add e, Nothing
Next
If .Count Then lb.List = Application.Transpose(.keys)
End With
end sub
编辑:
删除了sTableName和iColumn并对这些值进行了硬编码,不断收到同样的错误。所以100%确定它与列表框有关。不知道它是否有任何帮助,但是在Excel中的用户窗体内运行此代码。
答案 0 :(得分:1)
我假设您的ListBox是一个ActiveX ListBox。如果这是正确的,您需要更改Sub上的签名,如下所示:
Sub populateListBox(sTableName As String, iColumn As Integer, lb As MSForms.ListBox)
请记住,有两种类型的ListBox,ActiveX和Forms。 ActiveX ListBox声明为MSForms.ListBox
,而Forms ListBox声明为ListBox
。