如何让这个Python代码用VBA运行

问题描述 投票:0回答:1

我没有任何 VBA 经验,所以我有点挣扎。

所以我有这个 Python 代码,它可以进行 API 身份验证,然后将 API 调用中的 JSON 转换为 excel 文件并保存。

Sub RunPythonScriptQuery()

Dim objShell As Object
Dim PythonExePath As String, PythonScriptPath As String
ActiveWorkbook.Save
ChDir ActiveWorkbook.Path

    Set objShell = VBA.CreateObject("Wscript.Shell")
    
    PythonExePath = """C:\Users\me\AppData\Local\Programs\Python\Python39\python.exe"""
    PythonScriptPath = """C:\Users\me\vbatest\parse.py"""
    
    objShell.Run PythonExePath & PythonScriptPath
    
    MsgBox ("File parsed!")
    
End Sub

我想做的是点击excel上的一个按钮并执行整个操作。即使我没有收到任何错误,它也没有根据我的需要保存文件。你知道我如何用 VBA 解决这个问题吗?

python excel vba python-requests
1个回答
0
投票

此代码对我有用。

在 Excel VBA 中 -

Option Explicit

Sub sbRunPythonScriptHello()
Dim objShell As Object
Dim PythonExePath As String
Dim PythonScriptPath As String
    Set objShell = VBA.CreateObject("Wscript.Shell")
    PythonExePath = """C:\Users\david\AppData\Local\Programs\Python\Python311\python.exe"""
    PythonScriptPath = """C:\Users\david\Desktop\py_HelloWorld.py"""
    objShell.Run PythonExePath & PythonScriptPath
    MsgBox ("Hello World Python from VBA")
End Sub

这是 VBA 调用的 Python 代码 -

来自 - digitalocean.com/community/tutorials/python-wait-time-wait-for-input

import time
sec = input('Let us wait for user input. Let me know how many seconds to sleep now.\n')
print('Going to sleep for', sec, 'seconds.')
time.sleep(int(sec))
print('Enough of sleeping, I quit!')
time.sleep(int(sec))

这是使用 Windows 11 -

Windows 11 家庭版 22H2版本 安装于u200e20/u200e01/u200e2023 操作系统版本 22621.1413

和 Excel -

适用于 Microsoft 365 MSO 的 Microsoft® Excel®(版本 2303 内部版本 16.0.16227.20202)64 位

使用 Python -

Python 3.11.2(tags/v3.11.2:878ead1,2023 年 2 月 7 日,16:38:35)[MSC v.1934 64 位 (AMD64)] 在 win32 上

© www.soinside.com 2019 - 2024. All rights reserved.