|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
FTP访问代码有三种实现方式,总结如下技术特征,请大家根据实际情况选择使用。
方法一代码最简洁,
方法二与系统结合度高,运行稳定,代码复杂,
方法三代码简单但需要第三方控件支持
方法一 使用SHELL启动FTP命令- Sub 从FTP自动下载文件_SHELL()
- Dim strPNAME As String '参数文件名
- Dim nFNO As Integer '文件编号
- strPNAME = ThisWorkbook.Path & "\ftptest.txt" '文件名生成
- nFNO = FreeFile '获取空的文件号
- Open strPNAME For Output As #nFNO '生成新的文件
- Print #nFNO, "open plaza14.mbn.or.jp" 'open主机名
- Print #nFNO, "user ken3 XXXXXX←路径" 'user命令 用户名 密码
- Print #nFNO, "cd www"
- Print #nFNO, "pwd"
- Print #nFNO, "get index.html " & ThisWorkbook.Path & "\index.html"
- Close #nFNO '关闭
- 'shell启动FTP -n为参数
- Shell "ftp -n -s:" & strPNAME
- End Sub
- Sub 向FTP自动上传文件_SHELL()
- Dim strFILENAME As String
- strFILENAME = Application.GetOpenFilename
- Call ftp_upfile("ftp.xxxx.jp", "username", "pass", "data/pc/", strFILENAME)
- End Sub
- Sub ftp_upfile(strHNAME As String, _
- strUSERNAME As String, _
- strPASS As String, _
- strDIR As String, _
- strUPFILE As String)
- Dim strPNAME As String
- Dim nFNO As Integer
- strPNAME = ThisWorkbook.Path & "\ftppara.dat"
- nFNO = FreeFile
- Open strPNAME For Output As #nFNO
- Print #nFNO, "open " & strHNAME
- Print #nFNO, "user " & strUSERNAME & " " & strPASS
- Print #nFNO, "cd " & strDIR 'cd xxxx 进入待写目录
- Print #nFNO, "put " & strUPFILE 'put 上传文件
- Print #nFNO, "quit" '退出
- Close #nFNO
- Shell "ftp -n -s:" & strPNAME
- End Sub
复制代码 方法二 使用Win内置DLL进行FTP传输- Declare Function InternetOpen Lib "WinInet.DLL" Alias "InternetOpenA" (ByVal lpszAgent As String, ByVal dwAccessType As Long, ByVal lpszProxyName As String, ByVal lpszProxyBypass As String, ByVal dwFlags As Long) As Long
- Declare Function InternetConnect Lib "WinInet.DLL" Alias "InternetConnectA" (ByVal hInternet As Long, ByVal lpszServerName As String, ByVal nServerPort As Integer, ByVal lpszUsername As String, ByVal lpszPassword As String, ByVal dwService As Long, ByVal dwFlags As Long, ByVal dwContext As Long) As Long
- Declare Function FtpPutFile Lib "WinInet.DLL" Alias "FtpPutFileA" (ByVal hConnect As Long, ByVal lpszLocalFile As String, ByVal lpszNewRemoteFile As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean
- Declare Function InternetCloseHandle Lib "WinInet.DLL" (ByVal hInternet As Long) As Integer
- Const FTP_TRANSFER_TYPE_ASCII As Long = &H1 '文本模式
- Const FTP_TRANSFER_TYPE_BINARY As Long = &H2 '2进制模式
- Sub 从FTP自动下载文件_SHELL()
- Dim server As String
- Dim user As String
- Dim passwd As String
- Dim localFile As String
- Dim serverFile As String
- server = "ftp.server.jp" '主机名
- user = "user" '用户名
- passwd = "password" '密码
- localFile = "C:\test.xls" '本地文件
- serverFile = "/upload/zaiko/test.xls" 'FTP服务器端文件
- Dim hOpen As Long
- Dim hConnection As Long
- Dim result As Long
- Do
- hOpen = InternetOpen(server, 1, vbNullString, vbNullString, 0)
- If hOpen = 0 Then
- MsgBox "Open错误:" & Err.LastDllError
- Exit Do
- End If
- hConnection = InternetConnect(hOpen, server, 0, user, passwd, 1, 0, 0)
- If hConnection = 0 Then
- MsgBox "连接错误:" & Err.LastDllError
- Exit Do
- End If
- If FtpPutFile(hConnection, localFile, serverFile, FTP_TRANSFER_TYPE_BINARY, 0) = 0 Then
- MsgBox "传输错误:" & Err.LastDllError
- Exit Do
- End If
- Loop Until True
- If (hConnection <> 0) Then InternetCloseHandle hConnection
- If (hOpen <> 0) Then InternetCloseHandle hOpen
- MsgBox "成功鸟!"
- End Sub
复制代码 方法三 使用basp21DLL进行FTP传输- Sub 从FTP自动上传文件_basp21()
- Dim FTP, rc As Long, Server As String, User As String, Pass As String
- Dim Target As String, Folder As String
- Set FTP = CreateObject("basp21.FTP") ''FTP对象
- Server = "ftp.xxxxx.com" ''主机地址
- User = "toru_tanaka" ''用户名
- Pass = "password" ''密码
- Target = Application.GetOpenFilename() ''上传
- If Target = "False" Then Exit Sub
- Folder = "test/sub" ''上传文件夹
- rc = FTP.Connect(Server, User, Pass)
- If rc <> 0 Then
- MsgBox "FTP无法连接", vbCritical
- FTP.Close
- Exit Sub
- End If
- rc = FTP.PutFile(Target, Folder)
- If rc <> 1 Then
- MsgBox Dir(Target) & "无法上传", vbCritical
- FTP.Close
- Exit Sub
- End If
- MsgBox Dir(Target) & "上传成功", vbInformation
- FTP.Close
- End Sub
- Sub 从FTP自动下载文件_basp21()
- Dim FTP, rc As Long, Server As String, User As String, Pass As String
- Dim Target As String, Folder As String
- Set FTP = CreateObject("basp21.FTP")
- Server = "ftp.xxxxx.com"
- User = "toru_tanaka"
- Pass = "password"
- Folder = ThisWorkbook.Path & "\data" ''本地文件夹
- Target = "test/sub/sample.dat" ''下载文件名
- rc = FTP.Connect(Server, User, Pass)
- If rc <> 0 Then
- MsgBox "FTP无法连接", vbCritical
- FTP.Close
- Exit Sub
- End If
- rc = FTP.GetFile(Target, Folder)
- If rc <> 1 Then
- MsgBox "文件无法下载", vbCritical
- FTP.Close
- Exit Sub
- End If
- MsgBox "文件下载成功", vbInformation
- FTP.Close
- End Sub
复制代码
该贴已经同步到 xiamen168的微博 |
|