簡體   English   中英

使用動態范圍時Excel VBA錯誤

[英]Excel VBA error when using dynamic ranges

我正在嘗試用動態范圍的值填充組合框(拖到我的工作表上)。

通常,“ ThisWorkbook.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'以使用動態范圍?

通過Range屬性引用Range

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

有關更多信息, RefersToRange不起作用的原因是因為公式中沒有動態范圍的范圍,因此excel屬性無法讀取實際范圍。 因此,直接引用范圍是唯一的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM