Wir wünschen allen Forenteilnehmern ein frohes Fest und einen guten Rutsch ins neue Jahr. x

Automatisches Speichern der Datei
#1

.docm   Dok1-20230804.docm (Größe: 20,21 KB / Downloads: 1)
Hallo CEF,

Das im Anhang enthaltene Makro "Beenden" bietet drei Möglichkeiten:
--Abbrechen (Makrobearbeitung wird beendet)
--NICHT speichern, Makro abbrechen, Datei schließen
--SPEICHERN

Bei Anwahl von SPEICHERN gibt es 2 Möglichkeiten:
Sofern die Datei heute noch nicht gespeichert wurde, erfolgt die automatische Speicherung SCHREIBGESCHÜTZT unter dem aktuellen Tagesdatum

Die mitgesandte Datei wurde unter "Dok1-20230804.docm" gespeichert.
Wenn diese Datei am darauffolgenden Tag gespeichert wird, denn lautet der Dateinamen "Dok1-20230805.docm"

Falls die Datei heute jedoch bereits bearbeitet und gespeichert wurde, soll sie erneut unter dem heuti-gen Datum automatisch (ohne Rückfrage) gespeichert werden.
Dazu wird der Schreibschutz vorübergehend entfernt und nach dem Speichern erneut gesetzt.
Der hierfür benötigte, nicht funktionierende, Programmcode wurde auskommentiert.

Die beschriebene Vorgangsweise funktioniert unter Excel wie gewünscht.
Unter WORD hakt es aber, wenn die bereits heute gespeicherte Datei erneut unter dem heutigen Da-tum gespeichert werden soll.

Mein Frage an das Forum lautet: Wie müsste der auskommentierte Programmcode geändert werden, damit das Makro auch unter WORD funktioniert?

danke im voraus

wellington
Antworten Top
#2
ich habe den Programmcode überarbeitet, es verbleiben noch 2  Zeieln mit nicht funktionierendem Code:

Code:
Sub Beenden()
Dim sPfad, f, fs, Speicherdatum As String, Speichername As String
Dim Jahr As String, Monat As String, Tag As String, Enter_Antwort%, i%

Speichername = ActiveDocument.Name
      Speicherdatum = Right(Speichername, 13)
      Jahr = Left(Speicherdatum, 4)
      Monat = Mid(Speicherdatum, 5, 2)
      Tag = Mid(Speicherdatum, 7, 2)
Speicherdatum = Tag & "." & Monat & "." & Jahr

Enter_Antwort = MsgBox("SPEICHERN, Schreibgeschützt oder Abbrechen??", vbQuestion + vbYesNoCancel + vbDefaultButton2, "Message Box Titel")
If Enter_Antwort = 6 Then
  GoTo Schreibschutz_JA
ElseIf Enter_Antwort = 7 Then
  GoTo Schreibschutz_NEIN
ElseIf Enter_Antwort = 2 Then
  Exit Sub
End If
Schreibschutz_NEIN:
If ActiveDocument.ReadOnly = True Then
  Speicherdatum = Left(ActiveDocument.BuiltInDocumentProperties("last save time"), 10)
  Word.ActiveDocument.Saved = True ' Flag für Änderungen zurücksetzen
  Word.NormalTemplate.Saved = True
  Application.Quit
Else
Schreibschutz_JA:
      Jahr = Right(Date, 4)
      Monat = Mid(Date, 4, 2)
      Tag = Mid(Date, 1, 2)
  If Speicherdatum = Tag & "." & Monat & "." & Jahr Then
      With ThisDocument
        sPfad = .FullName
        Call SetAttr(PathName:=.FullName, Attributes:=vbNormal)
        .Saved = True
[color=#ff4136]'        If .ReadOnly Then Call .ChangeFileAccess(Mode:=xlReadWrite)[/color]
      End With
      Application.ScreenUpdating = False
      SendKeys ("{ENTER}") 'Speicherabfrage unter gleichem Dateinamen unterdrücken
      SendKeys ("{LEFT}") 'Sprung nach links auf "JA"-Schaltfläche
      SendKeys ("{ENTER}") 'Speichern mit "JA"-Schaltfläche bestätigen
[color=#ff4136]'      Application.Dialogs(xlDialogSaveAs).Show Format("Dok1-") & Format(Date, "yyyymmdd") & ".docm"[/color]
      Application.ScreenUpdating = True
  Speicherdatum = Left(ActiveDocument.BuiltInDocumentProperties("last save time"), 10)
  Else
      ThisDocument.SaveAs FileName:="d:\Word\Dok1-" & Format(Date, "yyyymmdd") & ".docm"
  End If
      Speicherdatum = Right(ThisDocument.Name, 13)
      Jahr = Left(Speicherdatum, 4)
      Monat = Mid(Speicherdatum, 5, 2)
      Tag = Mid(Speicherdatum, 7, 2)
  Speicherdatum = Tag & "." & Monat & "." & Jahr
  ThisDocument.Save
  sPfad = "d:\Word\" & ActiveDocument.Name
  Set fs = CreateObject("Scripting.FileSystemObject")
  Set f = fs.GetFile(sPfad)
            f.Attributes = f.Attributes + 1
  Application.DisplayAlerts = False
  Application.Quit
End If
End Sub
Antworten Top
#3
Hallo wellington,

zwei Sachen fallen mir auf die Schnelle auf:

Zur Eigenschaft Document.ReadOnly vermeldet die Word-VBA-Hilfe: Schreibgeschützter boolescher Wert. Entsprechend gibt es da keine Dokumenteigenschaft ChangeFileAccess.
Da musst du wohl mit der GetAttr-Funktion arbeiten ( https://learn.microsoft.com/en-us/office...r-function )

Der Speicherdialog in Word heißt Dialogs(wdDialogfilesaveAs)
Antworten Top
#4
Hallo Gerhard,

Der Hinweis: Der Speicherdialog in Word heißt Dialogs(wdDialogfilesaveAs) löst schon mal eines meiner 2 Probleme.

Die GetAttr-Funktion ist mir bislang nicht bekannt, werde mich damit auseinandersetzen.

Danke für deinen Beitrag
wellington
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste