Hallo,
hab eine Frage an euch, wie man das am besten umsetzten könnte.
Folgendes:
Ich fülle Textmarken per Access VBA in einer Word-Vorlage. Das klappt alles super.
Jetzt möchte ich aber gerne den Speicherpfad dieser Worddatei wieder zurück an Access geben und diesen mit in die Datenbank eintragen.
Habe in Word mal ein Makro aufgezeichnet, was ja als VBA Prozedure gespeichert wird.
Sub speichernPfad()
'
' speichernPfad Makro
'
'
ChangeFileOpenDirectory "C:\Users\Ich\Desktop\"
ActiveDocument.SaveAs2 FileName:="Test.docx", FileFormat:= _
wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False, CompatibilityMode:=14
End Sub
So da ist der Pfad ja drin abgelegt. Dieser ist auch FIX für alle Dateien, nur der Dateiname ändert sich.
Nur wie bekomme ich den Pfad jetzt am besten wieder nach Access?
Oder gibt es da eine viel bessere Variante, direkt aus Access heraus. Das man den Speicherpfad z.B. direkt mit übergibt.
Habt ihr Erfahrungen/Tipps/Ideen???
Beste Grüße
Siehe Document.FullName-Eigenschaft (https://msdn.microsoft.com/de-de/library/microsoft.office.tools.word.document.fullname.aspx).
Ah ok,
sollte der Ablauf dann so aussehen, dass die Datei mit Speichern unter gespeichert wird.
Dann im Anschluss ein Steuerelement (Button) in Word mit der Document.FullName Eigenschaft den Pfad+Dateinamen auslesen lassen.
Oder ist das anders gedacht?
in Word selbst klappt das schonmal
Private Sub CommandButton1_Click()
Dim Wert As String
Wert = ActiveDocument.FullName
Debug.Print Wert
End Sub
Und wie gebe ich "Wert" jetzt am besten an Access zurück?
Ich würde das in die super klappende Befüllung der Textmarken integrieren.
Mhh also die Speicheranweisung inkl. Pfad an Word übergeben?
So befülle ich eine Textmarke mit LateBinding
Public Sub WordExport(MitteilungsArt As Long, Verfasser As String, AZ As String, Autor As String, MitteilungenID As Long, Ueberschrift As String)
Dim objWord As Object
Dim objDocument As Object
Dim rng As Object
Set objWord = CreateObject("Word.Application")
Set objDocument = GetObject(CurrentProject.Path & "\VorlageMitTextMarke.dotx")
objWord.Visible = True
'Ueberschrift
If objDocument.Bookmarks.Exists("Ueberschrift") = True Then 'wie die Textmarke benannt ist
Set rng = objDocument.Bookmarks("Ueberschrift").Range
rng.Text = Ueberschrift
End If
End Sub
Da müsste jetzt sowas rein wie
Dim PfadAngabe as String
PfadAngabe = "C:\Testpfad\Test.docx"
objDocument.ActiveDocument.SaveAS PfadAngabe
Ich probiere mal obs klappt :)
[edit]
Kleine Änderung dann hat das schonmal geklappt.
Jetzt hab ich den Dateinamen auch vorgegeben, jetzt müsste ich für den Pfad einfach ein FileDialog aufrufen, dann sollte das passen, oder?
Dim PfadAngabe As String
PfadAngabe = "C:\Testpfad\Test.docx"
objWord.activedocument.SaveAS PfadAngabe
Ja. Im Prinzip kannst Du auch schon vorher mittels Dateidialog den Pfad festlegen.
PS: Konstruktionen wie objWord.activedocument sind kontraproduktiv, wenn man schon eine Instanz auf das Dokument objDocument besitzt. Und weiterhin würde ich nicht die Vorlage sebst öffnen, sondern ein neues Dokument auf Basis der Vorlage erstellen. Und nur, wenn mit dem Dokument in Word weitergearbeitet werden soll, ist es sinnvoll, die Word-Instanz sichtbar zu schalten - aber dann bitte erst am Ende der Operation, wenn Geschwindigkeit der Ausführung eine Rolle spielt.
Ah ok,
ZitatKonstruktionen wie objWord.activedocument sind kontraproduktiv, wenn man schon eine Instanz auf das Dokument objDocument besitzt.
wie müsste das dann aussehen, dass ich die SaveAS zugreifen kann?
nicht die Vorlage sebst öffnen, sondern ein neues Dokument auf Basis der Vorlage erstellenstatt GetObject(CurrentProject.Path & "\VorlageMitTextMarke.dotx") dann AddObjekt??
Ja wird mit weiter gearbeitet, pack ich dann am Ende der Sub hin.
Danke schonmal für deine gute Hilfe *Daumen hoch*
Neues Dokument auf Basis der Vorlage anlegen:
Set objDocument = objWord.Documents.Add(CurrentProject.Path & "\VorlageMitTextMarke.dotx")
und dann objDocument.SaveAs verwenden.
klappt super. Danke
[edit]
habe jetzt noch direkt aus Access aufgerufen wo die Datei inkl. Namen gespeichert wird und speichere diesen Wert in die Tabelle
[\edit]