Cách tạo chọn danh sách máy in trong Form

  • Thread starter Thread starter ST-Lu!
  • Ngày gửi Ngày gửi
Liên hệ QC

ST-Lu!

Love Wingchun
Tham gia
19/8/08
Bài viết
730
Được thích
546
Nghề nghiệp
Xích lô một thời
Em mới học VBA, code viết rất dài và loằng ngoằng

Hiện tại em muốn trên form khi nhấn vào nút Select Printer thì (nút đó có thể là Combobox hay button cũng được) Khi nhấn vào đó sẽ có danh sách các máy in. Và mình sẽ chọn một máy in và lần sau sẽ in ra máy in này

Xin chỉ giúp

Em xin hỏi code lấy tên các máy in hiện hành (gồm cả trong mạng lan)

Xin chỉ giúp
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Bạn thử dùng lệnh sau:

dlgAnswer = Application.Dialogs(xlDialogPrinterSetup).Show
 
Upvote 0
Bạn thử dùng lệnh sau:

dlgAnswer = Application.Dialogs(xlDialogPrinterSetup).Show

Em thêm dòng lệnh của anh vào quả là ưng ý quá.
Em chỉ cần sửa code tại nút print thành
PHP:
dlgAnswer = Application.Dialogs(xlDialogPrinterSetup).Show
 ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, ActivePrinter:=dlgAnswer, Collate _
        :=True

Cám ơn Anh nhiều

untitled-4.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
Em thêm dòng lệnh của anh vào quả là ưng ý quá.
Em chỉ cần sửa code tại nút print thành
PHP:
dlgAnswer = Application.Dialogs(xlDialogPrinterSetup).Show
 ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, ActivePrinter:=dlgAnswer, Collate _
        :=True
Cám ơn Anh nhiều
Vậy vẫn chưa ngon đâu! (chỉ mới thành công bước đầu)
Cái cửa sổ ấy là 1 thành phần của Excel (tự nó có thế, không phải do bạn tạo ra)
Nếu bạn muốn nghiên cứu thì phải làm theo hướng:
- Lấy toàn bộ tên máy in có trong cửa sổ ấy (không Show cửa sổ) rồi gán vào ComboBox
Khi ấy mọi thứ mới đúng là CÁI CỦA BẠN
(ẹc... ẹc... có điều món này không dể nhai
http://www.mrexcel.com/forum/showthread.php?t=45419)
 
Lần chỉnh sửa cuối:
Upvote 0
Đúng Ndu à, cái đó chưa phải Made in "Tôi" nhưng quả thật cái giá phải trả cũng không đơn giản. Mình loay hoay mãi cũng chưa lấy được danh sách máy in. Cực chẳng đã mới đưa ra lời gợi ý như vậy. Với VBA thôi mà nó còn xa xôi đến vậy. Hy vọng ngày nào đó anh em ta đơn giản hóa được những việc thế này
 
Upvote 0
Đúng Ndu à, cái đó chưa phải Made in "Tôi" nhưng quả thật cái giá phải trả cũng không đơn giản. Mình loay hoay mãi cũng chưa lấy được danh sách máy in. Cực chẳng đã mới đưa ra lời gợi ý như vậy. Với VBA thôi mà nó còn xa xôi đến vậy. Hy vọng ngày nào đó anh em ta đơn giản hóa được những việc thế này
Đường link em đưa ở trên lấy được list máy in cho vào ComboBox mà anh (có điều code thấy ngán)
 
Upvote 0
Mình đọc trên mạng thấy đoạn code sau. Không biết có thể giúp ích gì cho các bạn không.

Mã:
[COLOR="Navy"]Public Function [/COLOR]ShowPrinters()
 
[COLOR="navy"]On Error GoTo[/COLOR] errHandler:
[COLOR="navy"]Dim[/COLOR] l [COLOR="navy"]As Long[/COLOR]
[COLOR="navy"]Dim[/COLOR] lCount [COLOR="navy"]As Long[/COLOR]
[COLOR="navy"]Dim[/COLOR] liststr [COLOR="navy"]As String[/COLOR]
 
liststr = ""
 
lCount = Printers.Count
 
[COLOR="navy"]If [/COLOR]lCount = 0 [COLOR="navy"]Then[/COLOR]
    liststr = "(No Printer Installed)"
[COLOR="navy"]Else[/COLOR]
    [COLOR="navy"]For[/COLOR] l = 0 [COLOR="navy"]To[/COLOR] lCount - 1
    liststr = liststr & vbCr & Printers(l).DeviceName
    [COLOR="navy"]Next[/COLOR]
[COLOR="navy"]End If[/COLOR]
 
'[COLOR="Green"]Show all printers in a messagebox[/COLOR]
MsgBox liststr, , "Printers"
 
[COLOR="navy"]Exit Function[/COLOR]
errHandler:
[COLOR="navy"]End Function[/COLOR]
 
Lần chỉnh sửa cuối:
Upvote 0
Mình đọc trên mạng thấy đoạn code sau. Không biết có thể giúp ích gì cho các bạn không.

Mã:
[COLOR=Navy]Public Function [/COLOR]ShowPrinters()
 
[COLOR=navy]On Error GoTo[/COLOR] errHandler:
[COLOR=navy]Dim[/COLOR] l [COLOR=navy]As Long[/COLOR]
[COLOR=navy]Dim[/COLOR] lCount [COLOR=navy]As Long[/COLOR]
[COLOR=navy]Dim[/COLOR] liststr [COLOR=navy]As String[/COLOR]
 
liststr = ""
 
lCount = Printers.Count
 
[COLOR=navy]If [/COLOR]lCount = 0 [COLOR=navy]Then[/COLOR]
    liststr = "(No Printer Installed)"
[COLOR=navy]Else[/COLOR]
    [COLOR=navy]For[/COLOR] l = 0 [COLOR=navy]To[/COLOR] lCount - 1
    liststr = liststr & vbCr & Printers(l).DeviceName
    [COLOR=navy]Next[/COLOR]
[COLOR=navy]End If[/COLOR]
 
'[COLOR=Green]Show all printers in a messagebox[/COLOR]
MsgBox liststr, , "Printers"
 
[COLOR=navy]Exit Function[/COLOR]
errHandler:
[COLOR=navy]End Function[/COLOR]
Cái Function này hơi bị... ngộ à nha... Có cả MsgBox
Bạn tìm nó từ đâu thế?
 
Upvote 0
Mình có tìm được một file set máy in bằng Access, bạn xem coi có "bào chế" gì được không.
 

File đính kèm

Upvote 0
Em nhớ Thầy NDU có bài lấy được các Process hiện hành trong task manager? Không biết có mối liên hệ nào không?
----
Cái file trên là em làm giúp bộ phận hàng nhập trong công ty, do phần mềm thuê viết bị lỗi. Ông viết giờ ko chịu đến
Hiện tại họ in trên excel (do trình độ máy tính có hạn) khi in ko chịu chọn máy in, hoặc ko gõ số trang from to...đành ra cũng mệt
Thấy anh em làm vất vả, hay lỗi lung tung mặc dù trình độ a bờ cờ nhưng thực lòng rất muốn giúp.
Sau khi giúp xong thấy mình lại biết thêm về Form ...vui quá

Cám ơn các Thầy nhiều
 
Upvote 0
To ndu:
Đây là đoạn code đang được người viết sửa chữa. Nhưng có điều 1 số đối tượng thì không biết ở đau ra.(Nếu là Excel)
Cái này trong Access chay ngon nhưng trong Excel thì không thể. Thế mới biết cũng là VBA nhưng Access mạnh hơn
 
Lần chỉnh sửa cuối:
Upvote 0
Em nhớ Thầy NDU có bài lấy được các Process hiện hành trong task manager? Không biết có mối liên hệ nào không?
Tôi đang nghĩ đến hướng này:
- Trong Registry, nơi lưu thông tin về tên các máy in là:
Mã:
HKCU\Software\Microsoft\Windows NT\CurrentVersion\Devices
- Vậy nếu tạo được 1 sub hoặc Function nào đó có khả năng lấy toàn bộ Value name (nằm ở khung bên phải của cửa sổ Registry Editor) thì xem như thành công!
Việc lấy thông tin trong 1 đường dẩn chỉ định trước nào đó là không có vấn đề, nhưng chưa thấy ở đâu nói đến việc lấy List Value name có trong 1 Key
Cái này gần giống như việc ta lấy toàn bộ tên file có trong 1 thư mục (không tính thư mục con)
Các cao thủ nào có kinh nghiệm về việc lấy thông tin trong Registry xin vui lòng chia sẽ ý kiến với!
 
Upvote 0
Bạn thử đoạn code này xem sao:

Mã:
Private Sub Form_Load()
Dim prnPrinters As Printer
For Each prnPrinters In Printer
Form1.Print prnPrinters.DeviceName
Next
End Sub
 
Upvote 0
Bạn thử đoạn code này xem sao:

Mã:
Private Sub Form_Load()
Dim prnPrinters As Printer
For Each prnPrinters In Printer
Form1.Print prnPrinters.DeviceName
Next
End Sub
Mình chưa hiểu đoạn code trên lắm, xin nói rõ 1 chút được không bạn.
Mình nhớ là Trong userform excel đâu có sự kiện load mà là Initialize mà bạn.
 
Upvote 0
Đoạn mã Quoc Phong cung cấp là mã viết trong Access. Trong Excel không có object Printer nê không thể khai báo Dim .....as Printer.
 
Upvote 0
Em mới học VBA, code viết rất dài và loằng ngoằng

Hiện tại em muốn trên form khi nhấn vào nút Select Printer thì (nút đó có thể là Combobox hay button cũng được) Khi nhấn vào đó sẽ có danh sách các máy in. Và mình sẽ chọn một máy in và lần sau sẽ in ra máy in này

Xin chỉ giúp

Em xin hỏi code lấy tên các máy in hiện hành (gồm cả trong mạng lan)

Xin chỉ giúp
Bạn xem bài TVEXCEL02 Print : công cụ in cho Excel có 1 combobox chọn máy in. Bạn tham khảo và viết lại theo ý mình. Password=phamduylong
 
Upvote 0
Web KT

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

Back
Top Bottom