【发布时间】:2016-02-04 09:31:47
【问题描述】:
我有一个访问数据库,我想完全从共享驱动器为其他用户运行,并将 VBA 写入前端表单。
作为其中一个功能的一部分,它调用一个批处理文件,使用 VBA 将其他文件压缩成一个文本文件,然后将其链接并导入数据库。
但是,由于将数据库连同批处理文件一起移动到共享驱动器上,它无法找到批处理文件,因为 CMD 表示不支持 UNC 路径。理想情况下,我希望 VBA 在继续使用 VBA 之前等待批处理文件完成,因为我目前有另一个函数可以让代码等待一段时间(WaitFor(10))。
CMD 声称“U:\My”未被识别为内部或外部命令。这是在 VBA 编码还是批处理文件中?
相关代码:
Dim txtPath, batpath, FormDate, tempPath As String
FormDate = Format(Now(), "yyyymmdd")
batpath = Application.CurrentProject.Path & "\Compressor\"
txtPath = Application.CurrentProject.Path & "\Data_TextFile\"
tempPath = Application.CurrentProject.Path & "\TempTextFlows\"
'Do files exist in temp folder?
If Dir(tempPath & "*.*") = "" Then
'If files don't exist change status to:
Me.Text41 = "No File(s) Found"
Else
'If files do exist change status to:
Me.Text41 = "Compressing Files, Please Wait..."
'Call the Files compressor
Call Shell(Environ$("COMSPEC") & " /c " & batpath & "myBat.bat", vbNormalFocus)
'Wait 5 seconds for flow compressor to run
Call WaitFor(10)
'Link text file created by flow compressor using "TextFile_" and todays date
DoCmd.TransferText acLinkDelim, "TextFile20160126 Link Specification", _
"TextFile_" & FormDate, txtPath & "TextFile_" & FormDate & ".txt"
'Format recently linked FormatTextFlows into tables
Call FormatTextFlows
Me.Text41 = "Files Completed"
End If
下面是它调用的批处理文件:
U:
cd "My Folder\test\FormatTextFlows\TempTextFlows"
echo Date format = %date%
echo dd = %date:~0,2%
echo mm = %date:~3,2%
echo yyyy = %date:~6,4%
echo.
echo Timestamp = %date:~6,4%-%date:~3,2%-%date:~0,2%
copy *.USR "My Folder\test\FormatTextFlows\Data_TextFile\TextFile_%date:~6,4%%date:~3,2%%date:~0,2%.txt"
提前感谢任何人提供的任何帮助。
【问题讨论】:
-
您不能在 UNC 路径上使用 CD 命令;如果需要更改活动目录,您可以将 UNC 路径挂载到驱动器号并以这种方式访问它。如果您可以将基本 UNC 路径放入变量中,那么您可以使用它来构建批处理文件中每个对象的完整路径。
-
嗨 CoveGeek!这可以解释为什么我不能调用它并且只是不断收到相同的错误消息。我实际上将
Call Shell(...更改为Variable = Shell(...,这似乎有效。 -
当你通过shell命令传递一个包含空格的路径时,你需要确保参数中包含的路径有引号。使用 chr(34) 可以在参数中添加引号字符,以便命令行解释器将其视为单个参数。如果我有更多时间,我可以为 vbs 和 cmd 部分编写一个完整的示例。
标签: batch-file ms-access vba