Объединил оба метода, правда он выводит строку содержащую список номеров USB дисков разделенных точка запятой и пробелом
Код
Function USBDiskSerial()
Dim wmiDiskDrive, wmiDiskDrives, строка, serial, i
On Error Resume Next 'если ошибка продолжаем
Set wmiDiskDrives = GetObject("winmgmts:").InstancesOf("Win32_DiskDrive") 'получаем диски
i = 0 'обнуляем счетчик
For Each wmiDiskDrive In wmiDiskDrives 'побежали по дискам
If wmiDiskDrive.InterfaceType = "USB" Then 'если диск USB
serial = Replace(Mid(wmiDiskDrive.PnPDeviceID, InStrRev(wmiDiskDrive.PnPDeviceID, "\") + 1), "&0", "") 'получаем только серийный номер
If Not serial = vbNullString Then строка = строка & IIf(строка <> vbNullString, "; ", vbNullString) & serial 'добавляем его в конец строки
i = i + 1 'счетчику прибавляем 1
End If
Next
If i <> 0 Then 'если счетчик не равен 0
USBDiskSerial = строка 'присваиваем строку
Else
USBDiskSerial = vbNullString 'иначе пустая строка
End If
End Function
но получить массив из него просто: массив = Split (USBDiskSerial, "; ")
ну и проверить смонтирована ли нужная флешка, если даже смонтировано много флешек тоже легко:
Код
Sub test()
If InStr(1, USBDiskSerial, "102315A74FD79E") > 0 Then Debug.Print "Флешка установлена" ' "102315A74FD79E" - серийный номер флешки
End Sub