Макрос - копирование отдельных ячеек в одной строке, вызванных флажком, на другой лист - PullRequest
0 голосов
/ 29 октября 2018

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

В настоящее время у меня написан макрос «Мастер», который очищает рабочий лист (форматы, текст в числа и т. Д.), А также добавляет флажки в конец каждой строки, содержащей данные. Эти флажки связаны с ячейкой. После того, как оператор заполнит рабочий лист, ему необходимо будет поставить флажок для каждой строки данных, которая «не соответствует спецификации». Эти строки будут затем скопированы на следующий лист в рабочей книге. Это вызвано кнопкой. Мой текущий макрос работает иначе, чем копирование всей строки данных, когда я хочу копировать только ячейки в столбцах с «A» по «I». Ячейки в столбцах «J» и вне содержат данные, которые НЕ нужно копировать.

Вот мой текущий макрос, который, как я уже сказал, копирует всю строку:

Sub CopyRows() 
    Dim LRow As Long, ChkBx As CheckBox, WS2 As Worksheet
    Set WS2 = Worksheets("T2 FAIR (Single Cavity)")
    LRow = WS2.Range("A" & Rows.Count).End(xlUp).Row

    For Each ChkBx In ActiveSheet.CheckBoxes
        If ChkBx.Value = 1 Then
            LRow = LRow + 1
            WS2.Cells(LRow, "A").Resize(, 14) = Range("A" & _
            ChkBx.TopLeftCell.Row).Resize(, 14).Value
        End If
    Next
End Sub

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Спасибо всем, кто нашел время, чтобы помочь мне с этим. Ваша помощь ценится больше, чем вы знаете. Ответ таков:

Sub CopyRows()

    Dim ws1 As Worksheet
    Set ws1 = Worksheets("T1 FAIR (Single Cavity)")

    Dim ws2 As Worksheet
    Set ws2 = Worksheets("T2 FAIR (Single Cavity)")

    Dim LRow As Long
    LRow = ws2.Range("A" & rows.count).End(xlUp).row

    Dim r As Long

    Dim ChkBx As CheckBox
    For Each ChkBx In ws1.CheckBoxes
        If ChkBx.value = 1 Then

            LRow = LRow + 1
            r = ChkBx.TopLeftCell.row

            ws2.Range("A" & LRow + 1 & ":I" & LRow + 1).value = _
            ws1.Range("A" & r & ":I" & r + 1).value

        End If
    Next

End Sub
0 голосов
/ 30 октября 2018

В правой части вашего уравнения ваш Range() объект не квалифицирован надлежащим образом (с рабочим листом). Итак, я использовал подделку wsX в этом примере.

Кроме того, я использовал конечный столбец «D» - но вы можете изменить его на любой, какой вам нужен.

LRow = LRow + 1
r = ChkBx.TopLeftCell.Row

ws2.Range(ws2.Cells(LRow, "A"), ws2.Cells(LRow, "D")) = wsX.Range( _
            wsX.Cells(r, "A"), wsX.Cells(r, "D"))

или

ws2.Range("A" & LRow & ":D" & LRow) = wsX.Range("A" & r & ":D" & r)

Из комментария: Шаблоны ВСЕГДА начинаются с импортированных данных в «A19». Когда я запускаю этот макрос, чтобы скопировать проверенные данные на следующий рабочий лист, он начинается с ячейки «A18». Я понятия не имею, почему. Как указать, что проверенные данные должны копироваться, начиная с «A19» на следующем листе?

Если он всегда отключен на единицу, вы можете просто добавить 1. Я не уверен, как устроен ваш макет, поэтому вам придется добавить его либо к LRow, либо к r. Так что либо

ws2.Range("A" & LRow + 1 & ":D" & LRow + 1) = ...

или

... = wsX.Range("A" & r + 1 & ":D" & r + 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...