Есть функция, которая по замыслу должна на каждой итерации получать имена принтеров, и сохранять их в массив, чтобы можно было потом этот массив использовать в другой функции или макросе.
Но получилось лишь одно: выводится последнее значение в переменную, а при попытке вывести в массив AllPrinters() выходит ошибка.
Но получилось лишь одно: выводится последнее значение в переменную, а при попытке вывести в массив AllPrinters() выходит ошибка.
| Код |
|---|
Public Function AllPrinters() As String
' Used: Frans Bus, 2015. See http://pixcels.nl/set-activeprinter-excel
Const HKEY_CURRENT_USER = &H80000001
Dim regobj As Object
Dim aTypes As Variant
Dim aDevices As Variant
Dim vDevice As Variant
Dim sValue As String
Dim Printer As String
' connect to WMI registry provider on current machine with current user
Set regobj = GetObject("WINMGMTS:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
' get the Devices from the registry
regobj.EnumValues HKEY_CURRENT_USER, _
"Software\Microsoft\Windows NT\CurrentVersion\Devices", aDevices, aTypes
' find Printer and create full name
For Each Printer In AllPrinters
For Each vDevice In aDevices
' get port of device
regobj.GetStringValue HKEY_CURRENT_USER, _
"Software\Microsoft\Windows NT\CurrentVersion\Devices", vDevice, sValue
Next
Printer = vDevice & " " & Split(sValue, ",")(1)
Next
End Function
|