HERBERS Excel-Forum - das Archiv

Thema: ExecuteExcel4Macro - Netzlaufwerk trennen

ExecuteExcel4Macro - Netzlaufwerk trennen
dirknico
Ich möchte Daten aus einer Datei auf einem Netzlaufwerk auslesen.

- Netzlaufwerk verbinden
- Argumente bereitstellen
- ExecuteExcel4Macro ausführen

funktioniert ohne Probleme.

Jetzt soll am Ende das Netzlaufwerk aber auch wieder getrennt werden und da bekomme ich den Fehler
Es warten noch offene Dateien oder Anforderungen auf dieser Netzwerkverbindung

Das passiert nur wenn ich ExecuteExcel4Macro ausführen lassen.
Überspringe ich diese Anweisung kann das Netzlaufwerk ohne Probleme getrennt werden......
Was muss ich tun um den Fehler zu "umgehen"?
AW: ExecuteExcel4Macro - Netzlaufwerk trennen
Yal
Hallo Dirk,

stell Dir vor, Du liest diese Fragestellung und hast absolut keine Ahnung, ausser was da geschrieben steht.
Wie gehst Du mit einer solchen Frage um? Welche Information fehlen Dir, um eine qualifizierte Antwort zu geben?

VG
Yal
AW: ExecuteExcel4Macro - Netzlaufwerk trennen
dirknico
vielleicht hilft das dann.......

Public Function Netzlaufwerk_verbinden(strMyRemotePath, strUsername, strPassword)

Dim objNetzwerk As Object

Set objNetzwerk = CreateObject("WScript.Network")
objNetzwerk.MapNetworkDrive Laufwerk & ":", strMyRemotePath, False, strUsername, strPassword
Set objNetzwerk = Nothing
End Function


Sub Daten_lesen()

Dim Pfad As String, Datei As String, Tabelle As String
Dim Bereich As Range
Dim Quelle As Object, Ziel As Object
Dim Zelle, Zeile, Spalte

Netzlaufwerk_verbinden "\\P-7BLF324\BDE_Stanzerei", "Stanzerei 1", "Isringhausen2!Schrott"

Pfad = Laufwerk & ":"
Datei = "BDE_System.xlsm"
Tabelle = "System"
Set Bereich = Range("L3:O8")
Zeile = "B"
Spalte = "2"

For Each Quelle In Bereich
Zelle = Zeile & Spalte
Quelle = Quelle.Address(False, False)
ActiveSheet.Range(Zelle).Value = GetValue(Pfad, Datei, Tabelle, Quelle)
Zeile = Chr(Asc(Zeile) + 1)
If Zeile = "F" Then
Spalte = Spalte + 1
Zeile = "B"
End If
Next Quelle

Netzlaufwerk_trennen
End Sub


Private Function GetValue(Pfad, Datei, blatt, Zelle)

Dim arg As String

If Right(Pfad, 1) <> "\" Then Pfad = Pfad & "\"
If Dir(Pfad & Datei) = "" Then
GetValue = "datei Not Found"
Exit Function
End If

arg = "'" & Pfad & "[" & Datei & "]" & blatt & "'!" & Range(Zelle).Range("A1").Address(, , xlR1C1)

GetValue = ExecuteExcel4Macro(arg)
End Function


Public Function Netzlaufwerk_trennen()

Dim objNetzwerk As Object

Set objNetzwerk = CreateObject("WScript.Network")
objNetzwerk.RemoveNetworkDrive Laufwerk & ":"
Set objNetzwerk = Nothing
End Function
AW: ExecuteExcel4Macro - Netzlaufwerk trennen
Marc
Aber du setzt doch schon bei der Function Netzwerk verbinden, die Netzwerk Variable wieder auf Nothing.

zudem müsste es ein globales Objekt sein, damit es allgemein gültig ist und nicht wie hier jeweils lokale Variablen/Objekte, wenn ich das richtig überblicke..
AW: ExecuteExcel4Macro - Netzlaufwerk trennen
Yal
oha... Total in-the-blue geraten:

die Funktion "Dir()" setzt einen Pointer auf die Datei, um beim nächsten Aufruf den nächste Datei abzufragen. Vielleicht könnte es helfen, ein Dir auf einem lokalen Laufwerk zu setzen, sodass die Datei auf dem Netzlaufwerk wieder frei wird:

Private Function GetValue(Pfad, Datei, blatt, Zelle)

Dim arg As String

If Right(Pfad, 1) <> "\" Then Pfad = Pfad & "\"
If Dir(Pfad & Datei) = "" Then
GetValue = "datei Not Found"
Exit Function
End If
arg = "'" & Pfad & "[" & Datei & "]" & blatt & "'!" & Range(Zelle).Range("A1").Address(, , xlR1C1)
GetValue = ExecuteExcel4Macro(arg)
Dir("C:\abc.txt")
End Function


VG
Yal
AW: ExecuteExcel4Macro - Netzlaufwerk trennen
daniel
Hi
sieht umständlich aus.
du kannst diese Externen Zellbezüge doch auch als Formeln in die Zellen schreiben und dann die Formeln durch Werte ersetzen.
dann entfällt zumindest mal das GetValue und das ExcecuteExcel4Makro

du kannst die ganze Schleife "For Each Quelle in Bereich" durch dieses ersetzen:

with Range("B2:E7")

.Formula = "='" & Pfad & "\[" & Datei & "]" & Tabelle & "'!L3")
.Formula = .Value
end with


wenn die Pfade nicht zu lang sind, müsste das eigentlich auch ohne Mapping funktionieren oder brauchst du das wegen dem Passwordschutz?

Gruß Daniel
AW: ExecuteExcel4Macro - Netzlaufwerk trennen
dirknico
Danke!
Das funktioniert so

Klasse!
AW: ExecuteExcel4Macro - Netzlaufwerk trennen
dirknico
Das ganze funktioniert eigentlich, allerdings werden hier nicht die aktuellen Werte übernommen, sondern die Werte die zuletzt gespeichert wurden.
Habe ich irgendwie die Möglichkeit die aktuellen Zellinhalte auszulesen?
Oder aber die Möglichkeit den aktuellen Stand der Datei zu speichern ohne diese zu öffnen?
AW: ExecuteExcel4Macro - Netzlaufwerk trennen
daniel
aus einer externen Mappe können immer nur die Werte übernommen werden, die gespeichert wurden, anders geht es nicht, außer, du hast die Mappe selbst geöffnet.

wäre meiner Ansicht nach sowieso das einfachste.
Mappe öffnen, am besten Schreibgeschützt und dann kannst du beliebig die Werte daraus kopieren.
Gruß Daniel
AW: ExecuteExcel4Macro - Netzlaufwerk trennen
Ulf
Hi,
ich würde die Rückgabe dieser Funktion in eine Variable zwingen
Private Function GetValue(Pfad, Datei, blatt, Zelle)

Dim arg As String
Dim varRet as Variant
If Right(Pfad, 1) <> "\" Then Pfad = Pfad & "\"
If Dir(Pfad & Datei) = "" Then
GetValue = "datei Not Found"
Exit Function
End If

arg = "'" & Pfad & "[" & Datei & "]" & blatt & "'!" & Range(Zelle).Range("A1").Address(, , xlR1C1)

varRet = ExecuteExcel4Macro(arg)
GetValue=varRet
End Function

hth
Ulf
AW: ExecuteExcel4Macro - Netzlaufwerk trennen
daniel
Hi
und was wäre der funktionale Vorteil?
die Funktion ist innerhalb ihres Codes ja auch eine Variable
Gruß Daniel