Xin chỉ giúp viết code VBA để lấy thông tin của máy in

Liên hệ QC

anhthuan

Thành viên hoạt động
Tham gia
10/12/06
Bài viết
106
Được thích
264
Minh đang viết một chương trình trên Excel bằng VBA và yêu cầu là phải in ra máy in, vấn đề của mình là chưa biết cách nào để lấy danh sách các máy in đã cài đặt trong máy tính. Cụ thể như sau:
- Khi chon command để in se cho hiện ra form in, trong đó cho phép người sử dụng chon may in đã được cài trong máy tính

Các bạn chỉ giúp mình đoạn code trên với
Thanks
 
Bạn dùng Code sau:

PHP:
Sub Select_Printer()
 Application.Dialogs(xlDialogPrinterSetup).Show
End Sub
 
Upvote 0
Cảm ơn bạn dat2007, tuy nhiên câu trả lời vẫn chưa đúng ý của mình. Mình xin được miêu tả thêm yêu cầu như sau:
- Mình có một form in, trong đó có một combobox, mục đích của cobobox nay là list ra toàn bộ máy in hiện tại đang cài đặt trong máy tính.
- Vấn đề là khi kich hoạt form thi đồng thời phải list ra danh sách những máy in vào combobox trong form này

Xin các bạn giúp cho
 
Upvote 0
Sau đây là code dùng hàm API để lấy ra list của tất cả máy in đã được cài đặt. Bạn tùy nghi sử dụng:
Mã:
Option Explicit
Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type

Declare Function RegOpenKeyEx _
   Lib "advapi32.dll" _
   Alias "RegOpenKeyExA" _
   ( _
   ByVal hKey As Long, _
   ByVal lpSubKey As String, _
   ByVal ulOptions As Long, _
   ByVal samDesired As Long, _
   phkResult As Long _
   ) _
   As Long

Declare Function RegEnumKeyEx _
   Lib "advapi32.dll" _
   Alias "RegEnumKeyExA" _
   ( _
   ByVal hKey As Long, _
   ByVal dwIndex As Long, _
   ByVal lpName As String, _
   lpcbName As Long, ByVal _
   lpReserved As Long, _
   ByVal lpClass As String, _
   lpcbClass As Long, _
   lpftLastWriteTime As FILETIME _
   ) _
   As Long

Declare Function RegCloseKey _
   Lib "advapi32.dll" _
   ( _
   ByVal hKey As Long _
   ) _
   As Long


Public Function fncEnumInstalledPrintersReg() As Collection
   Dim tmpFunctionResult As Boolean
   Dim aFileTimeStruc As FILETIME
   Dim AddressofOpenKey As Long, aPrinterName As String
   Dim aPrinterIndex As Integer, aPrinterNameLen As Long
   Const KEY_ENUMERATE_SUB_KEYS = &H8
   Const HKEY_LOCAL_MACHINE = &H80000002
   Set fncEnumInstalledPrintersReg = New Collection
   aPrinterIndex = 0
   tmpFunctionResult = Not CBool _
      ( _
      RegOpenKeyEx _
      ( _
      hKey:=HKEY_LOCAL_MACHINE, _
      lpSubKey:="SYSTEM\CURRENTCONTROLSET\CONTROL\PRINT\PRINTERS", _
      ulOptions:=0, _
      samDesired:=KEY_ENUMERATE_SUB_KEYS, _
      phkResult:=AddressofOpenKey _
      ) _
      )
   If tmpFunctionResult = False Then GoTo ExitFunction
   Do
      aPrinterNameLen = 255
      aPrinterName = String(aPrinterNameLen, CStr(0))
      tmpFunctionResult = Not CBool _
         ( _
         RegEnumKeyEx _
         ( _
         hKey:=AddressofOpenKey, _
         dwIndex:=aPrinterIndex, _
         lpName:=aPrinterName, _
         lpcbName:=aPrinterNameLen, _
         lpReserved:=0, _
         lpClass:=vbNullString, _
         lpcbClass:=0, _
         lpftLastWriteTime:=aFileTimeStruc _
         ) _
         )
      aPrinterIndex = aPrinterIndex + 1
      If tmpFunctionResult = False Then Exit Do
      aPrinterName = Left(aPrinterName, aPrinterNameLen)
      On Error Resume Next
      fncEnumInstalledPrintersReg.Add aPrinterName
      On Error GoTo 0
   Loop
   Call RegCloseKey(AddressofOpenKey)
   '
   Exit Function
ExitFunction:
   If Not AddressofOpenKey = 0 Then _
      Call RegCloseKey(AddressofOpenKey)
   Set fncEnumInstalledPrintersReg = Nothing
End Function

Sub Printers()
   Dim aPrinter As Variant
   Dim iRow As Integer
   For Each aPrinter In fncEnumInstalledPrintersReg
      iRow = iRow + 1
      Cells(iRow, 1) = aPrinter
   Next aPrinter
End Sub
 
Upvote 0
Ngoài đoạn Code của bác Voda. Bạn xem thêm Code sau

tuy nhiên câu trả lời vẫn chưa đúng ý của mình. Mình xin được miêu tả thêm yêu cầu như sau:
- Mình có một form in, trong đó có một combobox, mục đích của cobobox nay là list ra toàn bộ máy in hiện tại đang cài đặt trong máy tính.
- Vấn đề là khi kich hoạt form thi đồng thời phải list ra danh sách những máy in vào combobox trong form này

PHP:
Private Sub ComboBox1_Click()
    Application.ActivePrinter = ComboBox1.Text
End Sub
Private Sub UserForm_Activate()
    Dim owshNetwork As Object
    Dim oPrinters As Object
    Dim i As Long
    Dim aryPrinters
    Set owshNetwork = CreateObject("WScript.Network")
    Set oPrinters = owshNetwork.EnumPrinterConnections
    ReDim aryPrinters(0 To oPrinters.Count \ 2 - 1)
    For i = 0 To oPrinters.Count - 1 Step 2
        aryPrinters(i \ 2) = oPrinters.Item(i + 1) & " on " & oPrinters.Item(i)
    Next
    For i = 0 To Val(UBound(aryPrinters))
        ComboBox1.AddItem (aryPrinters(i))
    Next i
      
End Sub

Ps: Bạn lưu ý khi Post câu hỏi phải nêu rõ vấn đề định hỏi. Không nêu quá vắn tắt , gây khó cho mọi người
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom