Access VBA技术问询:如何将PDF保存至自动生成的MkDir文件夹?
解决方法
你的问题核心是文件夹路径只处理了第一条记录,且PDF输出路径未关联到创建好的文件夹,按以下方式修改代码即可:
- 将文件夹生成逻辑移到循环内部:每条
KJU250对应独立文件夹,原来的代码只创建了第一条记录的文件夹,后续循环无法处理新的记录。 - 修改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
相关产品推荐
相关产品推荐

