Объявите ваш массив с размером Dim Arr(1) as String
Я не совсем уверен, каково ваше конкретное приложение, но массив должен иметь размер, прежде чем его можно будет использовать -
Sub test()
'One number indicates one dimension and starts at **0** See footnote
Dim Arr(1) As String
Arr(1) = "MyRange2"
Range("A2").Name = Arr(1)
End Sub
сноска
Если вы еще этого не знаете, вам нужно будет redim
его:
Sub test()
Dim Arr() As String
'Do stuff to get a number
ReDim Arr(1)
Arr(1) = "MyRange3"
Range("A3").Name = Arr(1)
End Sub
В вашем примере я разбил его, но он работает так:
Sub test()
Dim Arr() As String
ReDim Arr(1)
Arr(1) = "MyRange"
Range("A1").Name = Arr(1)
Set xlsdatasource = ThisWorkbook.Names("MyRange").RefersToRange
MsgBox (xlsdatasource.Address)
End Sub
Дает мне $A$1
в msgbox.
Замените "A1" на «A1:C1», и msgbox даст мне $A$1:$C$1
.
Более сложный пример с теми же ограничениями
Для A1: чтение A6 -
this
is
a
one
dimensional
array
Это также компилируется и запускается:
Sub test()
Dim Arr() As String
Dim j As Integer
j = [counta(A1:A10)]
ReDim Arr(j - 1)
Dim i As Integer
For i = 0 To 5
Arr(i) = Cells(i + 1, 1)
Next
Dim rng As Range
For i = 0 To 5
Set rng = Range(Cells(i + 2, i + 5), Cells(i + 2, i + 8))
rng.Name = Arr(i)
Next
Set xlsdatasource = ThisWorkbook.Names(Arr(3)).RefersToRange
MsgBox (xlsdatasource.Address)
End Sub
и msgbox отображает $H$5:$K$5
.
Меняем это:
Set xlsdatasource = ThisWorkbook.Names(Arr(3)).RefersToRange
MsgBox (xlsdatasource.Address)
к этому:
Set xlsdatasource = ThisWorkbook.Names("one").RefersToRange
MsgBox (xlsdatasource.Address)
также возвращает msgbox, отображающий $H$5:$K$5
.
Записка
Если в ячейке A4
читается 1
вместо one
, я не могу использовать Dim Arr() as String
поскольку "1" не начинается с буквы или подчеркивания.
Я мог бы использовать _1
или Dim Arr() as Variant
, но на самом деле я не мог назвать диапазон "1", потому что это недопустимое значение для именования.