7

MS Access (2010) アプリケーションを構築しており、このアプリケーションからバーコード ラベルを印刷します。標準のプリンター設定を使用して印刷されるレポートやフォームは他にもさまざまありますが、バーコードでは特定のプリンターに印刷する必要があり、特別なページ サイズを使用するように設定する必要があります。

私の検索では、8.5" x 11" の標準 US Letter 用の acPRPSLetter や A4 用紙サイズ用の acPRPSA4 を含む、かなりの数の「標準」デフォルト オプションを持つプリンター オブジェクトのプロパティ"Papersize" を見つけました。私の用途では、どのプリセット サイズも機能しません。ユーザー カスタム サイズ acPRPSUser を表す 1 つのプリセットがありますが、カスタム サイズをプログラムで設定する方法が見つかりませんでした。

プリンターの「.height」および「.width」プロパティがどのように存在するかについて読みましたが、Access 2010 で使用される VB には存在しないようです (VB6 に基づいていると思います)。

Access 2010 で VB コードを使用してカスタム用紙サイズを設定するのを手伝ってくれる人はいますか?

4

3 に答える 3

2

私も同じ問題を抱えていました。方法を使用して解決しました:プログラムでプリンター機能を取得します

Procedure Printoutでモジュールを作成しました。Function Printerselection を使用すると、プリンター名の特定の部分を使用してプリンターを呼び出すことができます。関数 PaperSelection は、用紙名の特定の部分を使用して用紙を指定するために使用されました。

最初に、DeviceCapabilities 関数 API 呼び出しの宣言を使用する必要がありました

    ' Declaration for the DeviceCapabilities function API call.
Private Declare Function DeviceCapabilities Lib "winspool.drv" _
    Alias "DeviceCapabilitiesA" (ByVal lpsDeviceName As String, _
    ByVal lpPort As String, ByVal iIndex As Long, lpOutput As Any, _
    ByVal lpDevMode As Long) As Long

' DeviceCapabilities function constants.
Private Const DC_PAPERNAMES = 16
Private Const DC_PAPERS = 2
Private Const DC_BINNAMES = 12
Private Const DC_BINS = 6
Private Const DEFAULT_VALUES = 0

Private Type str_DEVMODE
    RGB As String * 94
End Type

Private Type type_DEVMODE
    strDeviceName As String * 32
    intSpecVersion As Integer
    intDriverVersion As Integer
    intSize As Integer
    intDriverExtra As Integer
    lngFields As Long
    intOrientation As Integer
    intPaperSize As Integer
    intPaperLength As Integer
    intPaperWidth As Integer
    intScale As Integer
    intCopies As Integer
    intDefaultSource As Integer
    intPrintQuality As Integer
    intColor As Integer
    intDuplex As Integer
    intResolution As Integer
    intTTOption As Integer
    intCollate As Integer
    strFormName As String * 32
    lngPad As Long
    lngBits As Long
    lngPW As Long
    lngPH As Long
    lngDFI As Long
    lngDFr As Long
End Type

Private Cnt As Integer, PrinterSelect As Integer

Public Sub PrintOut(ByVal rptName As String, Printer As String, Paper As String, BinName As String, Optional Landscape As Boolean, Optional WhereCond)
Dim rpt As Report
DoCmd.OpenReport rptName, acViewPreview, , WhereCond
Set rpt = Reports(rptName)
PrinterSelect = PrinterSelection(Printer)
rpt.Printer = Application.Printers(PrinterSelect)
rpt.Printer.PaperSize = PaperSelection(Paper, PrinterSelect)
If Landscape Then
    rpt.Printer.Orientation = acPRORLandscape
Else
    rpt.Printer.Orientation = acPRORPortrait
End If
rpt.Printer.PaperBin = BinSelection(BinName, PrinterSelect)
End Sub

Public Function PrinterSelection(Printer As String) As Integer
For Cnt = 0 To Application.Printers.Count - 1
    If InStr(1, Application.Printers(Cnt).DeviceName, Printer) > 0 Then
        PrinterSelection = Cnt
    End If
Next Cnt
End Function

Public Function PaperSelection(Paper As String, Printer As Integer) As Integer

    Dim lngPaperCount As Long
    Dim lngCounter As Long
    Dim hPrinter As Long
    Dim strDeviceName As String
    Dim strDevicePort As String
    Dim strPaperNamesList As String
    Dim strPaperName As String
    Dim intLength As Integer
    Dim strMsg As String
    Dim aintNumPaper() As Integer

    On Error GoTo GetPaperList_Err

    ' Get the name and port of the selected printer.
    strDeviceName = Application.Printers(Printer).DeviceName
    strDevicePort = Application.Printers(Printer).Port

    ' Get the count of paper names supported by the printer.
    lngPaperCount = DeviceCapabilities(lpsDeviceName:=strDeviceName, _
        lpPort:=strDevicePort, _
        iIndex:=DC_PAPERNAMES, _
        lpOutput:=ByVal vbNullString, _
        lpDevMode:=DEFAULT_VALUES)

    ' Re-dimension the array to the count of paper names.
    ReDim aintNumPaper(1 To lngPaperCount)

    ' Pad the variable to accept 64 bytes for each paper name.
    strPaperNamesList = String(64 * lngPaperCount, 0)

    ' Get the string buffer of all paper names supported by the printer.
    lngPaperCount = DeviceCapabilities(lpsDeviceName:=strDeviceName, _
        lpPort:=strDevicePort, _
        iIndex:=DC_PAPERNAMES, _
        lpOutput:=ByVal strPaperNamesList, _
        lpDevMode:=DEFAULT_VALUES)

    ' Get the array of all paper numbers supported by the printer.
    lngPaperCount = DeviceCapabilities(lpsDeviceName:=strDeviceName, _
        lpPort:=strDevicePort, _
        iIndex:=DC_PAPERS, _
        lpOutput:=aintNumPaper(1), _
        lpDevMode:=DEFAULT_VALUES)

    ' List the available paper names.
    For lngCounter = 1 To lngPaperCount

        ' Parse a paper name from the string buffer.
        strPaperName = Mid(String:=strPaperNamesList, Start:=64 * (lngCounter - 1) + 1, Length:=64)
        intLength = VBA.InStr(Start:=1, String1:=strPaperName, String2:=Chr(0)) - 1
        strPaperName = Left(String:=strPaperName, Length:=intLength)
        If InStr(1, strPaperName, Paper) > 0 Then
        ' Select the a paper number corresponding to the paper name.
            PaperSelection = aintNumPaper(lngCounter)
        End If
    Next lngCounter


GetPaperList_End:
    Exit Function

GetPaperList_Err:
    MsgBox Prompt:=err.Description, Buttons:=vbCritical & vbOKOnly, _
        Title:="Error Number " & err.Number & " Occurred"
    Resume GetPaperList_End

End Function

Public Function BinSelection(BIN As String, Printer As Integer) As Integer
' Uses the DeviceCapabilities API function to choose the desired paper bin supported by the    chosen printer

    Dim lngBinCount As Long
    Dim lngCounter As Long
    Dim hPrinter As Long
    Dim strDeviceName As String
    Dim strDevicePort As String
    Dim strBinNamesList As String
    Dim strBinName As String
    Dim intLength As Integer
    Dim strMsg As String
    Dim aintNumBin() As Integer

    On Error GoTo GetBinList_Err

    ' Get name and port of the default printer.
    strDeviceName = Application.Printers(Printer).DeviceName
    strDevicePort = Application.Printers(Printer).Port

    ' Get count of paper bin names supported by the printer.
    lngBinCount = DeviceCapabilities(lpsDeviceName:=strDeviceName, _
        lpPort:=strDevicePort, _
        iIndex:=DC_BINNAMES, _
        lpOutput:=ByVal vbNullString, _
        lpDevMode:=DEFAULT_VALUES)

    ' Re-dimension the array to count of paper bins.
    ReDim aintNumBin(1 To lngBinCount)

    ' Pad variable to accept 24 bytes for each bin name.
    strBinNamesList = String(Number:=24 * lngBinCount, Character:=0)

    ' Get string buffer of paper bin names supported by the printer.
    lngBinCount = DeviceCapabilities(lpsDeviceName:=strDeviceName, _
        lpPort:=strDevicePort, _
        iIndex:=DC_BINNAMES, _
        lpOutput:=ByVal strBinNamesList, _
        lpDevMode:=DEFAULT_VALUES)

    ' Get array of paper bin numbers supported by the printer.
    lngBinCount = DeviceCapabilities(lpsDeviceName:=strDeviceName, _
        lpPort:=strDevicePort, _
        iIndex:=DC_BINS, _
        lpOutput:=aintNumBin(1), _
        lpDevMode:=0)

    ' List available paper bin names.
    strMsg = "Paper bins available for " & strDeviceName & vbCrLf
    For lngCounter = 1 To lngBinCount

        ' Parse a paper bin name from string buffer.
        strBinName = Mid(String:=strBinNamesList, _
            Start:=24 * (lngCounter - 1) + 1, _
            Length:=24)
        intLength = VBA.InStr(Start:=1, _
            String1:=strBinName, String2:=Chr(0)) - 1
        strBinName = Left(String:=strBinName, _
                Length:=intLength)

        If InStr(1, strBinName, BIN) > 0 Then
        ' Select the bin number corresponding to the bin name.
            BinSelection = aintNumBin(lngCounter)
        End If
     Next lngCounter


GetBinList_End:
    Exit Function
GetBinList_Err:
    MsgBox Prompt:=err.Description, Buttons:=vbCritical & vbOKOnly, _
        Title:="Error Number " & err.Number & " Occurred"
    Resume GetBinList_End
End Function
于 2014-07-30T22:13:29.590 に答える
2

VBA は必要ありません。メニューからページ設定コマンドを使用して、余白、向き、用紙、プリンター、列のすべてのページ設定を設定できます。レポート デザインのツール > ページ設定 > ページ設定 > ページ > 用紙 > サイズまたは> ページ > ReportName のプリンター> 特定のプリンターを使用する > プリンター > プロパティ。これらの設定は、個々のレポートごとに保存されます。

スクリーンショット

于 2012-07-04T21:54:22.770 に答える
0

注意が必要なようです.DefaultSize- もしそうなら、あなたの設定は無視されItemSizeHeightますItemSizeWidth

MSDNにはさらに多くの情報といくつかの例があります

于 2012-07-05T17:24:25.127 に答える