Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Access -> Word -> Access

Begonnen von Xoar, Juli 14, 2017, 11:10:47

⏪ vorheriges - nächstes ⏩

Xoar

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

Lachtaube

Grüße von der (⌒▽⌒)

Xoar

#2
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?

Lachtaube

Ich würde das in die super klappende Befüllung der Textmarken integrieren.
Grüße von der (⌒▽⌒)

Xoar

#4
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

Lachtaube

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.
Grüße von der (⌒▽⌒)

Xoar

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 erstellen
statt 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*

Lachtaube

Neues Dokument auf Basis der Vorlage anlegen:
Set objDocument = objWord.Documents.Add(CurrentProject.Path & "\VorlageMitTextMarke.dotx")
und dann objDocument.SaveAs verwenden.
Grüße von der (⌒▽⌒)

Xoar

#8
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]