Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1120to1124
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

resume.xlw vermeiden

resume.xlw vermeiden
Brigitte
Hallo zusammen,
ich habe ein kleines Problem:
Um ein konsistentes Versions-Management zu gewährleisten, soll das Workbook bei größeren Fehlern automatisiert (also mit einem vorgegebenen Namen) abgespeichert werden.
Hierzu mein Code:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error Resume Next
Dim Canc As Boolean
Datenstand = Range("Datum")
Application.DisplayAlerts = False
If Datenstand  ExportDate Or FileUser  Application.UserName Then
Canc = Application.Dialogs(xlDialogSaveAs).show(DateiName)
If Canc = False Then End
Else: Application.Save
End If
Application.DisplayAlerts = True
End Sub
Leider erstellt Excel immer wieder eine resume.xlw-Datei (dachte eigentlich, das wäre mit Application.DisplayAlerts=False ausgeschaltet), wäre ja grundsätzlich egal, aber da der Nutzer gefragt wird, ob er die vorhandene ersetzen will, ziemlich lästig...
Kann mir jemand helfen?
Danke schonmal,
Brigitte

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Mehrere Fehler...
26.11.2009 20:52:42
Ramses
Hallo
... welche die Fehersuche erschweren.
1. Schalte mal das "On error resume next" ab.
Damit bleibt EXCEL nämlich automatisch dort stehen, wo ein Fehler auftritt
2. Variablen Deklaration !!!! ist Pflicht,.. vor allem wenn "VBA Gut"
Die Variable "Dateiname" für den SaveAs-Dialog existiert nicht und hat keinen Wert
3. FileUser und Application.Username macht keinen Sinn.
In Unternehmen steht in 99.999% das Unternehmen als "Application.Username" in EXCEL.
Den aktuellen Benutzer kannst du damit sicher nicht bestimmen. Das geht nur über die Variable Environ("Username") welche den angemeldeten Benutzer am System zurückgibt
4. Und wenn schon was nicht funktionert, dann auf jeden alles abschalten welche Fehlermeldungen unterdrücken. Also auch "Application.DisplayAlerts = False"
Gruss Rainer
Anzeige
AW: Mehrere Fehler...
27.11.2009 08:14:55
Brigitte
Hallo,
die Variablen sind natürlich deklariert, wollte nur nicht den ganzen Wust außerhalb angeben, auch Dateiname ist natürlich belegt...
In beiden Unternehmen, in denen das Programm benutzt wird, ist der tatsächliche Nutzer der Application.User (wurde bereits in einigen anderen Dateien so ausgeführt)...
"Application.DisplayAlerts=False" hab ich erst nachträglich eingefügt in der Hoffnung, dadurch diese resume.xlw-Datei nicht mehr anzulegen...
Wenn es gewünscht ist, dann hier der gesamte Code, der damit zusammenspielt:

Option Explicit
Public ExportDate As Date
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
On Error Resume Next
Dim Canc As Boolean
Datenstand = Range("Datum")
Application.DisplayAlerts = False
If Datenstand  ExportDate Or FileUser  Application.UserName Then
Canc = Application.Dialogs(xlDialogSaveAs).show(DateiName)
If Canc = False Then End
Else: Application.Save
End If
Application.DisplayAlerts = True
End Sub
Private Sub Workbook_Open()
ExportDate = Range("Datum")
End Sub
____________________________________________________________________________________
Option Explicit
Dim SheetName As String, stateStr As String
Dim ExportDatum As Date, DatenDatum As Date
Dim projekt As String
Public Property Let stateText(str As String)
stateStr = str
End Property
Public Property Get stateText() As String
stateText = stateStr
End Property
Public Property Let Datenstand(i As String)
ExportDatum = i
End Property
Public Property Get Datenstand() As String
Datenstand = ExportDatum
End Property
Public Property Get DNRS() As String
DNRS = Left(ThisWorkbook.name, InStr(ThisWorkbook.name, ".") - 1)
DNRS = Right(DNRS, Len(DNRS) - (InStr(DNRS, "_")))
DNRS = Left(DNRS, InStrRev(DNRS, "_") - 1)
End Property
Public Property Get ExportTag() As String
ExportTag = Left(Datenstand, InStr(Datenstand, ".") - 1)
End Property
Public Property Get ExportMonat() As String
ExportMonat = Left(Right(Datenstand, InStrRev(Datenstand, ".") + 1), InStr(Right(Datenstand,  _
_
InStrRev(Datenstand, ".") + 1), ".") - 1)
End Property
Public Property Get ExportJahr() As String
ExportJahr = Right(Datenstand, InStr(Datenstand, ".") + 1)
End Property
Public Property Get ProjektStr() As String
If Worksheets(newSheet).Range("projekt") Like "*AU*" Then
ProjektStr = "Projekt1"
Else: ProjektStr = "Projekt2"
End If
End Property
Public Property Get FileUser() As String
FileUser = Right(Left(ThisWorkbook.name, InStr(ThisWorkbook.name, ".") - 1), Len(Left( _
ThisWorkbook.name, InStr(ThisWorkbook.name, ".") - 1)) - InStrRev(Left(ThisWorkbook.name, InStr( _
_
ThisWorkbook.name, ".") - 1), "_"))
End Property
Public Property Get FileProjektStr() As String
FileProjektStr = Right(Left(DNRS, InStrRev(DNRS, "_") - 1), Len(Left(DNRS, InStrRev(DNRS, "_" _
_
) - 1)) - InStr(DNRS, "_"))
End Property
Public Property Get FileStarter()
FileStarter = Left(DNRS, InStr(DNRS, "_") - 1)
End Property
Public Property Get FileVersion() As String
FileVersion = Right(Right(DNRS, Len(DNRS) - InStr(DNRS, "_")), Len(Right(DNRS, Len(DNRS) -    _
_
InStr(DNRS, "_"))) - InStr(Right(DNRS, Len(DNRS) - InStr(DNRS, "_")), "_"))
End Property
Public Property Get DateiName() As String
DateiName = ExportJahr & ExportMonat & ExportTag & "_" & _
FileStarter & "_" & ProjektStr & "_" & FileVersion & "_" & Application.UserName & ".xls"
End Property

Ich hoffe, dass ich alles gefunden habe...
Gruß, Brigitte
Anzeige
AW: Mehrere Fehler...
29.11.2009 15:06:55
fcs
Hallo Brigitte,
durch die relativ komplizierte/unübersichtliche Art den Dateinamen zu generieren war es nicht so ganz einfach den Ablauf beim Speichern zu verfolgen.
Wenn deine Prozeduren zum Generieren des beim Speichern vorgeschlagenen Dateinamens korrekt funktionieren, dann müßtest du deine Workbook_BeforeSave Prozedur etwa wie in der Datei anpassen.
Wichtig ist, dass die Ereignis-Makros vor dem Anzeigen des Speichern Dialogs deaktiviert werden, da es sonst zu einem erneuten Aufruf der Before_Save-Prozedur kommt. Zusätzlich sollte der ursprünglich gestartetet Speichervorgang dann storniert werden. Die Fehlerbehandlung ist jetzt so, dass ggf. eine Meldung angezeigt wird.
Ein paar andere Kleinigkeiten in deinen Get Property Prozeduren sind nicht ganz optimal.
- Die Property Datenstand wird von dir als String verwaltet, obwohl es sich eigentlich um ein Datum handelt.
- Die Methoden zur Ermittlung von Export-Jahr, -Monat und -Tag sind etwas umständlich.
- Bis zu 9 mal wird in einer Zeile die Property Anweisung aufgerufen.
Hier scheint mir die Zuwesiung des Werts an eine Variable sinnvoller. Prozedur wird auch schneller.
- Die Verwending der With Anweisung spart manchmal auch Platz.
Gruß
Franz
Wegen der der Länge Code als kleine Text-Datei.
https://www.herber.de/bbs/user/66256.txt
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige