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

Access VBA技术问询:如何将PDF保存至自动生成的MkDir文件夹?

解决方法

你的问题核心是文件夹路径只处理了第一条记录,且PDF输出路径未关联到创建好的文件夹,按以下方式修改代码即可:

  1. 将文件夹生成逻辑移到循环内部:每条KJU250对应独立文件夹,原来的代码只创建了第一条记录的文件夹,后续循环无法处理新的记录。
  2. 修改PDF输出路径:把输出路径拼接成「创建好的文件夹路径 + PDF文件名」,让文件直接存入目标目录。

修改后的完整代码:

'20220630
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim qd As DAO.QueryDef
    Dim strFilter As String
    Dim filepath As String
    Dim strSQL As String
 
    'strFilter = "¿‹“ú >= #" & Format(Date,"yyyy/mm") & "/01# AND " & _
    '            "¿‹“ú < #" & Format(DateAdd("m",1,Date),"yyyy/mm") & "/01"
 
    Set db = CurrentDb
    Set rs = db.OpenRecordset("SELECT DISTINCT KJU250 FROM Q_¿‹ ", _
                              dbOpenForwardOnly, dbReadOnly)
     
    Set qd = db.QueryDefs("Q_¿‹")
    strSQL = Replace(qd.SQL, ";", "")
      
    Do Until rs.EOF
        ' 为当前记录生成专属文件夹路径
        filepath = "C:\Lƒf[ƒ^\" & Format(Date, "yyyymmdd") & "_" & rs!KJU250
        
        ' 文件夹不存在则创建
        If Dir(filepath, vbDirectory) = "" Then
            MkDir filepath
        End If

        ' 过滤当前KJU250的数据
        qd.SQL = strSQL & " WHERE KJU250=" & rs!KJU250
        
        ' 将PDF输出到目标文件夹内
        DoCmd.OutputTo acOutputReport, "R_¿‹‘", acFormatPDF, _
            filepath & "\" & Format(Date, "yyyymmdd") & "_" & rs!KJU250 & ".pdf"
      
        rs.MoveNext
    Loop
  
    qd.SQL = strSQL & ";"
    rs.Close
'20220630

关键修改点说明:

  • 把filepath赋值和文件夹创建逻辑移到循环内,确保每条记录都能生成对应的文件夹。
  • DoCmd.OutputTo的路径改为filepath & "\" & 文件名,直接指向创建好的文件夹,PDF会自动存入该目录。
  • 删除了重复的qd.SQL赋值语句(原代码中两次赋值,第二次覆盖第一次,保留有效过滤逻辑即可)。

内容的提问来源于stack exchange,提问作者Nahid From Japan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:54:22