Как мне разместить массив на другом листе?

#excel #vba

#excel #vba

Вопрос:

Итак, я создаю фрагмент кода, который перемещает строку данных на другой лист со значением в столбце окна, которое я превращаю в «7 — Задействовано»

Все, вплоть до того, что выделенный код (показанный выше) работает хорошо.

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

Код, который я использую ниже, теперь выдает ошибку времени выполнения 438: Ожидаемая ошибка компиляции: я выделил дентификатор или заключил в квадратные скобки.

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

Кроме того, я хочу, чтобы данные были размещены в первой пустой строке на следующем листе -‘Tank’

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

Должен ли я продолжать использовать транспонированный массив и как мне вставить переменные массива на другой лист введите описание изображения здесь

 Dim myRange As Range

For Each myRange In Range("I6:I1000")

Select Case myRange.Value
Case "7 - engaged"
VBA.Interaction.MsgBox "Client status selected as engaged. Confirm to post to tank", 1, "Status Change"

myArr = Application.Transpose(Application.Transpose(Range("A:M")))

Sheets("Tank").(BlankRow = Range("B1000").End(xlUp).Row   1)
ActiveSheet.Range("A:M") = WorksheetFunction.Transpose(arr)




End Select

Next myRange

End Sub
  

Комментарии:

1. Добро пожаловать в Stack Overflow. Я предполагаю, что ваш вопрос был отклонен, потому что вы опубликовали скриншот кода, а не фактический код. Это исключительно затрудняет людям помощь и устранение неполадок в вашей проблеме. Пожалуйста, замените изображение фактическим кодом, и людям будет намного проще помогать.

Ответ №1:

Я думаю, вам нужно что-то вроде приведенного ниже кода.

 Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
    ' Maybe disable events whilst this code runs (and re-enable before exit)
    ' to prevent recursion.

    If Source.Column <> 9 Then Exit Sub ' 9 = I
    If Source.Cells.Count > 1 Then Exit Sub ' Check this first before making comparison on next line
    If Source.Value <> "7 - engaged" Then Exit Sub

    If MsgBox("Client status selected as engaged. Confirm to post to tank.", vbOKCancel) = vbOK Then
        With ThisWorkbook.Worksheets("Tank")
            Dim rowToPasteTo As Long
            rowToPasteTo = .Cells(.Rows.Count, "B").End(xlUp).Row   1

            .Range("A" amp; rowToPasteTo amp; ":" amp; "M" amp; rowToPasteTo).Value = Sh.Range("A" amp; Source.Row amp; ":" amp; "M" amp; Source.Row).Value
        End With
    End If
End Sub
  

Полезно помещать Option Explicit перед вашим кодом. Похоже, что вы назначили, myArr но перенесли arr в свой код. Предполагая, что это не были глобальные переменные, Option Explicit могут возникнуть такие проблемы. Также были некоторые ошибки синтаксиса и элемента / атрибута.

Комментарии:

1. Приношу извинения за то, что вчера не добавил код, я устал и не подумал