You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改VBA循环打印PDF代码,实现周六跳过PNB银行记录打印?

循环导出PDF的VBA代码修改方案

以下是满足需求的修改后代码,核心逻辑已针对周六的特殊规则进行调整:

Sub PrintPDF()
    Dim WSDATA As Worksheet
    Dim WSFormat As Worksheet
    Dim LastRow As Long
    Dim Batch As String
    Dim fname As Variant
    Dim exportRange As Range
    Dim i As Long
    Dim Code As String
    Dim Bank As String
    Dim SDate As String
    Dim isSaturday As Boolean
    Dim hasNonPNB As Boolean
    
    Set WSDATA = ThisWorkbook.Sheets("Data")
    Set WSFormat = ThisWorkbook.Sheets("DV Format")
    Set exportRange = WSFormat.Range("$A$1:$AD$50")
    
    Path = WSDATA.Range("C3").Value
    Batch = WSDATA.Range("C2").Value
    
    LastRow = WSDATA.Range("B" & Rows.Count).End(xlUp).Row
    '判断当前是否为周六(VBA中Weekday默认周日为1,周六对应6)
    isSaturday = (Weekday(Date) = 6)
    
    '提前检查是否存在非PNB的有效记录(B列非空)
    hasNonPNB = False
    If isSaturday Then
        For i = 5 To LastRow
            If WSDATA.Range("B" & i) <> "" And WSDATA.Range("G" & i) <> "PNB" Then
                hasNonPNB = True
                Exit For
            End If
        Next i
        '如果周六且所有有效记录银行都是PNB,直接退出
        If Not hasNonPNB Then
            Exit Sub
        End If
    End If
    
    For i = 5 To LastRow
        Code = WSDATA.Range("B" & i)
        
        If Code <> "" Then
            Bank = WSDATA.Range("G" & i)
            
            '周六且当前记录银行为PNB,跳过导出
            If isSaturday And Bank = "PNB" Then
                GoTo NextRecord
            End If
            
            fname = Code & " " & Bank
        
            SDate = WSDATA.Range("D" & i).Value
            If SDate = "" Then
                SDate = UCase(Format((Date - 1), "MMMMDD.YYYY"))
            Else
                SDate = Replace(Replace(UCase(SDate), " ", ""), ",", ".")
            End If
            
            '填充格式表数据
            WSFormat.Range("W16").Value = WSDATA.Range("C" & i).Value
            WSFormat.Range("B16").Value = WSDATA.Range("E" & i).Value
            WSFormat.Range("B12").Value = WSDATA.Range("F" & i).Value
            WSFormat.Range("M13").Value = Bank
            WSFormat.Range("N12").Value = WSDATA.Range("H" & i).Value
            WSFormat.Range("R13").Value = WSDATA.Range("I" & i).Value
            WSFormat.Range("Z13").Value = WSDATA.Range("J" & i).Value
            WSFormat.Range("E8").Value = WSDATA.Range("K" & i).Value
            WSFormat.Range("E9").Value = WSDATA.Range("L" & i).Value
            WSFormat.Range("W8").Value = WSDATA.Range("C1").Value
            
            '导出PDF
            exportRange.ExportAsFixedFormat Type:=xlTypePDF, IgnorePrintAreas:=False, _
                Filename:=Path & fname & " " & SDate & "-" & Batch, OpenAfterPublish:=False
        End If
NextRecord:
    Next i
    
End Sub

关键逻辑说明

  • 周六判断:用Weekday(Date) = 6识别当前日期是否为周六(VBA默认周日为一周第1天)
  • 全PNB记录检查:在循环导出前先遍历所有有效记录,若周六且所有非空编码的记录银行都是PNB,直接终止程序
  • 单条记录跳过:周六时,遇到B列有编码且G列银行为PNB的记录,通过GoTo跳过后续导出流程
  • 变量声明优化:补充了所有未声明的变量,避免隐式类型转换问题

内容的提问来源于stack exchange,提问作者Domingo Ballesil Jr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:47:06