在Access中使用为Excel编写的VBA代码自动填写pdf表单
我目前有一个用excel编写的宏,这样,只要点击一个按钮,高亮显示的行就会自动填充所需的excel表单字段。我们现在需要将数据库转移到Microsoft Access中,以帮助提高可读性。但是,我们仍然需要能够从数据库中快速填充表单 如何调整下面的代码,使其在Access中工作?在Access中使用为Excel编写的VBA代码自动填写pdf表单,vba,excel,ms-access,pdf-generation,Vba,Excel,Ms Access,Pdf Generation,我目前有一个用excel编写的宏,这样,只要点击一个按钮,高亮显示的行就会自动填充所需的excel表单字段。我们现在需要将数据库转移到Microsoft Access中,以帮助提高可读性。但是,我们仍然需要能够从数据库中快速填充表单 如何调整下面的代码,使其在Access中工作? (以下只是一个例子) Public Sub-Billing\u Information() 将sFileHeader设置为字符串 将sFileFooter设置为字符串 Dim PDF_文件作为字符串 将sFileFie
(以下只是一个例子)
Public Sub-Billing\u Information()
将sFileHeader设置为字符串
将sFileFooter设置为字符串
Dim PDF_文件作为字符串
将sFileFields设置为字符串
将sFileName设置为字符串
Dim sTmp作为字符串
暗淡的lngFileNum与长
Dim vClient作为变体
PDF\u FILE=“BI.PDF”
'为FDF文件的内容生成字符串,然后将文件写入工作簿文件夹。
关于错误转到错误处理程序
sFileHeader=“%FDF-1.2”&vbCrLf&_
“%aãÓ”&vbCrLf&_
“10 obj”&vbCrLf&_
“endobj”&vbCrLf&_
“2 0 obj[”和vbCrLf
sFileFooter=“]”和vbCrLf&_
“endobj”&vbCrLf&_
“拖车”&vbCrLf&_
“”&vbCrLf&_
“%%EO”
sFileFields=“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf&_
“”&vbCrLf
'范围(“A2”)。选择
vClient=范围(Selection.Row&“:”&Selection.Row)
将计数设置为整数
计数=1
sFileFields=Replace(sFileFields,“--Name--”,vClient(1,count))
计数=计数+1
sFileFields=Replace(sFileFields,“----地址---”,vClient(1,计数))
计数=计数+1
sFileFields=Replace(sFileFields,“--City--”,vClient(1,计数))
计数=计数+1
sFileFields=Replace(sFileFields,“---邮政编码---”,vClient(1,计数))
计数=计数+1
sFileFields=Replace(sFileFields,“--Unit--”,vClient(1,count))
计数=计数+1
sFileFields=Replace(sFileFields,“--Email--”,vClient(1,计数))
计数=计数+1
sFileFields=Replace(sFileFields,“--Phone#--”,vClient(1,计数))
计数=计数+1
sFileFields=Replace(sFileFields,“--Rate--”,vClient(1,count))
计数=计数+1
sFileFields=Replace(sFileFields,“--Claim--”,vClient(1,count))
sTmp=sFileHeader&sFileFields&sFileFooter
'将FDF文件写入磁盘
sFileName=“BillingMultipule”
sFileName=active工作簿.Path&“\”&sFileName&“.fdf”
lngFileNum=FreeFile
打开sFileName以作为lngFileNum输出
打印#lngFileNum,sTmp
关闭#lngFileNum
多芬特
'以PDF格式打开FDF文件
ShellExecute vbNull,“打开”,sFileName,vbNull,vbNull,SW_NORMAL
出口接头
错误处理程序:
MsgBox“MakeFDF Error:”+Str(Err.Number)+“+Err.Description+”+Err.Source
端接头
谢谢您的帮助。您最好使用Access中的表单和报表,以及内置的“导出为pdf”功能 您可以使用表单选择数据,使用报表设计pdf的布局
当您第一次“手动”导出时,它将提供保存导出步骤的功能。单击“是”,然后在代码或宏中使用此“保存的导出”,在单击按钮时生成所需的pdf输出文件。此处有许多不同的运动部件。您提到了数据库,但还没有进入Access。您提到表单,但没有提到Excel用户表单。您提到PDF表单,但使用FDF标记,而不是用于连接Adobe对象。请使用适当的术语清楚地解释工作流。我是否能够使其看起来像我以前的pdf表单?是的,您可能会找到方法使其更好/更容易。如何使其仅显示一条记录(即表中的一行)?在属性页>格式>默认视图上。“单一表单”将显示一条记录,“连续表单”将显示所有记录。您需要处于“设计”视图中,才能更改此设置。
Public Sub Billing_Information()
Dim sFileHeader As String
Dim sFileFooter As String
Dim PDF_FILE As String
Dim sFileFields As String
Dim sFileName As String
Dim sTmp As String
Dim lngFileNum As Long
Dim vClient As Variant
PDF_FILE = "BI.pdf"
' Builds string for contents of FDF file and then writes file to workbook folder.
On Error GoTo ErrorHandler
sFileHeader = "%FDF-1.2" & vbCrLf & _
"%âãÏÓ" & vbCrLf & _
"1 0 obj<</FDF<</F(" & PDF_FILE & ")/Fields 2 0 R>>>>" & vbCrLf & _
"endobj" & vbCrLf & _
"2 0 obj[" & vbCrLf
sFileFooter = "]" & vbCrLf & _
"endobj" & vbCrLf & _
"trailer" & vbCrLf & _
"<</Root 1 0 R>>" & vbCrLf & _
"%%EO"
sFileFields = "<</T(Name)/V(---Name---)>>" & vbCrLf & _
"<</T(Address)/V(---Address---)>>" & vbCrLf & _
"<</T(City)/V(---City---)>>" & vbCrLf & _
"<</T(Postal Code)/V(---Postal Code---)>>" & vbCrLf & _
"<</T(Unit)/V(---Unit---)>>" & vbCrLf & _
"<</T(Email)/V(---Email---)>>" & vbCrLf & _
"<</T(Phone #)/V(---Phone #---)>>" & vbCrLf & _
"<</T(Claim)/V(---Claim---)>>" & vbCrLf & _
"<</T(Rate)/V(---Rate---)>>" & vbCrLf
'Range("A2").Select
vClient = Range(Selection.Row & ":" & Selection.Row)
Dim count As Integer
count = 1
sFileFields = Replace(sFileFields, "---Name---", vClient(1, count))
count = count + 1
sFileFields = Replace(sFileFields, "---Address---", vClient(1, count))
count = count + 1
sFileFields = Replace(sFileFields, "---City---", vClient(1, count))
count = count + 1
sFileFields = Replace(sFileFields, "---Postal Code---", vClient(1, count))
count = count + 1
sFileFields = Replace(sFileFields, "---Unit---", vClient(1, count))
count = count + 1
sFileFields = Replace(sFileFields, "---Email---", vClient(1, count))
count = count + 1
sFileFields = Replace(sFileFields, "---Phone #---", vClient(1, count))
count = count + 1
sFileFields = Replace(sFileFields, "---Rate---", vClient(1, count))
count = count + 1
sFileFields = Replace(sFileFields, "---Claim---", vClient(1, count))
sTmp = sFileHeader & sFileFields & sFileFooter
' Write FDF file to disk
sFileName = "BillingMultipule"
sFileName = ActiveWorkbook.Path & "\" & sFileName & ".fdf"
lngFileNum = FreeFile
Open sFileName For Output As lngFileNum
Print #lngFileNum, sTmp
Close #lngFileNum
DoEvents
' Open FDF file as PDF
ShellExecute vbNull, "open", sFileName, vbNull, vbNull, SW_NORMAL
Exit Sub
ErrorHandler:
MsgBox "MakeFDF Error: " + Str(Err.Number) + " " + Err.Description + " " + Err.Source
End Sub