我正在处理包含ListBox的VBA用户表单 到目前为止,当我不得不操纵一个或多个时,我总是在我的潜艇中继续这样做,dlg作为对话框名称,并且它没有造成任何问题,因为我从来不想做任何复杂的事情:
Dim List1 As Object
...
List1 = dlg.GetControl("CBXname")
...
List1.addItem("String",index)
...
现在我想在此Sub
中执行以下操作...
If (List1.Exists(Cell1.String) = False) Then
List1.addItem(Cell1.String,k)
End If
...
List1.Clear
...
但是我无法做到,因为List1是一个Object。但是,如果我决定将List1声明为Listbox,我不知道如何从对话框中对ListBox进行适当的控制(当前的getcontrol给我一个错误)。
答案 0 :(得分:0)
您的代码的一个问题是列表框对象没有“exists”属性。要检查列表框项目中是否已存在某个值,您需要遍历这些项目。
dim i as integer
for i = 0 to List1.listcount - 1
if List1.column(0, i) = myvalue then
'myvalue exists in List1, skip
else
List1.additem myvalue
end if
next i
myvalue是您尝试添加到列表框的任何值。但是,这会将我们带到您的代码中的第二个问题,即添加“Cell1.String”。如果您尝试从工作表范围添加值,则需要引用该范围的值,因为工作表范围在此处使用时没有“字符串”属性。 IE浏览器。 Cell1 =范围(“A1”)。值
至于控制列表框,您可以简单地将对象名称称为表单的对象。例如,dlg.List1,如果对象的名称是List1。
答案 1 :(得分:0)
以下是您可以为任何列表框调用的通用例程。调用代码假定一个名为ListBox1的列表框,一个名为TextBox1的文本框和一个名为CommandButton的命令按钮。当您单击该按钮时,它会在列表框中搜索textbox1中的文本。
Private Function ExistsInListbox(ByRef aListBox As msforms.ListBox, ByVal Item As String) As Boolean
Dim booFound As Boolean
booFound = False
Dim t As Integer
ExistsInListbox = False
For t = 0 To aListBox.ListCount - 1 'correction, aListBox not ListBox1
If Item = aListBox.List(t) Then
'if we find a match, short-circuit the loop
booFound = True
Exit For
End If
Next
ExistsInListbox = booFound
End Function
private sub CommandButton_click()
Dim answer As String
Dim val As Boolean
val = ExistsInListbox(Me.ListBox1, TextBox1.Text)
If val Then
answer = "found"
Else
answer = "Not Found"
End If
MsgBox "found-" & answer
End Sub