Excel VBA Функция поиска и печати - PullRequest
0 голосов
/ 21 февраля 2020

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

Dim erow As Long
Dim ws As Worksheet
Dim Lastrow As Long
Dim count As Integer


With Worksheets("DataSheet")
Lastrow = .Cells(.Rows.count, 1).End(x1Up).Row

For x = 1 To Lastrow

If Sheets("DataSheet").Cells(x, 1) = SearchSheet.Range("B4") Then
SearchSheet.Range("A12") = Sheets("DataSheet").Cells(x, 1)
SearchSheet.Range("B12") = Sheets("DataSheet").Cells(x, 2)
SearchSheet.Range("C12") = Sheets("DataSheet").Cells(x, 3)
SearchSheet.Range("D12") = Sheets("DataSheet").Cells(x, 4)
SearchSheet.Range("E12") = Sheets("DataSheet").Cells(x, 5)
SearchSheet.Range("F12") = Sheets("DataSheet").Cells(x, 6)
SearchSheet.Range("G12") = Sheets("DataSheet").Cells(x, 7)
SearchSheet.Range("H12") = Sheets("DataSheet").Cells(x, 8)
SearchSheet.Range("I12") = Sheets("DataSheet").Cells(x, 9)
End If

Next x

End With

1 Ответ

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

Трудно увидеть разницу между одним и L, но x1Up должен быть xlUp. Все результаты записываются в одну и ту же строку 12, вам нужно использовать инкрементный счетчик.

Private Sub CommandButton1_Click()

    Const SEARCH_CELL = "B4"
    Const START_ROW = 12

    Dim wb As Workbook, wsSource As Worksheet, wsTarget As Worksheet
    Set wb = ThisWorkbook
    Set wsSource = wb.Sheets("DataSheet")
    Set wsTarget = wb.Sheets("SearchSheet")

    Dim iRow As Long, iLastRow As Long, iTargetRow As Long
    Dim sSearchTerm As String, res As Variant

    iTargetRow = START_ROW
    sSearchTerm = wsTarget.Range(SEARCH_CELL)
    ' clear results sheet
    wsTarget.Range("A" & START_ROW & ":I" & Rows.count).Cells.Clear

    'search
    With wsSource
        iLastRow = .Cells(.Rows.count, 1).End(xlUp).Row
        For iRow = 1 To iLastRow
            If .Cells(iRow, 1) = sSearchTerm Then
                .Range("A" & iRow).Resize(1, 9).Copy wsTarget.Range("A" & iTargetRow)
                iTargetRow = iTargetRow + 1
            End If
        Next
    End With

    ' results
    With wsTarget
        .PageSetup.PrintArea = .Range("A1").Resize(iTargetRow - 1, 9).Address

        res = MsgBox(iTargetRow - START_ROW & " Rows found, do you want to print results ?", vbYesNo, "Finished")
        If res = vbYes Then
            ' print
            .PrintOut Copies:=1
        End If
    End With

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