엑셀 vba 프린터 선택하기
2020. 5. 28. 17:06ㆍVBA
728x90
반응형
질문 내용
컴퓨터 3대가 있고 2대에서 VBA 를 통해서 일반프린터가 아닌 라벨프린터를 선택해 출력을 하려합니다
1번컴 : Ne06:에 있는 \\공컴\라벨프린터
2번컴 : Ne05:에 있는 \\공컴\라벨프린터
3번컴 : 일반프린터, 라벨프린터가 설치된 컴퓨터
문제는 1번컴과 2번컴에서 Ne번호가 다르다는 것입니다.
해당 컴퓨터에서 설치된 프린터 목록을 다 알아낸다음
Instr 함수를 통해 "라벨프린터"가 들어가있으면 해당 프린터를 pName 변수에 string으로 저장할 수 있을것같은데, 해당 컴에 설치된 프린터 목록을 배열에 저장하는 법을 모르겠습니다.
답변 내용
아래 처럼 간단하게 해당 컴퓨터의 설치 된 모든 프린터 목록들을 가져와서
말씀하신대로 Instr로 포함 된 글자를 통해 걸러도 될 듯 싶습니다.
아니면 만약 말씀하신게 여러 컴퓨터에서 엑셀을 켜서
각 각 컴퓨터의 목록 저장을 원하신다면,
특정 시트에 프린터 명을 저장하고
최종적으로 다 저장된 목록을 범위로 잡고
배열에 담으면 될 듯싶습니다.
Sub getPrinterLists()
On Error Resume Next
Dim m As Workbook
Dim ms As Worksheet
Set m = Workbooks(ThisWorkbook.Name)
Set ms = m.Sheets("Sheet1")
Dim rng As Range
'// 기존 데이터 삭제
Set rng = ms.Range("A1:A" & ms.Cells(Rows.Count, 1).End(3).Row)
rng.Delete
'//
Dim computer As String
Dim wmiService As Object
Dim vT As Variant
Dim printer As Object
computer = "."
'// 컴퓨터의 root\cimv2 영역의 정보 가져오기
Set wmiService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & computer & "\root\cimv2")
'// WMI Service에서 프린터 목록 가져오기
Set installedPrinters = wmiService.ExecQuery("Select * from Win32_Printer")
If Err.Number <> 0 Then
MsgBox "WMI정보 가져오기 실패", vbCritical, "WMI Object Error"
Exit Sub
End If
'// 출력 위치를 위한 변수
i = 1
ReDim vT(1 To i)
For Each printer In installedPrinters
'// 배열에 담을 경우
ReDim Preserve vT(1 To i)
vT(i) = printer.Name
'// 셀에다 뿌려줄 경우
ms.Range("A" & i).Value = printer.Name
ms.Range("B" & i).Value = printer.Default
i = i + 1
Next printer
End Sub
728x90
반응형
'VBA' 카테고리의 다른 글
VBA 엑셀에서 프린터 설정화면 띄우기 (0) | 2020.05.28 |
---|---|
엑셀 vba를 통해 pdf 파일을 열고 싶습니다. (0) | 2020.05.28 |
VBA 파워포인트에서 도형 색상 바꾸기 (0) | 2020.05.28 |
VBA 병합해제 후 내용 채우기 (0) | 2020.04.13 |
엑셀 VBA 가운데 정렬, 좌측 정렬 예제 (0) | 2020.04.13 |