【问题标题】:Pass argument from command button on Access form to python script将 Access 表单上命令按钮的参数传递给 python 脚本
【发布时间】:2015-06-12 23:42:31
【问题描述】:

使用 Access 2010 和 python 2.7.8

在 Access 2010 表单上有一个命令按钮。我正在尝试从 Field1 文本框中提取值并将其传递给 python 脚本。我正在努力传递变量。注释掉的东西是我尝试过的其他东西。

Field1 文本框中的值为:

C:\\tests\\Project

命令按钮后面的 VBA:

Private Sub Command0_Click()
    arg1 = """" & Field1 & """"
    'arg1 = Field1
  Debug.Print arg1
    'Call Shell("C:\\Python27\\ArcGIS10.3\\python.exe " & "C:\\tests\\Test.py " & "C:\\tests\\Project", vbNormalFocus)
    Call Shell("C:\Python27\ArcGIS10.3\python.exe " & "C:\tests\Test.py " & arg1, vbNormalFocus)
End Sub

Python 代码是:

import os.path

#fp = "C:\\tests\\Projects"
fp = argv[1]
os.makedirs(fp)

【问题讨论】:

    标签: python-2.7 ms-access vba


    【解决方案1】:

    在 Python 中尝试以下操作

    # should be sys.argv[1]
    sys.argv[1]
    

    你可能想利用 os.path.join 来确定你的 makedirs 的去向

    import os
    import sys
    
    sys.argv[1]
    fp = r'c:\test'
    os.makedirs(os.path.join(fp,sys.argv[1]))
    

    Excel 中的 VBA - 适合我...

    Private Sub test()
        arg1 = Range("A1").Value
        Debug.Print arg1
        Call Shell("""C:\Python27\python.exe"" " & """c:\test\test.py"" " & """arg1""", vbNormalFocus)
    End Sub 
    

    【讨论】:

    • 不,这不起作用。命令按钮正在执行 python 脚本,但参数仍未被传递或识别。
    • 命令 fp = r'c:\test' 似乎没有做任何事情,因为 argv[1] 传递了整个路径名。我将其更改为 fp = r'c:\monkey' 并且程序仍然运行并且没有创建名为 monkey 的目录。这个命令的意图是什么?否则,您的建议确实有效。我不知道为什么上周末没有。也许我在我的代码中遗漏了一些东西。
    • r'c:\test' r 表示它是一个原始文字字符串,'\' 等被视为反斜杠。否则 \t \n \r 可能读作制表符、换行符或回车符...但是如果您传递的是字符串,那真的没关系...
    【解决方案2】:

    感谢 Superfly。需要将 sys 导入 python 脚本并使 fp=sys.argv[1]。

    访问 VBA

    Private Sub Command0_Click()
        argv1 = Field1.Value
        Debug.Print argv1
        Call Shell("C:\Python27\ArcGIS10.3\python.exe " & "C:\tests\Test.py " & argv1, vbNormalFocus)
    End Sub
    

    Python

    import os.path
    import sys
    
    fp = sys.argv[1]
    os.makedirs(fp)
    

    【讨论】:

      猜你喜欢
      • 2016-02-20
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 2023-03-23
      • 2014-03-08
      • 2013-10-22
      • 2016-12-19
      • 1970-01-01
      相关资源
      最近更新 更多