Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
444to448
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
444to448
444to448
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Word Dokumentenvorlage aus Excel heraus öffnen

Word Dokumentenvorlage aus Excel heraus öffnen
24.06.2004 14:22:28
Steffen
Hallo,
ich habe folgendes Problem. Ich fülle eine Listbox 3-spaltig füllen. Dazu habe ich nten stehenden Code erstellt.
Wenn ich in der USerform mit der Listbox auf 'OK' klicke, soll eine Word-Dokumentenvorlage geöffnet werden. In diese soll
dann aus dem aktuellen Excel Tabellenblatt der Inhalt bestimmer Zellen in Textmarken in der Word-Dokumentenvorlage kopiert
werden. Nun habe ich das Problem, dass immer die Meldung kommt, dass die ich die Dokumentenvorlage indas Vorlagen Verzeichnis
kopieren soll, obwohl sie da ist.
Würde mich freuen, wenn sich jemand den Code mal ansehen könnte.
Vielen Dank.
Gruß
Steffen

Private Sub Urkunden_drucken()
Sub Urkunden_drucken()
Dim objWord As Object
Dim objBlatt As Worksheet
Dim intI As Integer
Dim strTitel As String
Dim strLänge As String
Dim strTitelliste As String
Dim iRow As Integer
Dim iloop As Integer
Dim anzahl_der_teilnehmer As Integer
'Das Tabellenblatt "Tabelle1n" öffnen
Sheets("Tabelle1").Select
'Hier werden nun die belegten Zeilen gezählt und somit die Teilnehmerzahl ermittelt
anzahl_der_teilnehmer = WorksheetFunction.Count(Sheets("Tabelle1").Range("B4:B65000").Value)
On Error Resume Next
'Listenfelddialog frmAuswahl aufrufen
With frmAuswahl
'Fenstertiteltext festlegen
.Caption = "drucken"
'Eingabeaufforderungstext festlegen
.lblPrompt.Caption = "Wählen Sie aus:"
'Listenfeld konfigurieren
With .lstListbox
'Zwei Spalten anlegen
.ColumnCount = 3
'Spaltenbreiten festlegen
.ColumnWidths = "0;-1;-1"
iloop = 0
iRow = 4
For Each objBlatt In ActiveWorkbook.Worksheets
'Alle Spalten mit Namen durchlaufen
If objBlatt.Name = "Tabelle1" Then
Do
'... Blattnamen in unsichtbare erste Spalte schreiben
.AddItem objBlatt.Name
If Cells(iRow, 4) <> "X" Then
'Namen des Teilnehmers in erste Spalte schreiben
.List(.ListCount - 1, 1) = objBlatt.Cells(iRow, 1).Value
'Geschwommene Strecke des Teilnehmers in zweite Spalte schreiben
.List(.ListCount - 1, 2) = objBlatt.Cells(iRow, 2).Value
End If
iRow = iRow + 1
iloop = iloop + 1
Loop While iloop < anzahl_der_teilnehmer
End If
Next
'Wenn Listenfeld leer ist, dann...
If .ListCount = 0 Then
'... Makro beenden
End
'Ansonsten...
Else
'... erstes Listenelement markieren
.ListIndex = 0
End If
End With
'Userform anzeigen
.Show
'Wenn Anwender 'Abbrechen' gewählt hat, dann...
If .Tag = "Abbruch" Then
'... Makro beenden
End
End If
Set objBlatt = GetWorksheet(.lstListbox.Value)
End With
'Neue Instanz von Microsoft Word starten
Set objWord = CreateObject("Word.Application")
'Bei Misserfolg...
If objWord Is Nothing Then
'... Fehlermeldung ausgeben
MsgBox "Word kann nicht gestartet werden.", vbCritical, APP_NAME
'Bei Erfolg...
Else
With objWord
'Word sichtbar machen
.Visible = True
'Neues Dokument auf Grundlage von Urkunde.dot anlegen
.Documents.Add template:=.Options.DefaultFilePath(2) & "\test.dot"
'Bei Misserfolg...
If Err <> 0 Then
'... Fehlermeldung anzeigen
MsgBox "Bitte kopieren Sie die Dokumentvorlage Urkunde.dot in das folgende Verzeichnis: " & vbCr &
.Options.DefaultFilePath(2), vbCritical, APP_NAME
'Word schließen
.Quit
'Objektvariable freigeben
Set objWord = Nothing
'Makro beenden
End
End If
MsgBox objBlatt.Name
'Textmarken der Inlay-Tabelle durch Albuminfos ersetzen
Call WordTextmarkeFüllen(objWord, .ActiveDocument, "Vorname", objBlatt.Cells(1, 2) & " - " & objBlatt.Cells(2,
2))
Call WordTextmarkeFüllen(objWord, .ActiveDocument, "Nachname", objBlatt.Cells(1, 2) & " - " & objBlatt.Cells(2,
2))
Call WordTextmarkeFüllen(objWord, .ActiveDocument, "Strecke", objBlatt.Cells(1, 2) & " - " & objBlatt.Cells(2,
2))
End With
'Objektvariable für Word-Zugriff freigeben (Word bleibt geöffnet)
Set objWord = Nothing
End If
'Makro beenden und alle Userform-Dialogfeldinhalte zurücksetzen
''End
End Sub


Private Sub WordTextmarkeFüllen(objWord As Object, objWDDokument As Object, strTMName As String, strTMWert As String)
'Wenn Textmarke existiert, dann...
If objWDDokument.Bookmarks.Exists(strTMName) = True Then
'... Textmarke markieren
objWDDokument.Bookmarks(strTMName).Range.Select
'Mit Inhalt überschreiben
objWord.Selection.Text = strTMWert
'Textmarke neu anlegen über neuem Inhalt
objWDDokument.Bookmarks.Add Range:=objWord.Selection.Range, Name:=strTMName
'Markierung aufheben
objWord.Selection.Collapse 0
End If
End Sub


Private Function GetWorksheet(strName As String) As Worksheet
Dim objBlatt As Worksheet
'Alle Blätter der aktuelle Arbeitsmappe durchlaufen
For Each objBlatt In ActiveWorkbook.Worksheets
'Wenn Blatt mit angegebenem Namen gefunden, dann...
If objBlatt.Name = strName Then
'... Verweis auf Blatt zurückliefern
Set GetWorksheet = objBlatt
'Schleife verlassen
Exit For
End If
Next
End Function

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Word Dokumentenvorlage aus Excel heraus öffnen
GerdZ
Hallo Steffen,
der Fehler tritt irgendwo zwischen der Zeile "On Error Resume Next" und der Zeile "If Err 0 Then" auf.
Laß "On Error Resume Next" weg, um zu sehen, wo der Fehler auftritt.
Vielleicht bei: "If .Tag = "Abbruch" Then"
Falls das Formular mit "Unload frmAuswahl" geschlossen wird, gibt es kein .Tag das gleich "Abbruch" sein könnte.
Gruß
Gerd
AW: Word Dokumentenvorlage aus Excel heraus öffnen
Steffen
Hallo,
daran liegt es nicht. Ich denke ein Problem ist, dass nach der Next Schleife objBlatt nicht mehr definiert ist. Dafür kommt dann die Zeile
Set objBlatt = GetWorksheet(.lstListbox.Value)
Damit lese ich die unsichbare erste Spalte in der Listbox aus, da da der Name der Tabelle drin steht. Da gibt es dann einen Fehler, weil das null sein soll. Wenn ich dieZeile mit dem Tabellenblattnamen anzeigen lasse, steht aber in jeder Zeile, wie erwünscht der Tabellenblattname drin, dürfte beim Auslesen also nicht null sein, sondern z.B. 'Tabelle1'.
Gruß
Steffen
Anzeige
Bin weiter aber neues Problem
Steffen
Hallo,
ich bin ein wenig weiter gekommen und stehe jetzt vor folgendem Problem. Ich habe unten nochmal einen Auszug aus dem Code angehängt.
Ich schreibe in die erste unsichtbare Spalte der Listbox den Namen des Tabellenblattes. nach .ListIndex = 0 sollte .lstListbox = "Name des Tabellenblattes" sein, aslo lstListbox sollte den Wert haben, der in der ersten unsichtbaren Spalte der Listbox steht haben. Der Wert bleibt aber immer bei null. In einem anderen Projekt funktioniert das prima.
Sieht vielleicht jemand den Fehler? Würde mich freuen.
Vielen Dank.
Gruß
Steffen

Sub test
With .lstListbox
'Zwei Spalten anlegen
.ColumnCount = 3
'Spaltenbreiten festlegen
.ColumnWidths = "0;-1;-1"
iloop = 0
iRow = 4
For Each objBlatt In ActiveWorkbook.Worksheets
'Alle Spalten mit Namen durchlaufen
If objBlatt.Name = "Tabelle1" Then
Do
If Cells(iRow, 4) <> "X" Then
'... Blattnamen in unsichtbare erste Spalte schreiben
.AddItem objBlatt.Name
'Namen des Teilnehmers in erste Spalte schreiben
.List(.ListCount - 1, 1) = objBlatt.Cells(iRow, 1).Value
'Geschwommene Strecke des Teilnehmers in zweite Spalte schreiben
.List(.ListCount - 1, 2) = objBlatt.Cells(iRow, 2).Value
End If
iRow = iRow + 1
iloop = iloop + 1
Loop While iloop < anzahl_der_teilnehmer
End If
Next
'Wenn Listenfeld leer ist, dann...
If .ListCount = 0 Then
'... Makro beenden
End
'Ansonsten...
Else
'... erstes Listenelement markieren
.ListIndex = 0
End If
End With
End Sub

Anzeige
Geschlossen!
Steffen
.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige