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

时间:2015-09-15 01:41:34

标签: excel vba excel-vba ftp

问题摘要:在需要调用命令文件时,尚未完成为FTP命令创建文本文件。它不会陷入"如果文件存在"。如何在继续代码之前确保创建文件?

详细信息:我正在处理Excel工作簿中的部分代码以FTP某些文件。为此,我通过包含FTP命令的代码创建FTPcmd.txt文件,关闭文件,然后在CMD窗口中炮制FTP命令。看起来命令文件花了太长时间才能完成写入,因此,我得到了一个" Permission Refused"错误。 FTP日志显示"错误打开脚本文件C:\ temp \ FTPcmd.txt。"我错误检查以查看文件是否存在,但我认为该文件在open语句后显示为现有,而不是关闭。我没有点击DIR<>""中的else语句。 IsFileOpen函数在"http://www.vbaexpress.com/kb/getarticle.php?kb_id=468 VBA Express : Excel - Check If a File Is Already Open"

上找到

我不相信这是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 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:filename] [-a] [-A] [-x:sendbuffer]   [-r:recvbuffer] [-b:asyncbuffers] [-w:windowsize] [host]

     

-v禁止显示远程服务器响应。 -n   在初始连接时禁止自动登录。 -i转   在多个文件中关闭交互式提示                     传输。 -d启用调试。 -g禁用文件名通配(请参阅GLOB命令)。 -s:文件名
  指定包含FTP命令的文本文件;该                     FTP启动后会自动运行命令。 -a绑定数据连接时使用任何本地接口。 - 以匿名身份登录。 -x:send sockbuf覆盖默认的SO_SNDBUF大小8192. -r:recv sockbuf覆盖   默认SO_RCVBUF大小为8192. -b:async count覆盖   默认异步计数为3 -w:windowsize覆盖默认值   传输缓冲区大小为65535. host指定主机   遥控器的名称或IP地址                     主机连接到。

     

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

0 个答案:

没有答案