ประกาศอาร์เรย์ของคุณด้วยขนาด - 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" เพราะมันเป็นค่าที่ไม่ถูกต้องสำหรับการตั้งชื่อ