Проблема в следующей строке:
If InStr(1,Ucase(objItem.Name),Appname) >= 1 Then
Здесь вы конвертируете значение свойства Win32_Process.Name
в верхний регистр, но не конвертируете Appname
в верхний регистр. По умолчанию InStr
выполняет поиск с учетом регистра, поэтому, если строки ввода совпадают, но различаются по регистру, совпадения не будет.
Чтобы решить эту проблему, вы также можете преобразовать Appname
в верхний регистр:
If InStr(1, UCase(objItem.Name), UCase(Appname)) >= 1 Then
или вы можете использовать параметр vbTextCompare
, чтобы игнорировать регистр букв:
If InStr(1, objItem.Name, Appname, vbTextCompare) >= 1 Then
Однако на самом деле в этой проверке нет никакой необходимости, поскольку вы можете включить ее непосредственно в свой запрос:
Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_Process WHERE Name='" & Appname & "'", , 48)