输出文本文件创build/保存VBA代码计时问题

问题摘要:在命令文件需要被调用的时候,为FTP命令创build一个文本文件还没有完成。 它不会陷入“如果文件存在”。 如何确保在继续执行代码之前创build文件?

详细信息:我正在使用我的Excel工作簿中的一部分代码来FTP一些文件。 为此,我通过包含FTP命令的代码创build一个FTPcmd.txt文件,closures文件,然后在CMD窗口中删除FTP命令。 它看起来像命令文件花了很长时间来完成写入,因此,我得到一个“权限被拒绝”的错误。 FTP日志说“错误打开脚本文件C:\ temp \ FTPcmd.txt”。 我错误检查,看看文件是否存在,但我认为该文件显示为打开语句后,而不是closures。 我没有打到DIR中的else语句<“”IsFileOpen函数在“http://www.vbaexpress.com/kb/getarticle.php?kb_id=468上findVBA Express:Excel – 检查一个文件已经打开“

我不相信这是ShellWait问题。 我调用Shell 之前,我需要写这个文件。

如果我手动步进,看到文件出现在目录后,它工作。

我也将FTP输出传输到一个文件,并以类似的方式重新读取成功/失败消息,我也遇到了同样的问题。

有人有主意吗? 提前致谢!

Open temppath & "FTPcmd.txt" For Output As #2 Print #2, "user " & FSOUserName Print #2, FSOpw Print #2, "lcd " & temppath Print #2, "cd public_html" Print #2, "binary" Print #2, "mput " & Chr(34) & "index.htm" & Chr(34) Print #2, "cd .." Print #2, "cd public_ftp" Print #2, "mput " & Chr(34) & myfilename & Chr(34) Print #2, "bye" Close #2 Start = Timer FTPlooper: If Timer - Start > 30 Then saveme = 1: Text = Text & " FTP Failure": GoTo failpoint If Dir(temppath & "FTPcmd.txt") <> "" And IsFileOpen(temppath & "FTPcmd.txt") = False Then Shell "cmd /c ftp -n -i -g -s:" & temppath & "FtpCmd.txt " & FSOHostURL & ">" & temppath & "ftpout.txt 2>&1" Else GoTo FTPlooper End If 

这是我用来查看文件是否打开的function。

码:

 Function IsFileOpen(FileName As String)'http://www.vbaexpress.com/kb/getarticle.php?kb_id=468 Dim iFilenum As Long Dim iErr As Long On Error Resume Next iFilenum = FreeFile() Open FileName For Input Lock Read As #iFilenum Close iFilenum iErr = Err On Error GoTo 0 Select Case iErr Case 0: IsFileOpen = False Case 70: IsFileOpen = True Case Else: Error iErr End Select End Function 

FTPout.txt的输出:

打开脚本文件C:\ Users \ Theresa \ Downloads \ FTPcmd.txt时出错。

将文件传送到运行FTP服务器服务的计算机(有时称为守护进程)。 Ftp可以交互使用。

FTP [-v] [-d] [-i] [-n] [-g] [-s:文件名] [-a] [-A] [-x:sendbuffer] [-r:recvbuffer] [-b :asyncbuffers] [-w:windowsize] [host]

-v禁止显示远程服务器响应。 -n在初始连接时禁止自动login。 -i在多个文件传输过程中closures交互式提示。 -d启用debugging。 -g禁用文件名匹配(参见GLOB命令)。 -s:文件名
指定一个包含FTP命令的文本文件; 这些命令将在FTP启动后自动运行。 -a绑定数据连接时使用任何本地接口。 – 匿名login -x:send sockbuf覆盖8192的默认SO_SNDBUF大小。-r:recv sockbuf覆盖默认的SO_RCVBUF大小8192. -b:async count覆盖默认的asynchronous计数3 -w:windowsize覆盖默认传输缓冲区大小65535 。host指定要连接的远程主机的主机名或IP地址。

注意: – mget和mput命令是y / n / q是/否/退出。 – 使用Control-C来中止命令。