You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用变量定义二维数组并粘贴至列的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:34:46