Hallo Experten,
ich hab ein kleines VBA-Script geschrieben, das ich einfach nicht verstehe… -.-
Szenario: 2 Leute sollen eine Datei bearbeiten können. Der Speicherort ist shared. Die Exceldatei hat ein Schreibkennwort, kann aber nicht vor unbefugter Löschung geschützt werden…
Um zu verhindern, dass jemand „save as“ macht und unsere Daten überschreibt hab ich ein Script geschrieben, das ein Backup auf dem Server und lokal speichern soll.
das tut es soweit auch - aber mit Einschränkungen…
Ist vom aktuellen Tag keine Datei vorhanden, dann wird diese völlig korrekt angelegt - sowohl lokal als auch auf dem Server.
Ist die Datei allerdings schon vorhanden, dann wird die Datei nur noch an dem Ort gespeichert, von dem aus sie geöffnet wurde.
Normalerweise würde ich erwarten, dass nachgefragt wird ob ich die Datei überschreiben will, aber das geschieht nicht…
Worin liegt der Fehler?
Hier mein kleines Makro:
Sub backup\_speichern()
On Error Resume Next 'Fehler beim Verzeichniswechsel verhindern...
ChDir ("D:\_DATA") ' Ingos verzeichnis
ChDir ("D:\Save\Badminton") ' Michis Verzeichnis
' erstellen des Dateinamens
datum = Date
sorted = "Badminton\_" & Mid$(datum, 7, 4) & "-" & Mid$(datum, 4, 2) & "-" & Mid$(datum, 1, 2) & ".xls"
' lokales speichern
savename = CurDir & "\" & sorted
ActiveWorkbook.SaveAs Filename:=savename, FileFormat:=xlNormal, CreateBackup:=False
' überprüfung
check = ThisWorkbook.FullName
If check = savename Then
Msg = "Backup erfolgreich..." & Chr(10) & Chr(10)
Else
Msg = "Lokale Speicherung gescheitert..." & Chr(10) & Chr(10)
End If
' speichern im Netz...
serverpath = "\\de.local\data\filetransfer\Huber\"
serversavename = serverpath & sorted
ActiveWorkbook.SaveAs Filename:=serversavename, FileFormat:=xlNormal, CreateBackup:=False
' überprüfung
check = ThisWorkbook.FullName
If check = serversavename Then
messi = Msg & "Netzspeicherung erfolgreich..."
Else
messi = Msg & "Netzspeicherung gescheitert..."
End If
MsgBox messi
End Sub
vielen Dank
Munich
Hallo Munich,
Ist vom aktuellen Tag keine Datei vorhanden, dann wird diese
völlig korrekt angelegt - sowohl lokal als auch auf dem
Server.
Ist die Datei allerdings schon vorhanden, dann wird die Datei
nur noch an dem Ort gespeichert, von dem aus sie geöffnet
wurde.
Ist mir ein bisschen unklar.
Du öffnest lokal, also ist sie ja dann wohl lokal vorhanden*g, dann wird sie da ja auch gespeichert wie gewünscht!?
Aber sie wird dann nicht im Netz gespeichert wenn sie dort schon ist?
Kannst du mal eine Tabelle basteln mit allen 8 Möglichkeiten
GeöffnetIn Netzvorhanden lokalvorhanden lokalgespeichert Netzgespeichert
lokal nein nein
lokal nein ja
lokal ja nein
lokal ja ja
Netz nein nein
Netz nein ja
Netz ja nein
Netz ja ja
Normalerweise würde ich erwarten, dass nachgefragt wird ob ich
die Datei überschreiben will, aber das geschieht nicht…
Worin liegt der Fehler?
DisplayAlerts ist True?
Diesen Code finde ich übersichtlicher:
Dim mldg As String
Sub backup\_speichern2()
On Error Resume Next 'Fehler beim Verzeichniswechsel verhindern...
'ChDir ("D:\_DATA") ' Ingos verzeichnis
ChDir ("D:\Save\Badminton") ' Michis Verzeichnis
' erstellen des Dateinamens
datum = Date
sorted = "Badminton\_" & Mid$(datum, 7, 4) & "-" & Mid$(datum, 4, 2) & "-" & Mid$(datum, 1, 2) & ".xls"
Call speichern("D:\Save\Badminton\" & sorted, "Lokale Speicherung")
Call speichern("\\de.local\data\filetransfer\Huber\" & sorted, "Netzspeicherung")
MsgBox mldg
End Sub
Sub speichern(savename As String, messi As String)
ActiveWorkbook.SaveAs Filename:=savename, FileFormat:=xlNormal, CreateBackup:=False
mldg = meldg & IIf(ThisWorkbook.FullName = savename, messi & " erfolgreich." & Chr(10) & Chr(10), messi & " gescheitert." & Chr(10) & Chr(10))
End Sub
Gruß
Reinhard
Hi Reinhard,
Du öffnest lokal, also ist sie ja dann wohl lokal vorhanden*g,
dann wird sie da ja auch gespeichert wie gewünscht!?
Aber sie wird dann nicht im Netz gespeichert wenn sie dort
schon ist?
nein nein, die ist nicht immer vorhanden…
ich öffne ja z.B. die Datei
Badminton 2006-01-09.xls
und sobald ich mein Makro starte speichert es eine neue Datei
Badminton 2006-01-12.xls (heute eben)
Kannst du mal eine Tabelle basteln mit allen 8 Möglichkeiten
GeöffnetIn Netzvorhanden lokalvorhanden lokalgespeichert
Netzgespeichert
lokal nein nein
lokal nein ja
lokal ja nein
lokal ja ja
Netz nein nein
Netz nein ja
Netz ja nein
Netz ja ja
ich versteh nicht so ganz…
im prinzip ist es immer das gleiche
da wo ich die Datei öffne, da wird sie auch gespeichert.
Auf dem anderen Ort aber nicht - ausser wenn es eine Datei mit diesem Namen noch nicht gibt…
Normalerweise würde ich erwarten, dass nachgefragt wird ob ich
die Datei überschreiben will, aber das geschieht nicht…
Worin liegt der Fehler?
DisplayAlerts ist True?
nicht explizit ausgeführt, nachdem aber für den ersten Pfad nachgefragt wird gehe ich davon aus, dass es true ist.
Aber ich werds nachher mal reinschreiben…
Diesen Code finde ich übersichtlicher:
Dim mldg As String
Sub backup_speichern2()
On Error Resume Next 'Fehler beim Verzeichniswechsel
verhindern…
'ChDir („D:_DATA“) ’ Ingos verzeichnis
ChDir („D:\Save\Badminton“) ’ Michis Verzeichnis
’ erstellen des Dateinamens
datum = Date
sorted = „Badminton_“ & Mid$(datum, 7, 4) & „-“ &
Mid$(datum, 4, 2) & „-“ & Mid$(datum, 1, 2) & „.xls“
Call speichern(„D:\Save\Badminton“ & sorted, „Lokale
Speicherung“)
Call speichern("\de.local\data\filetransfer\Huber" &
sorted, „Netzspeicherung“)
MsgBox mldg
End Sub
Sub speichern(savename As String, messi As String)
ActiveWorkbook.SaveAs Filename:=savename,
FileFormat:=xlNormal, CreateBackup:=False
mldg = meldg & IIf(ThisWorkbook.FullName = savename, messi & "
erfolgreich." & Chr(10) & Chr(10), messi & " gescheitert." &
Chr(10) & Chr(10))
End Sub
werd ich nachher gleich mal probieren…
danke dafür schon mal
Grüsse
Munich
argh, ich verstehs nicht…
Hi nochmal…
ich hab jetzt noch ein wenig rumprobiert…
und auch so wie Du es vorschlägst klappt es nicht.
Hab auch extra nochmal die Displayalerts = true gesetzt…
es ist trotzdem genauso wie davor…
ich hab dann nochmal ein Makro aufgezeichnet, das die beiden Dateien nacheinander speichert - mit festem Namen und festem Pfad - nur zum Test damit ich das ON ERROR rausnehmen konnte…
und schon wird mir eine Fehlermeldung angezeigt…
Ich frag mich nur: WARUM?
Wenn ich das Makro normal aufzeichne bekomme ich auch keine Warnung „Datei ist schreibgeschützt“ - alles funktioniert…
Aber wenn ich das Makro ausführe bekomme ich eben genau diese Warnung. Diese aber zweimal…
ich muss mal suchen wie ich prüfe, ob eine Datei schon vorhanden ist und diese dann vorher lösche… vielleicht klappt das dann ja… -.-
Danke
ok… gelöst…
ob gut oder nicht ist die Frage…
ich mach jetzt zusätzlich noch vorher einen chDrive auf das gemappte Netzlaufwerk bzw auf die lokale festplatte und lösche die Datei bevor ich sie speichere mit
kill (filename)
nu scheint es zu klappen…
Danke nochmal an Reinhard