Access:
SFTP using in MS Office vba
Wenn man sftp in
einer Microsoft Access oder Excel Anwendung einbinden möchte, dann muss man den
Verweis in Visual Basic erstellen.
Hierzu muss man das Packet winscp576automation.zip downloaden. Diese erhält man im Link
.NET
assembly / COM library (4.6 MB)
unter http://winscp.net/eng/download.php#download2
Diese enthält die WinSCP.exe
und die WinSCPnet.dll aus welchen in
einem weiteren Schritt ein Verweis für die COM
Elemente in Visual Basic erzeugt werden kann.
Diese Dateien kann man entweder zum Verzeichnis mit dem
Office Programm legen und von dort anbinden und verteilen oder man kann die
Datei zum zentralen Programm unter c:\programs (86)
Bereitstellen
für Verweise unter Microsoft Office Visual Basic
Damit man diese zwei Dateien jetzt auch nutzen kann unter Microsoft
Access oder Excel oder Word
muss man die Verweise einbinden können in vba Microsoft
Visual Basic
Diese sind aber erst nach der folgenden Registrierung als Administrator sichtbar und erreichbar für die
App:
Zur Registrierung der winSCP sftp für Verweise muss man erst
die Eingabeaufforderung als Administrator öffnen.
Hierzu den Windows Start-Button mit der rechten Maustaste
und dann auf Eingabeaufforderung
(Administrator) auswählen
Eingabeaufforderung
Schritt 1: Verzeichnis
zu winSCP Files ändern:
Mit CD für Change Directory den aktuellen Pfad zur den
Dateien ändern, wo sich die WinSCP.dll befindet
cd C:\_Daten\Desktop\Demo\Access\25_Access_SFTP
|
Schritt 2: Registrierung mit RegAsm
Mit
RegAsm wird die winSCPnet.dll als sichtbarer Verweis in Microsoft Office
Anwendungen registriert
Hierzu
muss man nun in der Eingabeaufforderung den folgenden Befehl eingeben
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe
WinSCPnet.dll /codebase /tlb:WinSCPnet32.tlb
|
Registrierung in der Eingabeaufforderung:
Microsoft Windows
[Version 10.0.10586]
(c) 2015 Microsoft
Corporation. Alle Rechte vorbehalten.
C:\WINDOWS\system32>cd
C:\_Daten\Desktop\Demo\Access\25_Access_SFTP
C:\_Daten\Desktop\Demo\Access\25_Access_SFTP>%WINDIR%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe
WinSCPnet.dll /codebase /tlb:WinSCPnet32.tlb
Microsoft .NET
Framework Assembly Registration Utility 4.6.1038.0
für Microsoft .NET
Framework, Version 4.6.1038.0
Copyright (C)
Microsoft Corporation. Alle Rechte vorbehalten.
Die Typen wurden
registriert.
Die Assembly wurde
nach "C:\_Daten\Desktop\Demo\Access\25_Access_SFTP\WinSCPnet32.tlb"
exportiert, und die Typbibliothek wurde registriert.
C:\_Daten\Desktop\Demo\Access\25_Access_SFTP>
|
Einbindung Verweis in Microsoft Office
Jetzt kann man den Verweis unter Microsoft Access in der
Code-seite in Visual Basic einbinden.
Hierzu auf Extras->Verweise
Und dann den Verweis suchen und markieren: WinSCP
scripting interface .NET wrapper
Verwendung von Code in vba:
http://winscp.net/eng/docs/library_vb
Die verfügbaren Objekte für
die Programmierung von winSCP findet man in dem Objektkatalog (Objektlibrary)
Allerdings sind hier nur die Enumerationen und Events
aufgeführt
Code-Beispiel vba zu sftp
' Shell variant
' WinSCP console interface .NET wrapper
' http://winscp.net/eng/docs/library_vb
Private Sub fl_Download_SFTP()
'--------<
fl_Download_SFTP() >--------
'sftp-Session
Dim mySession As New session
' Enable custom error
handling
On Error Resume Next
'< get FileExplorer
Functions >
' Setup session options
Dim mySessionOptions As New SessionOptions
With mySessionOptions
.Protocol = Protocol_Sftp
.HostName = "example.com"
.UserName = "user"
.Password = "password"
.SshHostKeyFingerprint = "ssh-rsa 2048
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx"
End With
'</ get FileExplorer
Functions >
' Connect
mySession.Open mySessionOptions
Dim directoryInfo As RemoteDirectoryInfo
Set directoryInfo =
mySession.ListDirectory("/home/user/")
' '
Upload files
' Dim
myTransferOptions As New TransferOptions
'
myTransferOptions.TransferMode = TransferMode_Binary
'
' Dim
transferResult As TransferOperationResult
' Set transferResult
= mySession.PutFiles("d:\toupload\*", "/home/user/",
False, myTransferOptions)
'
' ' Throw
on any error
'
transferResult.Check
'
' '
Display results
' Dim
transfer As TransferEventArgs
' For
Each transfer In transferResult.Transfers
'
MsgBox "Upload of " & transfer.FileName & "
succeeded"
' Next
'--< Abschluss >--
' Query for errors
If Err.Number <> 0 Then
MsgBox "Error: " & Err.Description
' Clear the error
Err.Clear
End If
' Disconnect, clean up
mySession.Dispose
' Restore default error
handling
On Error GoTo 0
'--</ Abschluss >--
'--------</
fl_Download_SFTP() >--------
End Sub
|