使用动态范围时出现Excel VBA错误

时间:2012-10-16 13:46:59

标签: excel excel-vba vba

我正在尝试用动态范围的值填充组合框(拖到我的工作表上)。

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'来处理动态范围?

1 个答案:

答案 0 :(得分:1)

请参阅Range属性范围。

Set oListFillRange = Sheets("mySheet").Range(sRange) 'where mySheet is the relevant sheet name

有关更多信息,RefersToRange不起作用的原因是因为动态范围的公式中没有范围,因此excel属性无法读取实际范围。因此,直接参考范围是唯一的出路。