Forum des Access-Tutorials

Vorlage beim Schließen löschen (VBA)

DerJo @, Sonntag, 17. Dezember 2017, 10:30 (vor 67 Tagen)

Hallo zusammen,

ich habe folgendes Problem: Auf Basis einer .dotm Vorlage werden .dotx Dokumente erstellt, dabei kann der User
mittels einer UserForm Eingaben machen. Beim Schließen des Dokumentes bzw. möglich wäre auch beim Schließen der UserForm
soll der Verweis des Dokuments zur Vorlage entfernt und die Vorlage gelöscht werden, ich habe das durch folgenden Code versucht:

 
 
Private Sub Document_Close() 'bzw. Private Sub UserForm_Terminate()

 If ActiveDocument.Type = 0 Then 'Dokument nicht Template schließen
 
  Dim pfad As String
  pfad = ThisDocument.FullName
 
  ActiveDocument.AttachedTemplate = "" 'Verweis auf Vorlage entfernen
  
  SetAttr pfad, vbNormal 'Eventuellen Schreibschutz von Vorlage entfernen
  
  Kill pfad 'Vorlage löschen
  
 End If
 
End Sub


Es wird alles ausgeführt bis auf den Kill Befehl, dabei erscheint immer Laufzeitfehler 70: Zugriff verweigert.
Kann mir jemand sagen was ich falsch gemacht habe?
Danke!

Vorlage beim Schließen löschen

Martin Asal, Sonntag, 17. Dezember 2017, 18:49 (vor 67 Tagen) @ DerJo

Eigentlich logisch, dass es nicht geht. Und ich bin mir auch nicht sicher, ob es das ist, was du willst: Du willst die Vorlage physisch löschen? Also die Datei, in der dein Code steckt???

Jedenfalls kannst du keine aktuell geöffnete Datei löschen. Kannst du auch ganz ohne VBA testen: Öffne eine beliebige Datei, und versuche sie im Windows-Explorer zu löschen, noch während sie geöffnet ist. Geht nicht.

Martin

Vorlage beim Schließen löschen

DerJo, Dienstag, 19. Dezember 2017, 17:36 (vor 65 Tagen) @ DerJo

Hier die Lösung mit Hilfe einer Textmarke "loc":

 
Private Sub Document_Close()
 
            If ActiveDocument.Type = wdTypeTemplate Then
 
                Dim locb As String
                Dim cRange As Range
 
                If ActiveDocument.Bookmarks.Exists("loc") Then
                Set cRange = ActiveDocument.Bookmarks("loc").Range
                    locb = cRange.Text
                End If
                With ActiveDocument.Bookmarks
                    .Add Range:=cRange, Name:="loc"
                End With
 
                SetAttr locb, vbNormal
 
                Kill locb
 
            Else:
 
                Dim bRange As Range
 
                If ThisDocument.Bookmarks.Exists("loc") Then
                Set bRange = ThisDocument.Bookmarks("loc").Range
                    bRange.Text = ThisDocument.FullName
                End If
                With ThisDocument.Bookmarks
                    .Add Range:=bRange, Name:="loc"
                End With
 
                ActiveDocument.AttachedTemplate.Save
 
                Dim loca As String
                loca = ThisDocument.FullName
 
                ActiveDocument.AttachedTemplate = ""
                ActiveDocument.Saved = True
 
                Documents.Add Template:=loca, NewTemplate:=True
 
                Application.Quit
 
            End If
 
End Sub
 
RSS-Feed dieser Diskussion
RSS Einträge  RSS Threads   Kontakt
powered by my little forum