我正在尝试用动态范围的值填充组合框(拖到我的工作表上)。
Normaly'YhisWorkbook.Names(“NAME_OF_RANGE”)。RefersToRange'可以工作,但它在我的动态范围内失败了!
我尝试过不同的解决方案(请参阅下面的代码),但随后工作表名称将从引用中删除(因此正在填充错误的数据)
Public Sub FillCombobox(cboComboBox As ComboBox, sRange As String)
'Remember current selected item
Dim sSelectedItem As String
sSelectedItem = cboComboBox.Text
'Empty the combobox
cboComboBox.Clear
cboComboBox.AddItem "---pick one---"
'Get the data from the dynamic range
Dim oListFillRange As Range
'This line will throw an error:
Set oListFillRange = ThisWorkbook.Names(sRange).RefersToRange 'Does not work with a dynamic range!!!
''Set oListFillRange = Range(Application.Evaluate(ThisWorkbook.Names(sRange).RefersTo).Address) 'Works with dynamic ranges on the SAME SHEET (as the sheetname is stripped out!)
'Fill combobox
Dim oRange As Range
For Each oRange In oListFillRange
cboComboBox.AddItem oRange.Value
Next oRange
'Set previous selected item
Dim i As Integer
For i = 0 To cboComboBox.ListCount - 1
If cboComboBox.List(i) = sSelectedItem Then
cboComboBox.ListIndex = i
Exit for
End If
Next i
If cboComboBox.ListIndex = -1 Then cboComboBox.ListIndex = 0
End Sub
那么如何获得'ThisWorkbook.Names(“NAME_OF_RANGE”)。RefersToRange'来处理动态范围?
答案 0 :(得分:1)
请参阅Range
属性范围。
Set oListFillRange = Sheets("mySheet").Range(sRange) 'where mySheet is the relevant sheet name
有关更多信息,RefersToRange
不起作用的原因是因为动态范围的公式中没有范围,因此excel属性无法读取实际范围。因此,直接参考范围是唯一的出路。