使用变量定义二维数组并粘贴至列的VBA技术问题
解决VBA中用变量定义二维数组并赋值区域的问题
你遇到的核心问题是VBA里固定大小的数组要求维度用常量,而LRow是变量,所以直接Dim copyArray(1 To LRow, 1 To 1)会报错。下面给你两种可行的解决思路:
方法1:使用动态数组(ReDim)
先声明一个没有固定维度的动态数组,拿到LRow的值后再用ReDim指定大小,之后就能正常赋值了:
Dim copyArray() As Variant ' 先声明动态数组 Dim LRow As Long ' 激活工作表并获取总行数 Windows("export").Activate With Sheets("export") LRow = .Range("A" & .Rows.Count).End(xlUp).Row End With ' 重新定义数组维度 ReDim copyArray(1 To LRow, 1 To 1) ' 将区域值赋值给数组 copyArray = Worksheets("export").Range("A1:A" & LRow).Value
方法2:直接用变体变量接收区域值(更简洁)
其实不用手动定义数组维度,VBA的变体变量可以直接接收整个区域的值,自动变成对应的二维数组(行数就是区域的行数,列数为1),代码更简洁:
Dim copyArray As Variant Dim LRow As Long Windows("export").Activate With Sheets("export") LRow = .Range("A" & .Rows.Count).End(xlUp).Row ' 直接把区域赋值给变体变量,自动成为二维数组 copyArray = .Range("A1:A" & LRow).Value End With
之后你就可以直接使用copyArray这个二维数组,不用调用Transpose就能直接粘贴到一列中,示例:
' 粘贴到Sheet2的B列 Worksheets("Sheet2").Range("B1:B" & LRow).Value = copyArray
额外提醒:如果LRow为0(比如A列无数据),建议加个判断避免报错:
If LRow > 0 Then copyArray = .Range("A1:A" & LRow).Value Else ' 处理空列的逻辑,比如提示用户或跳过赋值 End If
内容的提问来源于stack exchange,提问作者kiltro
相关产品推荐
相关产品推荐

