Как разместить массив на другой лист? - PullRequest
0 голосов
/ 30 марта 2019

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

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

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

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

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

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

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

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

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 Ответ

0 голосов
/ 31 марта 2019

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

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" & rowToPasteTo & ":" & "M" & rowToPasteTo).Value = Sh.Range("A" & Source.Row & ":" & "M" & Source.Row).Value
        End With
    End If
End Sub

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...