VBA Excel:通过WinINet的FTP GetFile

时间:2014-12-13 04:04:11

标签: vba excel-vba ftp excel

我正在尝试使用FTP下载操作来使用VBA Excel(在Excel 2013 x64,Windows 7 SP1 x64上)。我找到了一些映射到WinInet API的代码,我可以使用PutFile函数成功上传文件,但我希望得到一个GetFile函数。

为了让我的工作到目前为止,我使用了以下内容:second answer herelink。我一直在使用SO的第二个答案来让PutFile工作。我不得不对原始代码进行一些更改,使其与32位和64位系统兼容。

您可以看到我的进度here

我要做的是制作一个易于使用的Sub来调用此声明:

Private Declare Function FtpGetFile Lib "WinInet" Alias "FtpGetFileA" (ByVal hFtp As Long, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Long, ByVal dwFlagsAndAttributes As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long

即。像这样的子:

Public Sub GetFile(RemoteFilename As String, LocalFilename As String)
    If FtpGetFile(' what arguments do I put here ') = 0 Then
        Err.Raise vbObjectError + 1, , LastError
    End If
End Sub

我很挣扎,因为我对WinInet API不太熟悉,并且在解析所需的参数时遇到困难,以及为这些参数传递的适当变量是什么。

1 个答案:

答案 0 :(得分:2)

根据提供的示例,这可以帮助您开始正确的道路。

在您的课程模块中:

Public Sub GetFile(RemoteFilename As String, NewFilename As String)
    If FtpGetFile(m_hFtp, RemoteFilename, NewFilename, False, 0, FTP_TRANSFER_TYPE_BINARY, 0) = 0 Then
        Err.Raise vbObjectError + 1, , LastError
    End If
End Sub

如何称呼它:

Sub DownloadFile()
    Dim ftp As New CFtp
    ftp.Connect "serverAddress", "username", "password"
    ftp.GetFile "nameOfFileOnServer.txt", "C:\SomePath\nameOfNewFile.txt"
    ftp.Disconnect
End Sub

参数指定与下载文件关联的一些属性。例如,fFailIfExistsBoolean,用于描述在尝试覆盖已存在的本地文件时是否抛出异常。其他标志指定要附加到其创建的文件的属性。