每个 - 通过床单循环

时间:2014-01-17 21:10:34

标签: excel vba

我在这里的第一篇文章。我已经学习了一个多月的VBA,到目前为止,我已经设法通过浏览其他帖子来做我想做的事。

我的问题是我编写的代码仅适用于第一个工作表,但我希望它适用于工作簿中的所有工作表。我的代码如下:

Sub invoicepayable()

    Dim Ws As Worksheet
    For Each Ws In ActiveWorkbook.Worksheets

        If ActiveSheet.Range("J34").Value > 0 Then

            ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\me\Desktop\" _
            & Range("C8").Value & Format(DateSerial(Year(Date), Month(Date) - 1, 1), "MMM - YYYY"), _
            Quality:= xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
            OpenAfterPublish:=False

        End If
    Next Ws

End Sub

基本上我希望这只出口应收账款发票(J34>0意味着他们欠我们钱)。但是,当我运行此宏时,它会导出工作簿中的第一个工作表,但不会导致后续工作簿,即使所有工作表中都存在J34>0。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您应该在上面的评论中遵循Tim Williams的建议,并用Ws替换ActiveSheet。我还将ActiveWorkbook替换为ThisWorkbook - 这样更清晰,并确保您的代码与正确的Excel工作簿一起运行。请查看下面的新版本,并进行一些错误检查;

Public Sub invoicepayable()

    Dim Ws As Worksheet
    For Each Ws In ThisWorkbook.Worksheets

        If (Not IsEmpty(Ws.Range("J34").Value)) And (Not IsError(Ws.Range("J34").Value)) Then
            If (IsNumeric(Ws.Range("J34").Value)) And (Ws.Range("J34").Value > 0) Then

                Ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\me\Desktop\" _
                & Range("C8").Value & Format(DateSerial(Year(Date), Month(Date) - 1, 1), "MMM - YYYY"), _
                Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                OpenAfterPublish:=False

            End If
        End If

    Next Ws

End Sub