Excel VBA,从Worksheet阅读数组中的值,范围

bkhjykvo  于 2023-03-24  发布在  其他
关注(0)|答案(2)|浏览(124)

我目前正在Excel中进行一个项目,遇到以下问题:

Public Sub test()
    Dim TestRange As Variant
    TestRange = Worksheets("test_worksheet").Range("Q50:Q60").Value
    
    ' Here an error 9 (Subscript out of range) pops up
    MsgBox (CStr(TestRange(2)))
End Sub

据我所知,TestRange变量应该包含一个数组,数组的大小为11,使用UBound(TestRange) - LBound(TestRange) + 1确认,但无论我使用什么索引,都会弹出错误9。LBound(TestRange)的返回值为1。
我想这样做,如果可能的话,我已经读了一些答案,它应该可以把范围到一个数组,只是不知道如何从它读取。

  • 请注意,这是一段测试代码,我扔在一起,以确认将Worksheet.Range的值放入数组中并阅读它的可能性 *
q9rjltbz

q9rjltbz1#

从范围中提取的数组是2D类型,这意味着它也有列。在您的情况下只有一个。因此,您应该尝试:

MsgBox CStr(TestRange(2, 1)) 'No need of casting to string, anyhow...

如果你更喜欢1D数组,你可以通过转置将TestRange转换为1D类型:

MsgBox Application.Transpose(TestRange(2, 1))

或者,查看立即窗口Ctrl + G中的所有(转置)数组:

Debug.Print Join(Application.Transpose(TestRange(2, 1)), "|")
mcvgt66p

mcvgt66p2#

您当前的代码将把垂直范围读入一个二维数组。添加一行代码将数组转换为一维数组

Public Sub test()
Dim TestRange As Variant

TestRange = Worksheets("Sheet1").Range("Q50:Q60").Value
TestRange = Application.WorksheetFunction.Transpose(TestRange)
' Here an error 9 (Subscript out of range) pops up
MsgBox (CStr(TestRange(2)))
End Sub

相关问题