【问题标题】:How can I run Python commands from within Excel VBA?如何从 Excel VBA 中运行 Python 命令?
【发布时间】:2018-09-08 08:31:49
【问题描述】:

我正在努力从 Excel VBA(我很熟悉)访问 Python。这里有一个非常有用的答案(转载如下)。我非常仔细地执行了这些步骤 - 无论我使用的是 Python 3.3 还是 Python 2.7,都会出现同样的错误。

当我使用命令按钮执行 VBA 代码时,它在以下语句中失败: PyScript.Language = "python" 带有错误消息“运行时错误 380:无法创建指定语言的脚本引擎”

有什么想法吗?

我尝试使用的 stackoverflow 的答案如下。

仔细按照这些步骤进行

  1. 转到 Activestate 并获取 [ActivePython 2.5.7][1] MSI 安装程序。
    我在 2.6.x 中遇到了 DLL 地狱问题
  2. 在您的 Windows 机器上安装
  3. 安装完成后打开命令提示符并转到

    C:\Python25\lib\site-packages\win32comext\axscript\client

  4. 执行\> python pyscript.py 您应该会看到消息 Registered: Python

  5. 转到 ms office excel 并打开工作表

  6. 转到工具 > 宏 > Visual Basic 编辑器
  7. 添加对 Microsoft 脚本控件的引用![alt text][2]
  8. 添加新的用户表单。在用户窗体中添加一个命令按钮
  9. 切换到代码编辑器并插入以下代码

    Dim WithEvents PyScript As MSScriptControl.ScriptControl

    Private Sub CommandButton1_Click()
       If PyScript Is Nothing Then
           Set PyScript = New MSScriptControl.ScriptControl
           PyScript.Language = "python"
           PyScript.AddObject "Sheet", Workbooks(1).Sheets(1)
           PyScript.AllowUI = True
       End If
       PyScript.ExecuteStatement "Sheet.cells(1,1).value='Hello'"
    End Sub
    

执行。根据需要享受和扩展

【问题讨论】:

标签: python excel vba


【解决方案1】:

我正在运行 32 位 Excel 2010 和 Anaconda Python 2.7。我完全按照说明执行了该过程,只是为了简单起见,我没有创建用户表单或按钮,并从 dim 语句中删除了“WithEvents”,并将 sub 设为 Public(见下文)。使用 Alt-F8 从工作表运行宏,没有问题。

我也在 E​​xcel 2013 中测试过,没有问题。

Public Sub TestPyScript()
Dim PyScript As MSScriptControl.ScriptControl
   If PyScript Is Nothing Then
       Set PyScript = New MSScriptControl.ScriptControl
       PyScript.Language = "python"
       PyScript.AddObject "Sheet", Workbooks(1).Sheets(1)
       PyScript.AllowUI = True
   End If
   PyScript.ExecuteStatement "Sheet.cells(1,1).value='Hello'"
End Sub

【讨论】:

  • 我了解到 ActivePython 的生产成本。因此,您可能想要使用“网关类”。之所以称为网关,是因为它向 Excel VBA 开发人员打开了 Python 生态系统的丰富世界exceldevelopmentplatform.blogspot.com/2018/06/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多