Office - Word, Excel und Co. 9.759 Themen, 41.747 Beiträge

Wie kann man aus Excel Word starten?

Excel-Freund / 4 Antworten / Baumansicht Nickles

Ich pflege meine Adressen mit Excel (einige Macros machen es recht bequem). Eine Auswahl möchte ich mit Word ausdrucken (Etiketten). Ich möchte Word mittels Macro aus Excel starten und dort den Druckvorgang automatisch erledigen.


Im Excel kann man ein Word-Fenster zwar einbetten (Einfügen, Objekt, Microsoft Word Dokument, ...), aber der Funktionsumfang ist eingeschränkt (z.B. Serienbriefe gehen nicht).


Wie kann man aus Excel Word starten?

bei Antwort benachrichtigen
Kolti Excel-Freund „Wie kann man aus Excel Word starten?“
Optionen

Betrifft: Aus Excel heraus ein Worddokument drucken
Problem: Wie kann ich aus Excel heraus Word veranlassen, ein bestimmtes Dokument zu drucken?
Lösung: Geben Sie den nachfolgenden Code in ein Standardmodul ein und weisen Sie ihn einer Schaltfläche zu.

ClassModule: Tabelle1

Private Sub cmdWordDruck_Click()
Call WordDrucken
End Sub

StandardModule: basMain

Sub WordDrucken()
Dim wrdApp As Object
Dim wrdDoc As Object
Dim sFile As String
sFile = Range("B1").Value
If Dir(sFile) = "" Then
Beep
MsgBox "Worddokument wurde nicht gefunden!"
Else
Set wrdApp = CreateObject("Word.Application")
Set wrdDoc = wrdApp.Documents.Open(sFile)
wrdDoc.PrintOut
Application.Wait Now + TimeSerial(0, 0, 5)
wrdApp.Quit
Set wrdDoc = Nothing
Set wrdApp = Nothing
End If
End Sub



bei Antwort benachrichtigen
Excel-Freund Nachtrag zu: „Wie kann man aus Excel Word starten?“
Optionen

Die beschriebene Möglichkeit mit «Class- und StandardModule» ist zwar eleganter als der Umweg über «Einfügen», «Objekt», «Microsoft Word Document», schränkt aber die Word-Funktionen genauso wie diese. So kann ich die Etiketten-Schablone nicht mit der Datanquelle zusammenführen und das Resultat ausdrucken. Jedenfalls ich sehe keine Möglichkeit.
Gibt es doch eine Lösung?

bei Antwort benachrichtigen
Kolti Excel-Freund „Wie kann man aus Excel Word starten?“
Optionen

Da mußt Du mal im Internet suchen.

http://www.xlfaq.herber.de/index.html

bei Antwort benachrichtigen
Uli M Excel-Freund „Wie kann man aus Excel Word starten?“
Optionen

Mach dies besser von Word aus (z.B. Seriendruck) und wähle deine Excel-Tabelle als Datenquelle. Natürlich lässt sich dasselbe Ergebnis auch programmieren (von beiden Seiten aus oder ggf. auch nur in Excel), wobei es dann empfehlenswert wäre, eine bereits zugeschnittenen Vorlage einzusetzen (üblicherweise Word-Tabelle mit den richtigen Maßen für die gewünschten Etiketten - auch hierzu kann in Word der entspr. Assi genutzt werden).

Sub EtikettenDrucken()
Const ksTitel = "Etiketten drucken"
Const ksDot = "c:\Etiketten1.dot"
Dim oRange As Range
Dim Y As Integer, S As String

Dim oAppWd As Object, oDocWd As Object
Dim oTableWd As Object, oCellWd As Object

If Dir(ksDot) = "" Then
MsgBox "Etikettenvorlage " & Chr(34) & ksDot & Chr(34) & " nicht gefunden!", vbExclamation, ksTitel
Exit Sub
End If

Set oAppWd = CreateObject("Word.Application")
' oAppWd.Visible = True ' bei Bedarf
oAppWd.DisplayAlerts = 0 ' bei Bedarf
Set oDocWd = oAppWd.Documents.Add(ksDot)
Set oTableWd = oDocWd.Tables(1)
Set oCellWd = oTableWd.Cell(1, 1)

' ggf. Markierung checken
' hier wird davon ausgegangen, dass die Spalten A - E die folgenden Daten beinhalten:
' Name Vorname Strasse Plz Ort => ggf. anpassen

Set oRange = Selection
For Y = 1 To oRange.Rows.Count
S = ""
' bei der Word-Tabelle wird u.a. davon ausgegangen, dass _
sie linear ist (alle Zeilen gleiche Spaltenanzahl, keine verbundenen Zellen, keine Trennzellen existieren) _
sie wird bei Bedarf erweitert
' spez. Formatierung bei Bedarf zusätzlich einbauen (dann event. nicht mit GesamtString arbeiten bzw. schon in der Vorlage
S = oRange.Cells(Y, 2)
If S "" Then S = S & " " ' Sonderbehandlung fehlender, hier nur Vorname
S = S & oRange.Cells(Y, 1) & Chr(13)
S = S & oRange.Cells(Y, 3) & Chr(13)
S = S & Chr(13) & oRange.Cells(Y, 4) & " " & oRange.Cells(Y, 5)
oCellWd.Range.Text = S
Set oCellWd = oCellWd.Next
If oCellWd Is Nothing Then
oTableWd.Rows.Add
Set oCellWd = oTableWd.Cell(oTableWd.Rows.Count, 1)
End If
Next Y
oDocWd.PrintOut Background:=False
oAppWd.DisplayAlerts = -1 ' s.o.
oAppWd.Quit 0

mEnd:
Set oDocWd = Nothing
Set oAppWd = Nothing
End Sub

bei Antwort benachrichtigen