Отправка числового значения из PowerShell в VBA

#excel #powershell #vba

#excel #powershell #vba

Вопрос:

Я хотел бы получить некоторые числовые значения, которые я получаю с помощью сценария PowerShell, на листе Excel. Я уже могу вернуть значение, но оно поступает в электронную таблицу в виде строки, и каким-то образом Excel не позволяет мне преобразовать его в число. Надеюсь, я просто пропустил шаг, и это не невозможно.

Это часть VBA

 strCommand = (PsCommand)
Set wshshell = CreateObject("WScript.Shell")
Set WshShellexec = wshshell.Exec(strCommand)
stroutput = WshShellexec.StdOut.ReadAll
Sheets("Sheet1").Cells(i, 2).Value = stroutput
Sheets("Sheet1").Cells(i, 2).NumberFormat = "0"
 

Я предполагаю, что это проблема:

 Set WshShellexec = wshshell.Exec(strCommand)
 

Комментарии:

1. Exec выполняет команды асинхронно, но поскольку ReadAll блокируется, это не должно быть проблемой здесь (если только внешняя команда не генерирует избыточный вывод, поэтому буфер заполнен). Что такое PsCommand ?

2. .Value = Val(stroutput) ?

3. PsCommand = «Powershell -File c:scriptFolderSizeCheckFolderSizev2.ps1 » amp; Целевая папка

4. Как я могу вернуть целое число вместо строки? Целевая папка может содержать пробел. Но они также были идентифицированы сценарием.

Ответ №1:

ReadAll всегда возвращает строку. Чтобы преобразовать числовую строку в целое число, используйте CInt или CLng :

 Sheets("Sheet1").Cells(i, 2).Value = CLng(stroutput)
 

Обратите внимание, что строка должна состоять только из числа (допустимы начальные и конечные пробелы). Другие символы в строке приведут к ошибке. В таком случае вам нужно сначала проанализировать значение из строки, прежде чем преобразовывать его в целое число.

Комментарии:

1. Я попробовал это и, похоже, это та часть кода, которую я искал. Большое спасибо за помощь !!! 🙂