动态列表框

dynamic listbox

我想添加一个复选框来显示任何“未找到”的项目。 这时我想编辑 Listitem

当我打开 userform2 并在不选中 checkbox1 的情况下编辑列表框时,我的代码目前正在运行。

然而,当我的复选框 1 为真时,它正确显示唯一的“未找到”,但是当我去编辑列表项时,我收到 运行-时间错误 1004 对象 _global 的方法范围失败

在:

Set rCell = Range(.RowSource).Resize(1).Offset(.ListIndex)

我的完整代码:for userform2

Private Sub ListBox2_Click()
TextBox1.Enabled = True
TextBox1.Value = ListBox2.Value
End Sub

Private Sub TextBox1_Change()
Dim rCell As Range
With ListBox2
Set rCell = Range(.RowSource).Resize(1).Offset(.ListIndex)
rCell.Value = TextBox1.Value
End With
End Sub

Private Sub CheckBox1_Click()
OptimizedMode True
If userform2.CheckBox1.Value = True Then
Worksheets("Table").Range("A1").AutoFilter Field:=1, Criteria1:="Not Found", Operator:=xlOr, Criteria2:="="
userform2.ListBox2.RowSource = vbNullString
userform2.ListBox2.ColumnHeads = False
Dim rng As Range
 Dim Cel1 As Range
 Dim LR As Long
 Dim ws As Worksheet
 Set ws = Sheets("Table")
 With ws
 LR = .Cells(.Rows.Count, "A").End(xlUp).Row
 Set rng = .Range("A2:A" & LR).SpecialCells(xlCellTypeVisible)
 With userform2.ListBox2
 .ColumnCount = 1
 For Each Cel1 In rng
 .AddItem CStr(Cel1.Value)
 .List(.ListCount - 1, 1) = Cel1.Offset(0, 1).Value

 Next Cel1
 End With
 End With

End If
If CheckBox1.Value = False Then

With userform2.ListBox2
.RowSource = "Table!A2:A1048576"
End With
End If
OptimizedMode False
End Sub

您使用CheckBox1_Click事件来控制ListBox2.RowSource。如果 CheckBox1 为 TRUE,则清除 RowSource,然后将项目添加到列表中。

清除 RowSource 时 Range(.RowSource)Range("") 相同,当然会出错。

在这些情况下,您需要设计另一种方法来确定 ListBox 引用的行。