1
동적 범위의 값으로 (워크 시트에 끌어다 놓은) 콤보 상자를 채우려고합니다.동적 범위를 사용할 때 Excel VBA 오류
Normally '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을받을 수 있나요 (따라서 잘못된 데이터가 채워지고있다). 이름 ("NAME_OF_RANGE"). RefersToRange '동적 범위로 작업 하시겠습니까?
시트 이름 추가 제안 사항, 감사합니다! 차라리 'global'메서드를 사용합니다. 시트 이름을 바꿀 때 VBA 코드를 업데이트 할 필요는 없지만 여기에는 선택의 여지가없는 것처럼 보입니다. –
예, 이제 생각해 보겠습니다. 무엇이든 상관없이 시트 이름이 필요합니다. 내 대답을 더 정확하게 편집 할 것입니다. –
Name.RefersToRange를 사용하여 동적 범위를 참조 할 수 있습니다. 그러나 당신의 대답은 더 직접적입니다. –