我需要从整列而不是命名范围填充我的下拉列表。
使用命名范围的工作代码:
'Populate drop-down list (combo box) from range...
Dim range_b As Range
For Each range_b In Worksheets("2.1 Clients").Range("ClientList")
With Me.cs_ClientName1
.AddItem range_b.Value
.List(.ListCount - 1, 1) = range_b.Offset(0, 1).Value
End With
Next range_b
我尝试了For Each
行的各种排列:
'For Each range_b In Worksheets("2.1 Clients").Columns(4)
'For Each range_b In Worksheets("2.1 Clients").Range(Columns(4))
'For Each range_b In Worksheets("2.1 Clients").Columns("D:D")
......最后一个似乎导致Excel崩溃。
答案 0 :(得分:1)
For Each range_b In Worksheets("2.1 Clients").Range("D:D")
RANGE()对字符串地址感到满意。
修改#1:强>
这是一个有效的例子:
Sub dural()
Dim range_b As Range
For Each range_b In Worksheets("2.1 Clients").Range("D:D")
If range_b.Value = "good" Then
MsgBox "good found"
Exit Sub
End If
Next range_b
End Sub
答案 1 :(得分:0)
使用命名范围而不是在代码中修复它更为明智。想象一下有人在D之前添加了一个列!您必须更改所有硬编码的代码。将With块放在For循环的顶部也更好。您可能还需要清除它之前的列表。
确保命名范围 ClientList 引用工作表(“2.1客户端”)。范围(“D:D”)。如果您已经这样做,请使用以下内容:
With Me.cs_ClientName1
For Each range_b In ThisWorkbook.Names("ClientList").RefersToRange
If Not IsEmpty(range_b) Then
.AddItem range_b.Value
.List(.ListCount - 1, 1) = range_b.Offset(0, 1).Value
End If
Next range_b
End With
如果符合以下条件,可以实现更好的表现:
代码:
' Data Starts right below the Header (Named Range)
Set range_b = ThisWorkbook.Names("ClientList").RefersToRange.Offset(1,0)
With Me.cs_ClientName1
.Clear ' Clear existing data
Do Until IsEmpty(range_b)
.AddItem range_b.Value
.List(.ListCount - 1, 1) = range_b.Offset(0, 1).Value
Set range_b = range_b.Offset(1, 0)
Loop
End With
Set range_b = Nothing