我在这里的第一篇文章。我已经学习了一个多月的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
。在此先感谢您的帮助。
答案 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