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.
  1. Function membuatDaftarPaperBin(frmName As Form, cbbPaperSize As Access.ComboBox, strName As String)  
  2. ' Uses the DeviceCapabilities API function to display a  
  3. ' message box with the name of the default printer and a  
  4. ' list of the paper bins it supports.  
  5.   
  6.     Dim lngBinCount As Long  
  7.     Dim lngCounter As Long  
  8.     Dim hPrinter As Long  
  9.     Dim strDeviceName As String  
  10.     Dim strDevicePort As String  
  11.     Dim strBinNamesList As String  
  12.     Dim strBinName As String  
  13.     Dim intLength As Integer  
  14.     Dim strMsg As String  
  15.     Dim aintNumBin() As Integer  
  16.   
  17. On Error GoTo Err_Msg  
  18.   
  19.     ' Get name and port of the default printer.  
  20.     strDeviceName = Application.Printers(strName).DeviceName  
  21.     strDevicePort = Application.Printers(strName).Port  
  22.     ' Get count of paper bin names supported by the printer.  
  23.     lngBinCount = DeviceCapabilities(lpsDeviceName:=strDeviceName, _  
  24.         lpPort:=strDevicePort, _  
  25.         iIndex:=DC_BINNAMES, _  
  26.         lpOutput:=ByVal vbNullString, _  
  27.         lpDevMode:=DEFAULT_VALUES)  
  28.     If lngBinCount = 0 Then  
  29.       cbbPaperSize.RowSource = vbNullString  
  30.       Exit Function  
  31.     End If  
  32.     ' Re-dimension the array to count of paper bins.  
  33.     ReDim aintNumBin(1 To lngBinCount)  
  34.     ' Pad variable to accept 24 bytes for each bin name.  
  35.     strBinNamesList = String(Number:=24 * lngBinCount, Character:=0)  
  36.   
  37.     ' Get string buffer of paper bin names supported by the printer.  
  38.     lngBinCount = DeviceCapabilities(lpsDeviceName:=strDeviceName, _  
  39.         lpPort:=strDevicePort, _  
  40.         iIndex:=DC_BINNAMES, _  
  41.         lpOutput:=ByVal strBinNamesList, _  
  42.         lpDevMode:=DEFAULT_VALUES)  
  43.   
  44.     ' Get array of paper bin numbers supported by the printer.  
  45.     lngBinCount = DeviceCapabilities(lpsDeviceName:=strDeviceName, _  
  46.         lpPort:=strDevicePort, _  
  47.         iIndex:=DC_BINS, _  
  48.         lpOutput:=aintNumBin(1), _  
  49.         lpDevMode:=0)  
  50.   
  51.     ' List available paper bin names.  
  52.    With frmName  
  53.     With cbbPaperSize  
  54.       .RowSource = ""  
  55.       .RowSourceType = "Value List"  
  56.       .SeparatorCharacters = acSeparatorCharactersSemiColon  
  57.       .ColumnCount = 2  
  58.       .ColumnHeads = True  
  59.       .AddItem Item:="Nomor;Nama"  
  60.       .BoundColumn = 1  
  61.       .ListWidth = 2 * 1440  
  62.       .ColumnWidths = "0 In;2 In"  
  63.       i = 0  
  64.     If lngBinCount = Null Then MsgBox "test"  
  65.     For lngCounter = 1 To lngBinCount  
  66.   
  67.         ' Parse a paper bin name from string buffer.  
  68.         strBinName = Mid(String:=strBinNamesList, _  
  69.             Start:=24 * (lngCounter - 1) + 1, _  
  70.             Length:=24)  
  71.         intLength = VBA.InStr(Start:=1, _  
  72.             String1:=strBinName, String2:=Chr(0)) - 1  
  73.         strBinName = Left(String:=strBinName, _  
  74.                 Length:=intLength)  
  75.         .AddItem Item:=aintNumBin(lngCounter) & "; " & strBinName  
  76.         i = i + 1  
  77.       Next lngCounter  
  78.       .Value = .ItemData(1)  
  79.     End With  
  80.   End With  
  81.   
  82. Exit_Function:  
  83.     Exit Function  
  84. Err_Msg:  
  85.     MsgBox Prompt:=Err.Description, Buttons:=vbCritical & vbOKOnly, _  
  86.         Title:="Error Number " & Err.Number & " Occurred"  
  87.     Resume Exit_Function  
  88. 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
  1. Private Sub cbbPrinter_Change()  
  2.   membuatDaftarUkuranKertas Forms(Me.Name), Controls(Me.cbbUkuranKertas.Name), menghitungUrutanPrinter(Me.cbbPrinter)  
  3.   membuatDaftarPaperBin Forms(Me.Name), Controls(Me.cbbPaperBin.Name), Me.cbbPrinter  
  4. End Sub  
  5.   
  6. Private Sub Form_Open(Cancel As Integer)  
  7.   Me.cbbPrinter.SeparatorCharacters = 2  
  8.   Me.cbbPrinter.RowSource = Join(membuatDaftarPrinter, ";")  
  9.   Me.cbbPrinter = Application.Printer.DeviceName  
  10.   membuatDaftarUkuranKertas Forms(Me.Name), Controls(Me.cbbUkuranKertas.Name), menghitungUrutanPrinter(Me.cbbPrinter)  
  11.   membuatDaftarPaperBin Forms(Me.Name), Controls(Me.cbbPaperBin.Name), Me.cbbPrinter  
  12. 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

Mengenal Tipe Data Calculated di MS Access

Format Untuk Field Dengan Tipe Data Date/Time di MS Access

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal