Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Access中使用为Excel编写的VBA代码自动填写pdf表单_Vba_Excel_Ms Access_Pdf Generation - Fatal编程技术网

在Access中使用为Excel编写的VBA代码自动填写pdf表单

在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

我目前有一个用excel编写的宏,这样,只要点击一个按钮,高亮显示的行就会自动填充所需的excel表单字段。我们现在需要将数据库转移到Microsoft Access中,以帮助提高可读性。但是,我们仍然需要能够从数据库中快速填充表单

如何调整下面的代码,使其在Access中工作?
(以下只是一个例子)

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