วิธีการโทรหาช่วง namer โดยใช้ตัวแปรเพื่อกำหนดชื่อ


0

ตามเอกสารประกอบชื่อข้อความที่ยกมาใด ๆ สามารถกำหนดโดยตัวแปรถ้าฉันกำหนด

Set xlsDataSource = Application.Workbooks("New_TOR_V1.xlsm").Names("MyRange").RefersToRange

มันทำงานได้ตามที่คาดไว้ถ้าฉันใช้

Dim S as string
S="MyRange"

Set xlsDataSource = Application.Workbooks("New_TOR_V1.xlsm").Names(S).RefersToRange

มันยังทำงานได้ดี

แต่ใช้

Dim Arr() as string
Arr(1)="MyRange"
Set xlsDataSource = Application.Workbooks("New_TOR_V1.xlsm").Names(Arr(1)).RefersToRange

ให้ข้อผิดพลาด

และนอกจากนี้ยังมี

Set xlsDataSource = Application.Workbooks("New_TOR_V1.xlsm").Names(Cstr(Arr(1))).RefersToRange

ให้ข้อผิดพลาด

ทำไมองค์ประกอบอาเรย์ทำให้เกิดข้อผิดพลาดและฉันจะแก้ไขได้อย่างไร

ฉันจำเป็นต้องใช้อาร์เรย์หรือไม่


คุณพยายามจะทำอะไร? ผ่านช่วงที่ตั้งชื่อไว้ในอาร์เรย์หรือใช้อาร์เรย์เพื่อเติมช่วงที่ตั้งชื่อไว้?
Raystafarian

หรือคุณพยายามตั้งชื่อช่วงโดยใช้องค์ประกอบของอาร์เรย์
Raystafarian

คำตอบ:


0

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


@ ไม่ตอบคำถามของคุณโปรดคลิกเครื่องหมายถูกสีเขียวถัดจากคำตอบที่ช่วยคุณ สิ่งนี้จะทำเครื่องหมายคำถามว่าแก้ไขแล้วสำหรับทุกคนที่กำลังมองหาสิ่งที่คล้ายกันหรือใครก็ตามที่กำลังมองหาคำถามที่จะตอบ
Raystafarian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.