Skip to main content

Membuat Fungsi Untuk Daftar Paper Tray/Bin (Tempat Kertas Printer)

Paper tray atau paper bin pada printer adalah tempat kertas masuk dan keluar dalam proses pencetakan di printer. Tempat kertas yang akan masuk dalam proses pencetakan dinamakan paper tray input, sedangkan tempat kertas yang keluar setelah proses pencetakan dinamakan paper tray output.
Printer Epson L110 Series menggunakan Rear Paper Feed sebagai paper bin-nya.

Pada bagian ini, kita hanya membahas paper tray input, yang selanjutnya disebut paper bin, karena pemrograman VBA hanya mengenal paper bin, bukan paper tray. Secara umum, printer hanya mempunyai satu paper bin yang bisa diatur sesuai dengan kemampuan printer yang bersangkutan. Namun, untuk klasifikasi yang lebih canggih, satu printer bisa terdiri dari 2 atau lebih paper bin, yang bisa digunakan untuk menaruh kertas dengan berbagai macam ukuran dan jenis. Misalnya, ada paper bin untuk menaruh kertas ukuran A4, Letter, Legal, dan lain sebagainya. Dengan demikian pengguna tidak perlu menyisipkan beberapa jenis kertas ke dalam satu paper bin.

Untuk menampilkan daftar paper bin, kita dapat membuat fungsi sendiri yang diberi nama  membuatDaftarPaperBin. Berikut ini adalah kode VBA untuk fungsi membuatDaftarPaperBin. Tambahkanlah fungsi di bawah ini dalam modul standar yang bernama mdlPrinter, karena kita akan membutuhkannya nanti.
Function membuatDaftarPaperBin(frmName As Form, cbbPaperSize As Access.ComboBox, strName As String)
' Uses the DeviceCapabilities API function to display a
' message box with the name of the default printer and a
' list of the paper bins it supports.

    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 Err_Msg

    ' Get name and port of the default printer.
    strDeviceName = Application.Printers(strName).DeviceName
    strDevicePort = Application.Printers(strName).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)
    If lngBinCount = 0 Then
      cbbPaperSize.RowSource = vbNullString
      Exit Function
    End If
    ' 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.
   With frmName
    With cbbPaperSize
      .RowSource = ""
      .RowSourceType = "Value List"
      .SeparatorCharacters = acSeparatorCharactersSemiColon
      .ColumnCount = 2
      .ColumnHeads = True
      .AddItem Item:="Nomor;Nama"
      .BoundColumn = 1
      .ListWidth = 2 * 1440
      .ColumnWidths = "0 In;2 In"
      i = 0
    If lngBinCount = Null Then MsgBox "test"
    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)
        .AddItem Item:=aintNumBin(lngCounter) & "; " & strBinName
        i = i + 1
      Next lngCounter
      .Value = .ItemData(1)
    End With
  End With

Exit_Function:
    Exit Function
Err_Msg:
    MsgBox Prompt:=Err.Description, Buttons:=vbCritical & vbOKOnly, _
        Title:="Error Number " & Err.Number & " Occurred"
    Resume Exit_Function
End Function
Fungsi itu tidak bisa dijalankan langsung di Immediate Window. Untuk menjalankannya, kita harus membuat sebuah form, sebuah control yang berupa combo box, dan menggunakan nama printer di dalammnya. Dengan demikian, untuk menjalankan fungsi membuatDaftarPaperBin, kita harus menyediakan terutama form dan control. Tanpa kedua objek ini, fungsi tidak bisa dijalankan. Kita dapat menggunakan form yang ada di posting Fungsi Untuk Membuat Daftar Ukuran Kertas di Access VBA.

Sisipkan di bawah control combo box yang bernama cbbUkuranKertas, sebuah combo box yang lain dengan properti sebagai berikut:
  1. Name=cbbPaperBin
  2. Row Source Type=Value List
Combo box cbbPaperBin beserta propertinya
Selanjutnya, pada modul form Form1, hapus semua kode VBA yang ada di dalamnya dan sisipkan kode VBA berikut ini:
Option Compare Database
Private Sub cbbPrinter_Change()
  membuatDaftarUkuranKertas Forms(Me.Name), Controls(Me.cbbUkuranKertas.Name), menghitungUrutanPrinter(Me.cbbPrinter)
  membuatDaftarPaperBin Forms(Me.Name), Controls(Me.cbbPaperBin.Name), Me.cbbPrinter
End Sub

Private Sub Form_Open(Cancel As Integer)
  Me.cbbPrinter.SeparatorCharacters = 2
  Me.cbbPrinter.RowSource = Join(membuatDaftarPrinter, ";")
  Me.cbbPrinter = Application.Printer.DeviceName
  membuatDaftarUkuranKertas Forms(Me.Name), Controls(Me.cbbUkuranKertas.Name), menghitungUrutanPrinter(Me.cbbPrinter)
  membuatDaftarPaperBin Forms(Me.Name), Controls(Me.cbbPaperBin.Name), Me.cbbPrinter
End Sub
Bila form Form1 dibuka secara Form View, tampilan secara animasi seperti di bawah ini:
Animasi pergantian jenis printer dan paper bin

Pada gambar animasi di atas, saat combo box diganti maka nilai paper bin juga berubah. Bila ada lebih dari satu paper bin untuk satu printer tertentu, kita dapat memilih salah satu item yang ada di daftar paper bin.

Comments

Posting Terpopuler

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access