【问题标题】:Use VBA in Excel to print rows on different worksheet在 Excel 中使用 VBA 在不同的工作表上打印行
【发布时间】:2015-03-22 22:04:12
【问题描述】:

我在一个工作簿中有三个单独的工作表,其中包含数千行信息,并且经常添加新信息。我希望能够使用宏和 VBA 创建单独的报告,以便在需要报告时打印到另一个工作表上。

例如,报告一将包括 2014 年所有已完成的工作。如果已完成?等于 YES 和 Year 等于 2014,在空白工作表上打印整行。但是,我需要使用 VBA,所以它会遍历三个工作表并将它们一起打印在一个单独的工作表中。我该怎么做?

澄清:基本上,如果这两个单元格等于 this 和 this,则在不同的工作表上打印该行。

【问题讨论】:

  • 请告诉我们您的代码现在在哪里,以及您遇到了什么问题。
  • 到目前为止你做了什么?你试过录制宏吗?
  • 没什么,我不知道该采取什么方法,也不知道该怎么做。
  • @BluGeni 嗨,您可以使用带有 2 个条件的自动过滤器,然后将过滤后的范围复制到新工作表中。对所有三张纸重复此操作,将过滤后的范围添加到 lastrow。

标签: excel vba


【解决方案1】:

练习这个。 在带有数据的工作表上插入一个按钮或其他类型的对象。

一旦点击,代码将删除除活动工作表之外的所有工作表。

然后它遍历 A 列并创建工作表。 然后它会遍历工作表并过滤您的数据表,将数据复制并粘贴到工作表中,然后移动到下一个工作表。

Sub getSht()
    Dim c As Range, sh As Worksheet
    Dim Rws As Long, Rng As Range, fRng As Range
    Dim ws As Worksheet
    Set ws = ActiveSheet
    Application.DisplayAlerts = 0
    Application.ScreenUpdating = 0
    For Each sh In Sheets
        If sh.Name <> ws.Name Then sh.Delete
    Next sh
    With ws
        Rws = .Cells(Rows.Count, "A").End(xlUp).Row
        Set Rng = .Range(.Cells(2, 1), .Cells(Rws, 1))
        For Each c In Rng.Cells
            If WorksheetExists(c.Value) Then
            Else: Sheets.Add.Name = c
            End If
        Next c
    End With
    For Each sh In Sheets
        If sh.Name <> ws.Name Then
            ws.Range("A:A").AutoFilter Field:=1, Criteria1:=sh.Name
            Set fRng = ws.Range(ws.Cells(1, "A"), ws.Cells(Rws, "D"))
            fRng.Copy Destination:=sh.Range("A1")
        End If
        ws.AutoFilterMode = 0
    Next sh
    ws.Activate
End Sub


Function WorksheetExists(WSName As String) As Boolean
    On Error Resume Next
    WorksheetExists = Worksheets(WSName).Name = WSName
    On Error GoTo 0
End Function

【讨论】:

  • 子名是Get Sheet BTW的缩写,
猜你喜欢
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
相关资源
最近更新 更多