打印宏疑难解答

时间:2019-01-30 16:34:23

标签: excel vba excel-formula

因此,在一段时间前的Stack Overflow社区的帮助下,我为工作表创建了一个打印宏,该宏可以读取工作表并仅打印其中包含信息的页面数。它会读取行的某些部分,如果未输入数据,将打印正确的页数。这使用户只需输入数据并点击打印按钮即可打印正确的页数(而不是选择File..Print ... etc)

这是使用的代码:

Sub LastRowInOneColumn()

    Dim MySheet As Worksheet
    Set MySheet = Worksheets("SIF Sheet")

    With MySheet

        Dim xLastRow As Long
        xLastRow = .Cells(.Rows.Count, "B").End(xlUp).Row

        Select Case True

            Case xLastRow > 21 And xLastRow < 46

                'Application.Dialogs(xlDialogPrinterSetup).Show
                Worksheets("SIF Sheet").PrintOut From:=1, To:=1, Preview:=True

            Case xLastRow > 46 And xLastRow < 97

                'Application.Dialogs(xlDialogPrinterSetup).Show
                Worksheets("SIF Sheet").PrintOut From:=1, To:=2, Preview:=True

            Case xLastRow > 98 And xLastRow < 149

                'Application.Dialogs(xlDialogPrinterSetup).Show
                Worksheets("SIF Sheet").PrintOut From:=1, To:=3, Preview:=True

            Case xLastRow > 150 And xLastRow < 201

                'Application.Dialogs(xlDialogPrinterSetup).Show
                Worksheets("SIF Sheet").PrintOut From:=1, To:=4, Preview:=True

            Case xLastRow > 202 And xLastRow < 253

                'Application.Dialogs(xlDialogPrinterSetup).Show
                Worksheets("SIF Sheet").PrintOut From:=1, To:=5, Preview:=True

            Case xLastRow > 254 And xLastRow < 305

                'Application.Dialogs(xlDialogPrinterSetup).Show
                Worksheets("SIF Sheet").PrintOut From:=1, To:=6, Preview:=True

            Case xLastRow > 306 And xLastRow < 357

                'Application.Dialogs(xlDialogPrinterSetup).Show
                Worksheets("SIF Sheet").PrintOut From:=1, To:=7, Preview:=True

            Case xLastRow > 358 And xLastRow < 409

                'Application.Dialogs(xlDialogPrinterSetup).Show
                Worksheets("SIF Sheet").PrintOut From:=1, To:=8, Preview:=True

            Case xLastRow > 410 And xLastRow < 461

                'Application.Dialogs(xlDialogPrinterSetup).Show
                Worksheets("SIF Sheet").PrintOut From:=1, To:=9, Preview:=True

            Case xLastRow > 462 And xLastRow < 513

                'Application.Dialogs(xlDialogPrinterSetup).Show
                Worksheets("SIF Sheet").PrintOut From:=1, To:=10, Preview:=True

        End Select

    End With

End Sub

这很好,因为输入的数据是按节(每节1个帐户)输入的,但是我们最近不得不重新设计它,因此不再按节输入。现在的样子
Example Picture

我需要帮助的是一个脚本,该脚本将无限制地逐行检查数据,然后在没有数据(只有那些有数据的页面)的第一行显示出来。

希望这是有道理的。

我也找到了这段代码,所以现在我对正在使用的代码感到非常困惑。

Sub LastRowInOneColumn()            
    If Range("C19") = "Enter any special posting instruction here." Then
        Range("C19:I26").ClearContents
    End If

    Dim MySheet As Worksheet
    Set MySheet = Worksheets("SIF Sheet")

    With MySheet
        Dim xLastRow As Long
        xLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

        Select Case True
            Case xLastRow < 500
                'Application.Dialogs(xlDialogPrinterSetup).Show
                Worksheets("SIF Sheet").PrintOut
        End Select
    End With    
End Sub

我最需要帮助的部分是: 他们遇到的问题是,说他们在1-200行中输入信息,然后在175-200行中删除信息,它仍然通过200而不是通过175打印。

1 个答案:

答案 0 :(得分:2)

  

我需要帮助的是一个脚本,它将逐行检查数据,   无限,然后在没有数据的第一行打印

您可以使用与您发现的宏所使用的方法类似的方法来获取第一行,其中没有数据,如下所示:

With MySheet

    Dim xFirstEmptyRow As Long
    xFirstEmptyRow = .Cells(1, 1).End(xlDown).Row

End With

在此处链接到.End方法: https://docs.microsoft.com/en-us/office/vba/api/excel.range.end