Как установить значения массива в качестве первой строки на рабочем листе? - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь создать массив, в котором значения берутся из первой строки рабочего листа, а затем распечатать эти значения на другом листе.

Я попытался прочитать первую строку в Sheet2, сохранить каждое значение в массив, пока я не достигну пустой ячейки, а затем распечатать этот массив в первой строке Sheet3.

Я получаю ошибку, определенную приложением, в то время как l oop, где я проверяю, что строка не равна 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

1 Ответ

0 голосов
/ 06 февраля 2020

Вот два подхода:

  1. Использование массива (вам не нужно l oop через элементы
  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

Дайте мне знать, работает ли он

...