Arrays 范围到数组在VBA中不知怎么搞混了

Arrays 范围到数组在VBA中不知怎么搞混了,arrays,excel,vba,Arrays,Excel,Vba,我希望将一个范围复制到一个数组中。范围为两列和未知行 这段代码在新的工作簿中非常有效,但在我复杂的大工作簿中却不行 出了什么问题?在复杂的工作簿中,下面的代码显示了正确数量的消息框(LastRow是正确的),但数组值为空 Sub Button1_Click() Dim pN() As Variant Dim LastRow As Integer With Worksheets("merp") LastRow = .Cells(.Rows.Count, "

我希望将一个范围复制到一个数组中。范围为两列和未知行

这段代码在新的工作簿中非常有效,但在我复杂的大工作簿中却不行

出了什么问题?在复杂的工作簿中,下面的代码显示了正确数量的消息框(LastRow是正确的),但数组值为空

Sub Button1_Click()
    Dim pN() As Variant
    Dim LastRow As Integer

    With Worksheets("merp")
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

        ReDim pN(1 To LastRow, 1 To 2)
        pN = .Range("A1:B" & LastRow).Value

        MsgBox LastRow

        For i = 1 To LastRow
            MsgBox CStr(pN(i, 1)) & " and " & CStr(pN(i, 2))
        Next

    End With
End Sub
如果您的“复杂工作簿”在该特定范围内没有合并的单元格,它应该可以工作


如果您的“复杂工作簿”没有在该特定范围内合并单元格,它应该可以工作…

如果没有,我不知道如何回答您的问题,因为答案似乎取决于您没有告诉我们的事情(这个神秘的“大复杂工作簿”的结构,以及可能的其他代码)。当我模拟一个示例时,您发布的代码对我很有用。(这不是你的问题,但最好使用
Long
而不是
Integer
,最好使用
Option Explicit
来强制自己声明变量。
i
没有声明。)谢谢John。工作簿中有我写过的大约30个不同的宏,尽管它们都不应该影响所讨论的代码,所以我不确定如何公开它们。我已经有点放弃了,而是将范围粘贴到工作表中并引用粘贴的单元格,而不是将其存储在数组中并以这种方式引用。如果没有,我看不出你的问题是如何回答的,因为答案似乎取决于你没有告诉我们的事情(这个神秘的结构“大而复杂的工作簿”,大概还有其他一些代码)。当我模拟一个示例时,您发布的代码对我很有用。(这不是你的问题,但最好使用
Long
而不是
Integer
,最好使用
Option Explicit
强制自己声明变量。
i
没有声明。)谢谢你,John。我写的工作簿大约有30个不同的宏,虽然它们都不应该影响所讨论的代码,所以我不确定如何公开它们。我只是有点放弃了,而是将范围粘贴到工作表中并引用粘贴的单元格,而不是将其存储在数组中并以这种方式引用。这是e在功能上(或多或少)等同于OP的代码,因此无论其原始代码失败的原因为何,它都可能失败。话虽如此,该代码当然是他们尝试做的事情的一种更惯用的方式。该代码是(或多或少)功能上等同于OP的代码,因此无论他们的原始代码失败的原因是什么,它都有可能失败。尽管如此,这段代码当然是一种更惯用的方式来完成他们试图做的事情。
Option Explicit

Sub Button1_Click()
        Dim pN As Variant, i As Long
        Dim LastRow As Long

        With Worksheets("merp")
            LastRow = .Cells(.Rows.count, "A").End(xlUp).Row
            pN = .Range("A1:B" & LastRow).value
            MsgBox LastRow

            For i = 1 To LastRow
                MsgBox CStr(pN(i, 1)) & " and " & CStr(pN(i, 2))
            Next
        End With
End Sub