ich möchte gern eine Textdatei auslesen, die sich auf einem
Server im Netzwerk befindet. Gibt es eine Möglichkeit,
zusätzlich zu der Pfadangabe, also z.B. Open
\192.168.160.50\C\test.txt, auch das Passwort und den
Benutzernamen für den Server mitzusenden, so dass Excel keine
Fehlermeldung ausgibt und der Dialog zur Aufforderung der
Eingaben unterbunden wird?
Hi Achim,
ich habe kein Netzwerk, kann also nichts testen, aber scheinbar ist es nicht ganz so einfach. Folgender Code ist nur allein für die Verbindung und Trennung mit dem Netzlaufwerk, da haste noch kein Stück der Datei gelesen.
Und es ist VB-Code, kein Vba, also noch gar nicht sicher ob es überhaupt so in Vba läuft.
Quelle: http://msdn2.microsoft.com/de-de/library/bb979449.aspx
Gruß
Reinhard
Public Function MapNetworkDrive2(ByVal UNCPath As String, \_
ByVal LocalPath As String, \_
Optional ByVal UserName As String, \_
Optional ByVal Password As String, \_
Optional ByVal Persistent As Boolean \_
) As Boolean
' Versucht, ein freigegebenes Verzeichnis im Netzwerk (UNCPath)
' als lokales Netzwerklaufwerk (LocalPath) einzubinden. Im Fall
' kennwortgeschützter freigegebener Verzeichnisse im Netzwerk
' kann im Parameter Password ein Kennwort übergeben werden.
' Wird in Username kein Benutzername übergeben, wird der Name
' des angemeldeten Benutzers verwendet. Wird der Parameter
' Persistent zu True gesetzt so wird nach einem Systemneu-
' start versucht, die Verbindung erneut herzustellen.
Dim NetR As NETRESOURCE
Dim lResult As Long
Dim lPersist As Long
' LocalPath muss ein Buchstabe plus Doppelpunkt sein:
LocalPath = Left$(LocalPath, 1) & ":"
' NETRESOURCE-Struktur belegen:
With NetR
.dwType = RESOURCETYPE\_DISK
.lpRemoteName = UNCPath
.lpLocalName = LocalPath
End With
' Persistenz-Parameter berücksichtigen:
If Persistent Then
lPersist = CONNECT\_UPDATE\_PROFILE
End If
' Pfad als Netzwerklaufwerk einzubinden versuchen
lResult = WNetAddConnection2(NetR, Password, UserName, lPersist)
' Prüfung auf Erfolg anhand des Rückgabewerts:
If lResult = NO\_ERROR Then
' Aktion erfolgreich
MapNetworkDrive2 = True
Else
' Ausführung war nicht möglich. Den Rückgabewert können Sie
' auswerten wie im folgenden MSDN Quickie gezeigt wird:
' "API Fehlermeldungen im Klartext"
End If
End Function
Private Function UnmapNetworkDrive2(ByVal Name As String, \_
Optional ByVal Force As Boolean = True, \_
Optional ByVal Persistent As Boolean \_
) As Boolean
' Versucht, ein Netzwerklaufwerk abzumelden. Name ist dabei der
' lokal vergebene Laufwerksbuchstabe. Wird Force zu True gesetzt,
' werden mögliche Probleme ignoriert (ggf. "auf Kosten" eines
' Netzwerkteilnehmers). Wird Persistent zu True gesetzt, wird
' eine beim Anmelden vorgesehene Verbindungswiederherstellung
' nach Neustart deaktiviert.
Dim lPersist As Long
Dim lResult As Long
' Persistenz-Parameter berücksichtigen:
If Persistent Then
lPersist = CONNECT\_UPDATE\_PROFILE
End If
' Netzwerkverbindung aufheben:
lResult = WNetCancelConnection2(Name, Persistent, CLng(Force))
' Erfolgsauswertung:
If lResult = NO\_ERROR Then
' Aufruf verlief erfolgreich
UnmapNetworkDrive2 = True
Else
' Ausführung war nicht möglich. Den Rückgabewert können Sie
' auswerten wie im folgenden MSDN Quickie gezeigt wird:
' "API Fehlermeldungen im Klartext"
End If
End Function
' ANWENDUNGSBEISPIEL:
' -------------------
Private Sub Command1\_Click()
Dim UNCPath As String ' UNC-Pfad im Netzwerk
Dim LocalDrive As String ' Lokaler Laufwerksbuchstabe
' Parameter definieren
UNCPath = "\\MYSERVER\Public"
LocalDrive = "Q"
' Netzwerklaufwerk einzubinden versuchen
If MapNetworkDrive2(UNCPath, LocalDrive) Then
' MapNetworkDrive war erfolgreich.
' Erfolg an den Anwender melden
MsgBox "Der Pfad " & \_
vbNewLine & UNCPath & vbNewLine & \_
"wurde erfolgreich als Laufwerk " & LocalDrive & \_
" eingebunden.", \_
vbCritical, \_
"Netzwerklaufwerk einbinden"
Else ' MapNetworkDrive war nicht erfolgreich.
' Fehlermeldung (hier exemplarisch nur mit Fehlernummer)
MsgBox "Beim Einbinden des Pfades " & \_
vbNewLine & UNCPath & vbNewLine & \_
"trat der Fehler Nr. " & \_
CStr(Err.LastDllError) & " auf.", \_
vbCritical, \_
"Netzwerklaufwerk einbinden"
End If
End Sub
Private Declare Function WNetAddConnection Lib "mpr.dll" \_
Alias "WNetAddConnectionA" (ByVal lpszNetPath As String, \_
ByVal lpszPassword As String, ByVal lpszLocalName As String) \_
As Long
Private Sub Command1\_Click()
l = WNetAddConnection("\\PC-Name\Freigabename", "", "E:")
If L 0 Then MsgBox "Fehler beim Verbinden !", vbCritical
End Sub
'für passwortgeschützte Freigaben:
'l = WNetAddConnection("\\PC-Name\Freigabename", "Passwort", "E:")