Wie kann ich Word Textmarken mit einem Excel Makro befüllen?
Hallo liebes Gute Frage Forum,
ich bin ein blutiger Anfänger im Programmieren und möchte mich trotzdem an eine, wie ich finde, nicht ganz so leicht Aufgabe wagen.
Ich hoffe es erbarmt sich jemand und hilft mir weiter.
Meine Aufgabe:
Ich habe eine ExcelDatenbank die mehrere Einträge für mehrere Kunden verwaltet. ( Name, Anrede, Straße usw. )
Außerdem habe ich ein Word Dokument erstellt in das ich die Word Textmarken eingefügt habe ( Ebenfalls so benannt Name, Straße, Anrede usw. )
Nun möchte ich in Excel eine Zeile anklicken und anschließend das Makro ausführen. ( Das Makro soll dann nur für die Ausgewählte Zeile ausgeführt werden )
Die Vorlage soll aber nicht überschrieben werden, es soll ein neues Word Dokument erstellt werden, in dem die Felder dann ausgefüllt sind ( Am besten mit anderem Speicherpfad den ich dann auch direkt im Makro eingeben kann. )
Natürlich habe ich es auch schon selber versucht, allerding haben mir die Codeschnipsel die ich aus dem Internet geholt habe nicht ganz geholfen.
Hier mein Code: http://paste2.org/wFtw5UId
Mein Problem ist es nun, dass nur das letzte Textfeld wo ich die Referenz auf "Hallo" gesetzt habe befüllt werde, die anderen jedoch nicht obwohl excel keine fehlermeldung ausspuckt..
Außerdem hätte ichs gerne so wie oben beschrieben, dass er nur die Vorlage mit den Textmarken öffnet aber nicht überschreibt sondern ein neues Dokument mit den ausgefüllten Textmarken erstellt. (Pfad soll im Makro bestimmt werden)
Ich hoffe sehr das mir jmd. weiter helfen kann
Einen wunschönen Tag noch :)
3 Antworten
dein hauptproblem:
ActiveCell.SpecialCells(xlLastCell).Select
- damit wählst du immer die zuletzt benutzte zelle, die angeklickte zelle wird übersprungen, also die ursprüngliche ActiveCell auf irgendwas festes gesetzt.
ausserdem:
1. Set xlZelle
das xl als prefix solltest du nicht nehmen: MS verwendet das für Excel-spezifische vordefinierte numerische konstanten (z.b. xlLastCell) - xl=excel
damit verwirrst du dich nur selbst.
2. die offset schreibweise ist schwierig zu lesen. mit den anklicken einer zelle willst du doch eigentlich nur die aktuelle zeile feststellen.
also einfach statt Set xlZelle=...
currentrow = ActiveCell.Row
und dann mit
cells(currentrow, "G") etc. auf die einzelnen zellen zugreifen.
3. Set objDocx = objWDApp.Documents.Open(strFileName, ReadOnly:=False)
heisst, dass er NICHT (false) schreibgeschützt öffnet. sinnvoll wäre also ReadOnly:=true
würdest das aber erst merken, wenn du das fileattribut der docx auf readonly setzt - vermute ich.
4. die neue worddatei schreibst du wohl mit objDocx.saveAs ...
Hey @maximilianus7
Ich habe versucht deine Tipps zu beherzigen. Aktuell sieht mein Programm so aus.
Im Prinzip möchte ich Excel starten, eine Zeile anklicken und dann das Makro ausführen, und VBA soll das Makro dann nur für die zuvor angeklickte Zeile durchführen.
Leider funktioniert es immernoch nicht. Der Fehler wird in der Zeile
" Set objDocx = objWDApp.Documents.Open(strFileName, ReadOnly:=True) "
markiert.
Liebe Grüße
vielen dank für deine Hilfe! Ich habe gerade kein Excel zur Hand, aber ich werde deine Tipps die Tage mal befolgen ;)
... und mit Serienbrief in Word kommst du nicht weiter?
Ne Sorry, das soll über ein Excel Makro funktionieren.
grundsätzlich code nicht im GF-editor posten, nimm z.b. paste2.org
Einspruch, Euer Gnaden.
Ich, und auch viele Andere, öffne unter keinen Umständen irgendwelche Links zu irgendwelchen Clouds, fremden Webseiten, ...
Die Chance auf qualifizierte Hilfe in GF ist größer, wenn das Problem hier beschrieben wird (Codebeispiel, Bildschirmkopie, ...).
Was spricht gegen die Veröffentlichung des VBA-Codes hier im Forum?
Gruß aus Berlin
Sub AnschreibenGutachtenNeu()
Dim strFileName As String
Dim
objWDApp
As
Object
'Word.Application
Dim
objDocx
As
Object
'Word.Document
Dim
xlZelle
As
Range
'Referenzzelle in Excel
strFileName
=
"C:\Users\CG\Documents\Spaces\Bea und Chris\Projekt Makro\tester.docx"
If
Dir
(
strFileName
)
=
""
Then
MsgBox
"Datei """
&
strFileName
&
""" nicht gefunden!"
Exit
Sub
End
If
'Excel-Referenzzelle für Auftrag setzen
ActiveCell
.
SpecialCells
(
xlLastCell
).
Select
With
ActiveSheet
Set
xlZelle
=
.
Cells
(
ActiveCell
.
Row
,
1
)
' Zelle in aktiver Zeile, Spalte A
End
With
Application
.
ScreenUpdating
=
False
'Word-Anwendung sichtbar starten
Set
objWDApp
=
CreateObject
(
"Word.Application"
)
objWDApp
.
Visible
=
True
'Vorlage öffnen - schreibgeschützt
Set
objDocx
=
objWDApp
.
Documents
.
Open
(
strFileName
,
ReadOnly
:
=
False
)
'Werte aus Zellen in Excel an Textmarken im Worddokument einfügen
objDocx
.
Bookmarks
(
"Aktenzeichen"
).
Range
.
Text
=
xlZelle
.
Offset
(
0
,
6
).
Text
'aus Spalte G funktioniert nicht
objDocx
.
Bookmarks
(
"Anrede"
).
Range
.
Text
=
xlZelle
.
Offset
(
0
,
4
).
Text
'aus Spalte E funktioniert nicht
objDocx
.
Bookmarks
(
"Ansprechpartner"
).
Range
.
Text
=
xlZelle
.
Offset
(
0
,
5
).
Text
'aus Spalte F funktioniert nicht
objDocx
.
Bookmarks
(
"Aktenzeichen"
).
Range
.
Text
=
"Hallo"
'Funktioniert komischer weise
'Hier müsste dann noch irgendwie die Speicherung erfolgen
Application
.
ScreenUpdating
=
True
End
Sub
Oh Sorry, das ist sehr unübersichtlich :D Ich Versuchs später nochmal richtig hochzuladen
was dagegen spricht, hat der fragesteller als antwort auf deinen kommentar gerade demonstriert.
und es spricht nichts dagegen, die paar bekannten plattformen für das ablegen von source code zu benutzen.
dort ist der code übersichtlich (teilweise mit syntaxhighlighting) dargestellt und kann man mit copy & paste arbeiten.
Oh tut mir leid, habs editiert.