我将在我的Access程序中使用ZINT作为我的条形码生成器。 我想通过在Access VBA中使用SHELL命令来调用它。我的问题是,我无法从命令提示符调用ZINT。 这是我的代码。
MyObject
当我运行上面的代码时,错误显示
Private Sub cmdTest_Click()
Dim strToPrint, strInfoBarcode As String
strInfoBarcode = "Batch #699"
strToPrint = "%ProgramFiles%\zint\zint.exe -o c:\path\699.png -b 58 --vers=10 -d " & strInfoBarcode
Call Shell("cmd.exe /S /K" & strToPrint, vbMinimizedNoFocus)
End Sub
有人能否显示从Access VBA调用ZINT程序的正确方法?
答案 0 :(得分:1)
您是否遗漏了Program Files
中的空格?猜测这只是一个错字,但你应该在任何带有空格的路径上加上引号。
Private Sub cmdTest_Click()
Dim strToPrint, strInfoBarcode As String
strInfoBarcode = "Batch #699"
strToPrint = """%ProgramFiles%\zint\zint.exe"" -o c:\path\699.png -b 58 --vers=10 -d """ & strInfoBarcode & """"
Call Shell("cmd.exe /S /K " & strToPrint, vbMinimizedNoFocus)
End Sub
如果条形码可能包含任何空格(如Excel集成的ZINT维基页面中所示,http://zint.org.uk/Excel.aspx),也可以引用条形码。
编辑:你在/K
标志后也错过了一个空格,但我认为你甚至不需要在这里使用cmd.exe。
答案 1 :(得分:0)
为了帮助其他人解决同样的问题,这是我的工作代码。
Private Sub cmdTest_Click()
Dim strZintPath, strImagePath, strToPrint, strInfoBarcode As String
strZintPath = Get32BitProgramFilesPath() & "\Zint\"
strImagePath = CurrentProject.Path & "\images\barcode\"
strInfoBarcode = "699"
strToPrint = strZintPath & "zint.exe -b 58 -o " & Chr(34) & strImagePath & strInfoBarcode & ".png" & Chr(34) & " --vers=10 -d " & Chr(34) & strInfoBarcode & Chr(34)
Call Shell(strToPrint, vbMinimizedNoFocus)
End Sub
复制的功能Function Get32BitProgramFilesPath() As String
If Environ("ProgramW6432") = "" Then
'32 bit Windows
Get32BitProgramFilesPath = Environ("ProgramFiles")
Else
'64 bit Windows
Get32BitProgramFilesPath = Environ("ProgramFiles(x86)")
End If
End Function