从Access VBA调用Zint

时间:2018-02-19 07:28:27

标签: vba ms-access cmd barcode

我将在我的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程序的正确方法?

2 个答案:

答案 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

这是我从Get Path of Program Files

复制的功能
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