엑셀 vba 프린터 선택하기

2020. 5. 28. 17:06VBA

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
반응형