Kopie einer .docm ohne Makros

Beinahe hätte ich sie vergessen: Bill Gates' Schreibmaschine! Von vielen Nutzern seit seinem ersten Marktauftritt als "Multi-Tool Word" vor ziemlich genau 40 Jahren auch heute noch oft wie die mechanische Vorgängerin genutzt (nur Korrekturfluid sieht man endlich nicht mehr auf den Bildschirmen), ist Textverarbeitung wohl das Essential auf einem PC.
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Kopie einer .docm ohne Makros

#1

Beitrag von d'r Bastler »

Moin allerseits,

man sollte meinen, das sind Basics, die ich längst (vielleicht nicht aus dem Handgelenk, aber) zumindest nach Recherche selber lösen können müsste. Leider nein! Alle mir bekannten Register habe ich gezogen.

Mit folgendem Code ...
Private Sub cmdMakeFile_Click()
Dim sDocName As String, sDocPath As String, sDocFolder As String
Dim rng As Range

'' Titel vorhanden?
sDocName = tbxTitel.Text
If Len(sDocName) < 2 Then
MsgBox "Bitte Titel eingeben!", , "Hinweis"
Exit Sub
End If

''Kapitel ausgewählt?
sDocFolder = cbxFolder.Value
If cbxFolder.ListIndex < 0 Then
MsgBox "Bitte Kapitel auswählen!", , "Hinweis"
Exit Sub
End If

'' Bookmark title
If ActiveDocument.Bookmarks.Exists("title") Then
Set rng = ActiveDocument.Bookmarks("title").Range
rng.Text = sDocName
Else
MsgBox "Bookmark title?"
End If

'->>>>>
sDocPath = ThisDocument.Path & "\" & sDocFolder & "\"
Application.DisplayAlerts = False
sDocName = sDocPath & sDocName & ".docx"
ActiveDocument.SaveAs FileName:=sDocName, FileFormat:=wdFormatXMLDocument
'<<<<<-
Unload Me
MsgBox sDocName, , "Neue Datei angelegt!"

End Sub
... erstelle ich aus einer Userform in einen schreibgeschützten .docm heraus ein neues Dokument, dem ich außer dem Layout, den Eingaben und der Auswahl aus der Combobox nichts weiteres mehr mitgeben möchte. Als SaveAs_Empfehlung konnte ich im Netz wdFormatXMLDocument finden, von dem ich annahm, das es keinen VBA-Code übergibt.
Wenn das neue Dokument (also die modifizierte Kopie) nun sofort speichere, funktioniert das. Sobald ich aber Änderungen in der Kopie vornehme, nervt diese Fehlermeldung:
Error.jpg
Error.jpg (45.05 KiB) 14748 mal betrachtet
... und es will mir nicht gelingen, diese zu unterdrücken, bzw. den VBA-Code erst gar nicht mitzugeben.

Ich möchte gerne alle Features von Word nutzen und nicht auf RTF ausweichen. Kann mir jemand helfen?

Eine Lösung Wordvorlagen mit VBA zu kombinieren, bin ich bisher zu dämlich. Sorry!

Grüße und besten Dank vorab!
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Kopie einer .docm ohne Makros

#2

Beitrag von d'r Bastler »

Moin zusammen,

inzwischen bin ich ein kleines Stück weiter: während die unmittelbar geöffnete neue Datei leider noch den VBA-Code der Vorlage enthält, ist er beim erneuten Öffnen endlich verschwunden. Also muss ich nun einen Workaround basteln, der die Datei anlegt, schließt und wieder öffnet. Dann wäre mein Problem endlich gelöst. Jetzt habe ich wenigstens mal einen Ansatz und werde die Lösung natürlich hier einstellen.

Grüße
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

GELÖST Kopie einer .docm ohne Makros

#3

Beitrag von d'r Bastler »

Gelöst ist eigentlich geprahlt, denn es ist tatsächlich bestens ein 2/3 Workaround ;)

Ich habe meinem Code einfach die Zeile

Code: Alles auswählen

ActiveDocument.Close
angehängt, die das neue Dokument schließt, Word aber geöffnet lässt. Im Menü Datei > Zuletzt verwendet steht die neue Datei dann erster Stelle und man kann sie ohne lange zu suchen öffnen.

Damit kann ich leben.

Aber, falls jemand eine professionelle Lösung hat - nur her damit! :mrgreen:

Grüße
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Gerhard H

Re: Kopie einer .docm ohne Makros

#4

Beitrag von Gerhard H »

Hallo Bastler,

"Eine Lösung Wordvorlagen mit VBA zu kombinieren, bin ich bisher zu dämlich."

Dabei wär das doch der Königsweg. Wenn du eine Kopie der Dokumentvorlage erstellst, hat die doch von Haus aus gar kein Makro mehr, also kannst du dir alle diesbezüglichen Handstände sparen. Nicht mal die Textmarke musst du wiederherstellen.

Wo siehst du denn ein Problem? Nach Überfliegen deines Codes glaube ich, dass du an dem gar nichts ändern musst.
Falls du derzeit die Userform bei Dokumentstart erscheinen lässt (via Document_Open) musst du das doch nur durch Document_New ersetzen.
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Kopie einer .docm ohne Makros

#5

Beitrag von d'r Bastler »

Moin Gerhard,

Dank für Deine Antwort! Die Sache mit dem Königsweg, den ich als Demokrat zu vermeiden suche, ist vermutlich die beste Lösung, und gerne würde ich sie verstehen. Wenn ich als Bastler eines geblieben bin, dann ist es lernfähig. Das mit dem Document_New werde ich mir heute mal anschauen, wobei es ja doch wieder VBA im neuen Dokument bedeutet, oder sehe ich das falsch?

Grüße
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Gerhard H1

Re: Kopie einer .docm ohne Makros

#6

Beitrag von Gerhard H1 »

Hallo Bastler,

ich würde dir ja gern zur Verdeutlichung des Prinzips ein Beispiel hochladen, aber ich finde die Möglichkeit dazu nicht. Deshalb eine kleine Bastelanleitung:
Erstelle ein Dokument mit beliebigem oder keinem Inhalt. Erstelle ein Modul für eine Userform und darin irgendeine Userform.
Ins Modul ThisDocument schreibst du den Aufruf für diese Userform:

Code: Alles auswählen

Private Sub Document_New()
Userform1.Show
End Sub
Speichere das Dokument irgendwo hin als Dokumentvorlage mit Makros (*.dotm)
Erstelle nun davon durch Doppelklick ein neues Dokument (d.h. eine Kopie der Vorlage)
Dadurch wird der Dreizeiler ausgelöst; die Userform erscheint. Und das, obwohl das neu erstellte Dokument selbst kein Makro enthält. Es kann aber auf das der Vorlage zurückgreifen.
Deshalb kannst du das neue Dokument irgendwohin speichern, ohne ein Makro entfernen zu müssen. Es gibt nämlich keins.

Ob das skizzierte Vorgehen letztlich zu deinem Vorhaben passt, wird separat zu diskutieren sein.
Benutzeravatar
theos
Beiträge: 34
Registriert: 15. Sep 2022, 21:48
Hat sich bedankt: 2 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: Kopie einer .docm ohne Makros

#7

Beitrag von theos »

Das Problem das unser Bastler hat ist, dass er von Excel her kommt. Da wird das Makrogedöns gnadenlos weiter gegeben ans neue Mappengebilde, auch wenn das von einer Vorlage neu erstellt wird. Dass Word die Makros in seiner Vorlage behält und allen seinen Kindern zur Verfügung stellt wenn sie im gespeicherten Pfad vorhanden ist, kann man sich als Excel user nicht vorstellen. (Mir gings umgedreht)
Fazit, wenn du das aus der makroverseuchten Vorlage ein neues Dokument erstellst und als docx speicherst, kannst du von dort aus jederzeit auf die Makros der Vorlage zugreifen, wenn du das Dok weitergibst, ist es vorbei mit Makro.
Willst du das auf deinem Rechner die Bindung auf deinem Rechner auch lösen, kannst du die Vorlage ja auch beim Erstellen mit document.new wieder auf die Normal stellen.
Dann ist da auch Schluss
Folgende Benutzer bedankten sich beim Autor theos für den Beitrag:
d'r Bastler
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Kopie einer .docm ohne Makros

#8

Beitrag von d'r Bastler »

Moin allerseits,

erst einmal lieben Dank, dass Ihr das Thema (also mich :shock: ) noch nicht aufgegeben habt! Nachdem mein Workaround praktisch akzeptabel funktioniert, hindert das mich nicht daran, Eure Vorschläge zu beherzigen und ich werde mich der Sache auch wider widmen.

@Gerhard: Deine Upload-Probleme sollten mit Deiner Anmeldung hier eigentlich behoben sein. Ich habe Deine Berechtigungen eben getestet und Du hast alle Rechte eines registrierten und freigegebenen Forumsmitglieds.

@theo: Dass meine XL-Wurzeln tatsächlich immer wieder sowohl in WD wie auch (und dort noch mehr) in OL ein Hindernis sind. Allerdings gibt es auch in XL die Möglichkeit mit Vorlagen zu arbeiten, in dem Du ein VBA-Projekt mit immer wieder benötigten Makros pflegst, sei es Exporte von gefilterten Daten, Ausgabe als Serienbrief (ohne WD) in PDF und dieses parallel zum aktuellen Projekt geöffnet hältst. Ob das auch mit .XLSX (also ohne Makros in der zweiten Datei) funktioniert, habe ich allerdings noch nicht probiert.

Und so habe ich auch Eurer beiden Vorschlag auch verstanden: WD-Vorlage öffnen, neue Datei dazu und dann auf Textbausteine, Formatvorlagen quer zugreifen. Wenn ich mit dieser Annahme nicht völlig falsch liege, sieht das sehr nach einer vielversprechenden Herangehensweise aus, die ich für meinen semi-professionellen Bedarf gut ausbauen kann. Dem Ganzen ein Userform mit diversen Optionen in Comboboxen, Checkboxen, Toggle-Buttons und anderen Controls vorgeschaltet und ich kann mir vorstellen, dass ich tatsächlich auf meine bisherige Pfuscherei (bisher sind's noch nicht mal Basteleien ... :mrgreen: ) verzichten könnte. Das dann noch ergänzt durch kleine Usermenüs pro Dokumentenart (non-modale Userform) wäre sicher nett. Version 2 wäre dann vermutlich das Anpassen der Menüs pro Dokumententyp per Vorlage.

Vielen, vielen Dank!! und schönes Wochenende!
Folgende Benutzer bedankten sich beim Autor d'r Bastler für den Beitrag:
theos
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Benutzeravatar
theos
Beiträge: 34
Registriert: 15. Sep 2022, 21:48
Hat sich bedankt: 2 Mal
Danksagung erhalten: 22 Mal
Kontaktdaten:

Re: Kopie einer .docm ohne Makros

#9

Beitrag von theos »

Sorry, dass hier erst so spät eine Antwort kommt, du hast das sicher inzwischen rausgefunden, dass du da richtig denkst.
Die Vorlage der die neue Datei zugrunde liegt, stellt die Makros zur Verfügung und du kannst auch auf alle möglichen Elemente zugreifen. Das neue Dokument wenn gespeichert wird, hat kein einziges Makro in sich.
Auch in Word gibt es, wie bei Excel, die beim Start geladenen Dateien. Letztlich ist die Normal.dotm und die Personal.xlsb ja nichts anders.
In Word sind die Makros die für alle da sind normal in der Normal.dotm gut aufgehoben. Wenn du spezielle brauchst, weil du ggf. spezifische Formatierungen für ein Projekt brauchst, die du dir in einer Dokumentenvorlage anlegen möchtest, kannst du in das Ding dann auch ganz spezifische Makros einbauen.
Word hat hier eine komplett andere Philosophie von der Dokumentenvorlage wie Excel. Aber so was von anders. :?
Folgende Benutzer bedankten sich beim Autor theos für den Beitrag:
d'r Bastler
Benutzeravatar
d'r Bastler
Beiträge: 683
Registriert: 29. Aug 2022, 13:20
Hat sich bedankt: 177 Mal
Danksagung erhalten: 91 Mal

Re: Kopie einer .docm ohne Makros GELÖST

#10

Beitrag von d'r Bastler »

Moin allerseits,

das Thema liegt zwar schon eine Weile, aber nachdem mich der erntereiche Sommer dazu zwingt immer neue Rezepte zu notieren, habe ich mich der Automatisierung des Ganzen noch einmal gewidmet.

Für den folgenden Code braucht man eine USF mit einer TextBox, einer ComboBox und einem CommandButton. Die Combo wird aus einem Array im Code (der in die Userform gehört) gefüllt. Als Vorlage dient ein Rezept-Layout, das die Textmarke "titel" enthält. Da müsst Ihr selbst kreativ werden ;-)

Code: Alles auswählen

Option Explicit
Public sPath As String

Private Sub UserForm_Initialize()
Dim i As Integer, f As Integer
Dim aChapter ' Array

sPath = ThisDocument.Path & "\"
aChapter = Array("Basics", "Getränke", "Vorspeisen", "Suppen & Saucen", "Nudeln & Eintöpfe", "Gemüse", _
"Fisch", "Geflügel", "Schwein", "Kalb", "Rind", "Lamm", "Beilagen", "Salate", "Süßspeisen", "Gebäck")

cbxFolder.List = aChapter

For i = 0 To UBound(aChapter)
    If Dir$(sPath & aChapter(i), vbDirectory) = "" Then
        MkDir sPath & aChapter(i)
        f = f + 1
    End If
Next

If f > 0 Then
    MsgBox f & " neue Ordner angelegt!", , "insgesamt " & i
End If

lblName.Caption = "Bitte beachten: Titel = Dateiname!" & vbNewLine & "Keine unzulässigen Zeichen!"

End Sub

Private Sub cbxFolder_Change()
Dim sText As String
Dim rng As Range

'' Bookmark head
If ActiveDocument.Bookmarks.Exists("head") Then
    Set rng = ActiveDocument.Bookmarks("head").Range
    rng.Text = cbxFolder.Value
Else
    MsgBox "Bookmark head?"
End If

sText = cbxFolder.Text
    With ActiveDocument
        .Bookmarks.Add Range:=rng, Name:="head"
    End With

End Sub

Private Sub cmdMakeFile_Click()
Dim sDocName As String, sDocPath As String, sDocFolder As String
Dim rng As Range

'' Titel vorhanden?
sDocName = tbxTitel.Text
If Len(sDocName) < 2 Then
    MsgBox "Bitte Titel eingeben!", , "Hinweis"
    Exit Sub
End If

''Kapitel ausgewählt?
sDocFolder = cbxFolder.Value
If cbxFolder.ListIndex < 0 Then
    MsgBox "Bitte Kapitel auswählen!", , "Hinweis"
        Exit Sub
End If

'' Bookmark title
If ActiveDocument.Bookmarks.Exists("title") Then
    Set rng = ActiveDocument.Bookmarks("title").Range
    rng.Text = sDocName
Else
    MsgBox "Bookmark title?"
End If

sDocPath = ThisDocument.Path & "\" & sDocFolder & "\"
Application.DisplayAlerts = False
sDocName = sDocPath & sDocName & ".docx"
ActiveDocument.SaveAs2 FileName:=sDocName, FileFormat:=wdFormatXMLDocument
Unload Me
Application.Documents.Open FileName:=sDocName
MsgBox sDocName, , "Neue Datei angelegt!"

End Sub
Die Lösung war letztlich die richtige Reihenfolge der letzten drei Befehle. Nach der MsgBox steht das neue Dok mit Titel da wie eine Eins. Die neue Datei enthält noch Makros, die aber beim nächsten Öffnen verschwinden.

Liebe Grüße und Dank für alle vorherige Unterstützung.
d'r Bastler von den VBAsteleien.de
Win 10 + Office 2019 & Win11 + Office 2021 + Visio 2019 pro & macOS.X15 + Office2019pro & Android12 & XL365
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste