Есть функция, которая по замыслу должна на каждой итерации получать имена принтеров, и сохранять их в массив, чтобы можно было потом этот массив использовать в другой функции или макросе.
Но получилось лишь одно: выводится последнее значение в переменную, а при попытке вывести в массив 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 |