【问题标题】:Excel VBA Search and Print FunctionExcel VBA 搜索和打印功能
【发布时间】:2020-02-20 21:20:58
【问题描述】:

我正在尝试编写一个搜索按钮来查看所有数据,返回所有具有公共数字的行和所有 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

【问题讨论】:

  • 你可以在这里使用Range.AutoFilter
  • 谢谢。总的来说,我无法让搜索按钮发挥作用。
  • @BigBen 的观点是,您正在重新发明一个完美圆的轮子。 Serioulsy,考虑使用Range.AutoFilter 来完成你想要的
  • 谢谢你们,我需要一些帮助来解释为什么搜索和填充功能不起作用。请。
  • “给我错误” - 什么错误,在哪里?

标签: excel vba button search printing


【解决方案1】:

很难看出 1 和 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

【讨论】:

  • 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
相关资源
最近更新 更多