Frage von ChrisFragtGern, 79

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 :)

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von maximilianus7, 51

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 ... 

Kommentar von ChrisFragtGern ,

vielen dank für deine Hilfe! Ich habe gerade kein Excel zur Hand, aber ich werde deine Tipps die Tage mal befolgen ;)

Kommentar von ChrisFragtGern ,

Hey @maximilianus7

Ich habe versucht deine Tipps zu beherzigen. Aktuell sieht mein Programm so aus.

https://paste2.org/gI32HeBz


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



Antwort
von Garfield0001, 56

... und mit Serienbrief in Word kommst du nicht weiter?

Kommentar von ChrisFragtGern ,

Ne Sorry, das soll über ein Excel Makro funktionieren.

Antwort
von maximilianus7, 52

grundsätzlich code nicht im GF-editor posten, nimm z.b. paste2.org

Kommentar von ChrisFragtGern ,

Oh tut mir leid, habs editiert.

Kommentar von Britzcontrol ,

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

Kommentar von ChrisFragtGern ,
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



Kommentar von ChrisFragtGern ,

Oh Sorry, das ist sehr unübersichtlich :D Ich Versuchs später nochmal richtig hochzuladen

Kommentar von maximilianus7 ,

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.

Keine passende Antwort gefunden?

Fragen Sie die Community