1

コンボボックス (ワークシートにドラッグ) にダイナミック レンジの値を入力しようとしています。

通常 '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' を動的範囲で動作させるにはどうすればよいでしょうか?

4

1 に答える 1

1

Range物件別の範囲をご参照ください。

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

詳細についてRefersToRangeは、動的範囲の式に範囲がないため、機能しない理由があり、Excel プロパティは実際の範囲を読み取れません。したがって、範囲を直接参照することが唯一の方法です。

于 2012-10-16T13:57:28.300 に答える