アクセスレポートをPDF形式にエクスポートする際に問題があります。基本的には、フォームをユーザーインターフェイスとして使用する古い(2001年に建てられた)Accessデータベースに取り組んでいます。現在、「ジョブ」フォームから「請求書」フォームにジョブを送信できます。すべてのジョブが完了したら、「Invoice All」をクリックして日付と部数を指定し、アクセスレポートをテンプレートとして印刷します。アクセスレポートからPDFファイルを生成する方法は?
私はPDFで保存機能を追加することになっていましたが、Webデザイナーとして、AccessとVBの知識は非常に限られていましたが、(非常に) NetとC#(私がこの仕事を与えられたのは、別の時間の話です)
私は、アクセスフォームに新しいPDFボタンを作成して、請求書を印刷することでこれにアプローチしました。私の考えは、単に印刷と更新のコードをPDFファイルに出力するために複製することができるということです。私はこの仕事を得ることができますが、どのようにしたいのですか。
印刷機能のためのコードは以下の通りです:上記で概説した私の当初の計画では
Private Sub cmdOpenGroupInvoice_Click()
Dim db As DAO.Database
Dim rsGetCustomerInvoice As DAO.Recordset
Dim rsInvoice As DAO.Recordset
Dim rsInvoiceAll As DAO.Recordset
Dim lngCusID As Long
Dim lngJobNo As Long
Dim iCountInvoice
Dim lngInvoiceNo As Long
Dim iNumberCopies As Integer
Dim sSQLGetInv As String
Dim sSQLInv As String
Dim datInvoiceDate As Date
sSQLGetInv = "SELECT tblJobs.JobNo,tblJobs.NetDespatchRef, tblLoads.Sales, tblLoads.PODName, tblLoads.TotalSales, tblLoads.Cost, tblLoads.Profit, tblJobs.SendToInvoice, tblJobs.Invoiced, tblJobs.MarkForHistory, tblJobs.CustomerID" & vbCrLf _
& "FROM tblJobs INNER JOIN tblLoads ON tblJobs.JobNo = tblLoads.JobNo" & vbCrLf _
& "WHERE (((tblJobs.SendToInvoice)=Yes) AND ((tblJobs.Invoiced)=No) AND ((tblJobs.MarkForHistory)=No));"
Set db = CurrentDb
Set rsGetCustomerInvoice = db.OpenRecordset(sSQLGetInv, dbOpenDynaset)
If rsGetCustomerInvoice.EOF Then
Beep
If MsgBox("There are no jobs to invoice", _
vbCritical + vbOKOnly, _
"No Jobs To Invoice") = vbOK Then
Exit Sub
End If
End If
rsGetCustomerInvoice.MoveLast
Debug.Print rsGetCustomerInvoice.RecordCount
rsGetCustomerInvoice.MoveFirst
Do Until rsGetCustomerInvoice.EOF = True
Set rsGetCustomerInvoice = db.OpenRecordset(sSQLGetInv, dbOpenDynaset)
If rsGetCustomerInvoice.EOF Then
rsGetCustomerInvoice.Close
db.Close
Set rsGetCustomerInvoice = Nothing
Set db = Nothing
DoCmd.Close acForm, "frmInvoiceDate"
Exit Sub
End If
Debug.Print rsGetCustomerInvoice.RecordCount
datInvoiceDate = CVDate(txtInvoiceDate)
lngInvoiceNo = GiveMeAnInvoiceNo()
lngCusID = rsGetCustomerInvoice.Fields!CustomerID
Call AddNewInvoice(lngInvoiceNo, datInvoiceDate, True)
Debug.Print iCountInvoice
lngJobNo = rsGetCustomerInvoice![JobNo]
Call SendThisJobToSageAll(lngCusID, datInvoiceDate, lngInvoiceNo)
Call InvoiceAll(lngCusID, lngInvoiceNo)
Dim strPODName As String
If Not IsNull(rsGetCustomerInvoice!NetDespatchRef) Then
If IsNull(rsGetCustomerInvoice![PODName]) Then
strPODName = " "
Else
strPODName = rsGetCustomerInvoice![PODName]
End If
'Call NetDesTrackingJobCompleate(rsGetCustomerInvoice![NetDespatchRef], rsGetCustomerInvoice![JobNo], strPODName)
End If
iCountInvoice = iCountInvoice - 1
'Debug.Print I
iNumberCopies = txtNumberOfCopies
Do Until iNumberCopies = 0
DoCmd.OpenReport "rptInvoice2", acViewNormal, , "[Invoice No]= " & lngInvoiceNo
iNumberCopies = iNumberCopies - 1
Loop
Form_frmInvoicing.Requery
rsGetCustomerInvoice.MoveNext
Loop
DoCmd.Close acForm, "frmInvoiceDate"
rsGetCustomerInvoice.Close
db.Close
Set rsGetCustomerInvoice = Nothing
Set db = Nothing
End Sub
、私はPDFに出力するセクションの下に、更新:
Do Until iNumberCopies = 0
DoCmd.OpenReport "rptInvoice2", acViewNormal, , "[Invoice No]= " & lngInvoiceNo
DoCmd.OutputTo acOutputReport, "", acFormatPDF, MyPath & MyFilename, True
iNumberCopies = iNumberCopies - 1
Loop
は今、この作品とそれはありませんPDFファイルを出力しようとしました。問題は、レポートを実行し、請求書に記されたジョブをレポートに適用するのではなく、システム内のすべてのジョブに対して請求書を作成することです。
私は間違った場所にコードを入れてしまったのでこれが起こっていることを期待していますが、それよりも複雑だと感じています。
これは、ここに掲載するのはちょっと長いですが、この時点では本当に助けていただきありがとうございます。私はこれも可能な限り短くしています。明確でない詳細があれば、私は手伝っていきます。
に役立ちます。私はそれを使用して2つのクライアントを持って、アップグレードのナグを除いて、それは本当にうまくいった。 –
私はかつてPDFCreatorとVBAのオートメーションを使用していましたが、異なるオペレーティングシステム/アクセスバージョンの組み合わせでいくつかの問題に遭遇しました。最後に、プリンタとして選択する必要があるより簡単なCutePDFが選択されました。それ以来、より安定版のPDFCreatorが利用可能になった可能性があります。 – Fionnuala
しかし、PDF出力用のプリンタドライバを使用する場合、PDFのファイル名を自動生成および割り当てすることはできません。ユーザは手動で入力する必要があります。私は、WinXPとWin7の両方でPDFCreatorを動作させても問題はありませんでした。私は最初に2009年6月にWinXPで、そして次に昨秋にWin7で使用しました。両方とも正常です。どのような問題がありましたか? –