VBA:如何将数组的值设置为电子表格的第一行?

问题描述 投票:0回答:1

您好,我是VBA的新手,正在尝试创建一个数组,该数组的值来自我拥有的工作表的第一行,然后将这些值打印在另一张工作表中。到目前为止,我已经尝试读取Sheet2的第一行,将每个值存储在数组中,直到我碰到一个空单元格,然后在Sheet3的第一行中打印该数组。

我在while循环中收到应用程序定义的错误,在该循环中,我确保行不等于Null,并且不确定原因。这是我到目前为止的代码:

Private Sub createFormatSheet()

    With Worksheets("Sheet2")

        Dim myTags() As Variant
        Dim tag As Variant

        Dim rw As Range
        Dim i As Integer

        i = 1
        For Each rw In .Rows

            While rw(i, 1) <> Null
                myTags = Array(rw(i, 1))

                i = i + 1
            Wend

        Next rw

    End With


    With Worksheets("Sheet3")
    i = 1

    For Each tag In myTag
        .Cells(i, 1).Value = tag


    Next tag


    End With

End Sub
excel vba while-loop range variant
1个回答
0
投票

这里有两种方法:

  1. 使用数组(您无需遍历项目)>
  2. 直接使用范围,不涉及数组
  3. 使用F8逐步执行代码,查看正在发生的事情

Private Sub createFormatSheet()

    Dim sourceSheet As Worksheet
    Dim targetSheet As Worksheet

    Dim startRow As Long
    Dim endRow As Long

    Dim values As Variant

    Set sourceSheet = ThisWorkbook.Worksheets("Sheet2")
    Set targetSheet = ThisWorkbook.Worksheets("Sheet3")

    ' Array approach (no need to loop) source = column 1
    startRow = 1
    endRow = sourceSheet.Cells(startRow, 1).End(xlDown).Row

    values = sourceSheet.Range(sourceSheet.Cells(startRow, 1), sourceSheet.Cells(endRow, 1)).Value

    ' Target = column 1
    targetSheet.Cells(startRow, 1).Resize(endRow, 1).Value = values

    ' Direct range target column 2
    targetSheet.Cells(startRow, 2).Resize(endRow, 1).Value = sourceSheet.Range(sourceSheet.Cells(startRow, 1), sourceSheet.Cells(endRow, 1)).Value

End Sub

让我知道是否可行

© www.soinside.com 2019 - 2024. All rights reserved.