动态列表框
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 引用的行。
我想添加一个复选框来显示任何“未找到”的项目。 这时我想编辑 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 引用的行。