首页 > 解决方案 > Array Redim Preserve 将列转置为多行错误下标超出范围错误

问题描述

我是这个论坛的新手,并且对 VBA 也有一些了解。我无法找出我当前使用的代码背后的错误。我正在尝试将列转换为多行。下面的示例数据: 示例数据:

我用于上述数据的代码:

Sub test()
    Dim wsThis As Worksheet, wsThat As Worksheet
    Dim vDB As Variant, vR() As Variant
    Dim r As Long, i As Long, n As Long
    Dim c As Integer, j As Integer, k As Integer

    Set wsThis = Sheet5: Set wsThat = Sheet8

    vdblast = wsThis.Range("A" & wsThis.Rows.Count).End(xlUp).Row
    vDB = wsThis.Range("A1:CC" & vdblast)
    vDB = wsThis.Range("a1").CurrentRegion
    r = UBound(vDB, 1)
    c = UBound(vDB, 2)

    n = 1
    For i = 2 To r
        For j = 8 To c
            If vDB(i, j) <> "" Then
                n = n + 1
                ReDim Preserve vR(1 To 9, 1 To n)
                For k = 1 To 8
                    vR(k, n) = vDB(i, k)
                Next k
            End If
            vR(9, n) = vDB(i, j)
        Next j
    Next i
    
    With wsThat
        .UsedRange.Clear
        .Range("a1").Resize(1, 8) = wsThis.Range("a1").Resize(1, 9).Value
        .Range("h1").Resize(1, 1) = Array("Activity Template")
        .Range("a2").Resize(n, 8) = WorksheetFunction.Transpose(vR)
    End With

End Sub

谢谢大家的帮助。

标签: arraysexcelvba

解决方案


数组 vDB 包含 Sheet5 的所有行和列,您可能有少于 8 列(k 1 到 8 的值)。

为了调试您的脚本,您可以使用 F8 逐步浏览您的代码,因为黄色标记会前进,当您用鼠标遍历您的变量时,您将能够在脚本的那一刻看到它们的值。


推荐阅读