【问题标题】:Run script file from Excel VBA and pass variable to the script file从 Excel VBA 运行脚本文件并将变量传递给脚本文件
【发布时间】:2019-12-12 18:16:21
【问题描述】:

我有一个代码可以让我执行 Windows 脚本文件(PowerShell 脚本文件),并且代码运行良好,没有任何问题。

我想要做的是将一个变量传递给脚本文件中的一行。 示例:

脚本文件中的这一行

convert Image.png -resize 300x300 -density 300 -quality 100 ImageNew.png

该行有Image.png,但我希望这个文件名是可变的,并通过 Excel 单元格将值传递给它。 换句话说,我在单元格中有文件名,我想将 Image.png 更改为单元格中的值。

这是脚本文件:

cd (Join-Path $env:USERPROFILE 'Desktop\Output\')
convert Image.png -resize 300x300 -density 300 -quality 100 ImageNew.png

这是我正在使用的 VBA 代码:

Sub TestMe()
    MsgBox ScriptFile
End Sub

Function ScriptFile() As String
    Dim wshShell   As Object
    Dim strCommand As String

    strCommand = "Powershell.exe -File ""C:\Users\Future\Desktop\Sample.ps1"""
    Set wshShell = CreateObject("WScript.Shell")
    wshShell.Run strCommand, 0, True
End Function

知道怎么做吗?

到目前为止我尝试过 在 VBA 代码中,我使用了这一行

strCommand = "Powershell.exe -File ""& {'C:\Users\Future\Desktop\Sample.ps1' 001.png}"""

在脚本文件中,我在顶部使用了这一行

$image=$args[0]

但我还不能让它工作

【问题讨论】:

  • 那么,到目前为止,您尝试了什么?到目前为止,您的 PowerShell 代码不接受参数,而且我没有看到任何 VBA 代码。
  • 所以,PowerShell脚本不接受参数,VBA代码也不传递参数。
  • 我没有使用过 powershell 脚本,但快速搜索发现 how to have parameters in your powershell script。然后您可以通过您的 VBA 代码传递参数
  • 另一种方法是使用 VBA 编写 PowerShell 脚本并执行它。
  • 你为什么把-File ""C:\Users\Future\Desktop\Sample.ps1""改成-File ""& {'C:\Users\Future\Desktop\Sample.ps1' 001.png}""?那是无效的语法。使用如下内容:strCommand = "Powershell.exe -File ""C:\Users\Future\Desktop\Sample.ps1"" " & ws.Range("C4").Value 其中ws 是指向您的工作表的变量,"C4" 是该工作表中具有文件名的单元格。

标签: excel vba powershell


【解决方案1】:

-File "& {'C:\Users\Future\Desktop\Sample.ps1' 001.png}" 是无效语法。您不能将脚本块调用传递给参数-File。你需要这样的东西:

strCommand = "Powershell.exe -File ""C:\Users\Future\Desktop\Sample.ps1"" """ & _
             ws.Range("C4").Value & """"

其中ws 是指向您的工作表的变量,“C4”是该工作表中具有文件名的单元格。

【讨论】:

  • 非常感谢。请多说一点。如果我需要添加第二个参数..怎么办?我将在脚本文件和 VBA 代码中编辑什么......(这只是为了提供更多信息,因为我现在不需要它)
  • @YasserKhalil 您可以将其添加为 VBA 代码中的第二个位置参数(就像第一个参数一样)并在 PowerShell 代码中分配它,如下所示:$second = $args[1]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 2020-12-20
相关资源
最近更新 更多