Excel / 如何使用VBA連線FTP 2

Excel / 如何使用VBA連線FTP 提供了2種透過windows內建ftp程式的連線方式

但是這可能會因為ftp伺服器的關係而無法使用

例如採取加密的ftp伺服器就會因為無法連線而不能夠使用

所以再次爬文,尋找可以在命令列介面(Command-line interface)執行,並且可以使用安全性設定的ftp程式

後來找到WinSCP,可以用命令列(Command-Line)來執行

而且這個程式也提供COM 物件的DLL檔案

因此也可以在C#、VB.net、VBA、PowerShell中使用

本篇先介紹單純使用winscp.com在命令列介面的使用方式

1.先安裝 winscp

會將winscp.com綁進環境變數

2.修改原本的程式

以下的程式碼是連接到使用外顯TLS加密的ftp主機

 

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub FTP_SHELL5()
    Dim strPNAME As String                                               '參數文件名
    Dim fingerprint As String                                            '文件編號
    strPNAME = ThisWorkbook.Path & "\ftptest.txt"  '文件名生成
    
    fingerprint = "*************************************************"    'TLS SHA
    
    Dim fsT As Object
    Set fsT = CreateObject("ADODB.Stream")
    fsT.Type = 2 'Specify stream type - we want To save text/string data.
    fsT.Charset = "utf-8" 'Specify charset For the source text data.
    fsT.Open 'Open the stream And write binary data To the object
    fsT.WriteText "open ftpes://主機名稱-certificate=" & fingerprint & " -rawsettings ProxyPort=0" & Chr(10) '& Chr(13)
    fsT.WriteText "帳號" & Chr(10) '& Chr(13)
    fsT.WriteText "密碼" & Chr(10) '& Chr(13)
    fsT.WriteText "cd WWW" & Chr(10) '& Chr(13)   '切換到WWW
    fsT.WriteText "cd shares" & Chr(10) '& Chr(13)'切換到shares
    fsT.WriteText "get Screenshot_1.jpg " & """" & ThisWorkbook.Path & "\" & """" & Chr(10) '& Chr(13) '下載檔案
    fsT.WriteText "close" & Chr(10) '& Chr(13)
    fsT.WriteText "exit" & Chr(10) '& Chr(13)
    fsT.SaveToFile strPNAME, 2 'Save binary data To disk

    Application.Wait (Now + TimeValue("0:00:01")) '程式暫停
	
    Shell "winscp.com /ini=nul /script=" & """" & strPNAME & """", 3 '執行命令
    
    Application.Wait (Now + TimeValue("0:00:03")) '程式暫停  避免還沒下載檔案就刪除命令檔
    
    Dim xFile As String
    xFile = Dir(strPNAME)
    
    'Debug.Print xFile    
    If xFile <> "" Then
        Kill strPNAME
    End If
End Sub

 

3.補充說明

1)為了避免寫出的txt檔變成亂碼,因此改用ADODB.Stream物件來生成txt

指定編碼格式為utf-8的文件檔

2)程式碼也可以從 winscp視窗介面中取得

 

 

也是透過這裡的程式碼才知道,要改用ftpes,以及TLS的sha碼應該如何設定