首页 > 解决方案 > 如何将数组的值设置为工作表的第一行?

问题描述

我正在尝试创建一个数组,其中值来自工作表的第一行,然后在另一张表中打印这些值。

我尝试读取 Sheet2 的第一行,将每个值存储在数组中,直到遇到一个空单元格,然后在 Sheet3 的第一行中打印该数组。

我在确保行不等于 Null 的 while 循环中遇到应用程序定义的错误。

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

标签: excelvbawhile-loop

解决方案


这里有两种方法:

  1. 使用数组(您不需要遍历项目
  2. 直接使用范围,不涉及数组

使用单步执行代码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

让我知道它是否有效


推荐阅读