Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1608to1612
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
Inhaltsverzeichnis

Eventhandling - Word aus Excel geöffnet

Eventhandling - Word aus Excel geöffnet
22.02.2018 19:17:34
Christian
Hallo zusammen,
seit längerem bastel ich an einer kleinen VBA-Anwendung um einem Bekannten das Leben einfacher zu machen.
Es geht um eine Rechnungserstellung.
Ca. 50 verschiedene Dienstleistungen werden mit Hilfe einer Exceltabelle verwaltet.
Adresse des Kunden, sowie abzurechnende Dienstleistungen werden zu einer Rechnungsvorschau in Excel zusammengestellt. Mit einem Makro werden die Daten in eine zu öffnende Word.dot Vorlage kopiert und die Rechnung kann gedruckt werden.
Mittlerweile hab ich sämtliche Problemstellungen lösen können, verzweifle jedoch langsam an der Auswertung der Wordevents. Ziel ist es das "Dokument1" automatisch vor dem Drucken in "NameVornameYYYYMMDD" umbenannt und gespeichert wird.
Aktueller Code:
Klassenmodul:"EventKlasse"
Public WithEvents App As Word.Application
Private Sub App_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean)
MsgBox Rechnungsname
End Sub

Modul:"Event_Verbinden_Modul"
Dim x As New EventKlasse
Sub Register_Event_Handler()
Set x.App = Word.Application
End Sub
Modul:"Rechnung_Drucken_Modul"
Option Explicit
Public AppWord As Word.Application
Public x As New EventKlasse
Sub Rechnung_Drucken()
Dim WordDoc As Word.Document
'####Word öffnen####'
On Error Resume Next
Set AppWord = GetObject(, "Word.Application")
On Error GoTo 0
If AppWord Is Nothing Then
Set AppWord = CreateObject("Word.Application")
End If
'####Vorlage öffnen####'
Set WordDoc = AppWord.Documents.Add(ThisWorkbook.Path _
& Application.PathSeparator & "Vorlage_V1.3.1.dot")
'####Register_Event_Handler####'
Set x.App = Word.Application
Set WordDoc = Nothing
Set AppWord = Nothing
End Sub

Das "MsgBox Rechnungsname" ist natürlich nicht der richtige Code sondern zum Testen.
Beim ersten Versuch klappt das ganze auch und ich bekomme die MsgBox angezeigt.
Wenn ich dann Word schließe (Excel bleibt während dessen offen) und erneut das Makro ausführe (Drucken Butten drücke) bekomme ich den
"Laufzeitfehler: 462
Der Remote-Server-Computer existiert nicht oder ist nicht verfügbar"
Ich hab wirklich schon viel gesucht, gelesen und ausprobiert (deswegen hab ich auch gemerkt das herber.de die Seite für den deutschen Exceluser ist), aber konnte bis jetzt zu keiner Lösung kommen.
Vielen lieben Dank im Voraus für eure Hilfe!
Grüße,
Christian Wagner

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eventhandling - Word aus Excel geöffnet
22.02.2018 20:51:32
Christian
Mir ist leider gerade erst aufgefallen, dass das "Event_Verbinden_Modul" hier natürlich obsulet ist.
Zu Testzwecken hab ich das Verknüpfen mit der Eventklasse direkt im "Rechnung_Drucken_Modul" vorgenommen.
Grüße
AW: Eventhandling - Word aus Excel geöffnet
22.02.2018 23:25:28
Peter(silie)
Hallo,
da gibt es ein Problem mit deiner Application oder mit dem Dokument.
Evtl. liegt es am Timing, verwendest du einen Netzwerkdrucker?
Ich glaube aber eher dass ein Object auf Nothing oder Null gesetzt ist
aufgrund eines Errors.
Ich persönlich würde keinen Handler für ein externes Objekt in Excel einbauen.
Du musst deinen Code nur etwas umstrukturieren, dann erreichst du das gleiche.
Am Samstag kann ich dir ein paar WinAPI Functions schicken die Drucker Eigenschaften zurückgeben/
prüfen usw. damit solltest du solche Probleme beheben können (falls es am Netzwerkdrucker liegt)
Zu deinem Code:
- Ein BeforePrint event kannst du dir sparen (einfach vor Print Sub in Excel was ausgeben)
- EventHandler Klassen am besten nur für interne Objekte verwenden (MSForms)
- Verwende Propertys (Get Let Set)
Hier ein Kleines Beispiel zu Get Set:
(Klassenmodul)
Option Explicit
Private app_ As Object
Private doc_ As Word.Document
'Get = Gibt Object oder Primitiven Datentyp zurück
'Set = Initialisieren eines Object
'Let = Initialisieren eines Primitiven Datentyps
'(int, "string", char, byte, float etc...)
'Zuweisen des Objektes
Public Property Set WDApplication(ByRef this_ As Object)
Set app_ = this_
End Property
'Ausgabe des Objektes
Public Property Get WDApplication() As Object
Set WDApplication = app_
End Property
'Normaler Sub
Public Sub AddDocument(ByVal path As String)
Set doc_ = app_.Documents.Add(path)
End Sub

Wenn du diesen Code in dein EventKlasse Modul schreibst,
dann würde der Aufruf aus einem Normalen Modul z.B. so aussehen:
Option Explicit
Public Sub a()
Dim ek As New EventKlasse
Dim path As String
path = "dein dateipfad"
Set ek.WDApplication = CreateObject("Word.Application")
If FileExists(path) Then
ek.AddDocument path
End If
End Sub
Private Function FileExists(ByVal path As String)
FileExists = Dir(path, vbDirectory)  vbNullString
End Function

Anzeige
Nachtrag
22.02.2018 23:33:29
Peter(silie)
Hallo,
gerade deinen Code nochmal angeschaut... hast ja alles richtig gemacht mit
den Propertys, mein Fehler!
Entschuldige meine "Belehrung"
Wird vermutlich am Terminieren oder Initialsieren eines Objektes an falscher stelle bzw
falschem zeitpunkt liegen.
wäre ein Fenster mit Druckerauswahl ok oder muss der Druck vollautomatisch passieren?
(dann brauchst du um alles abzusichern die winapi, die Print Eigenschaften von den
VBA Objekten sind ok aber schmeißen schnell fehler)
AW: Eventhandling - Word aus Excel geöffnet
23.02.2018 08:19:31
Luschi
Hallo Christian,
in den Foren wird vor dieser Deklaration immer mal wieder gewarnt:
Public x As New EventKlasse
Sondern mal soll es auflösen in:
Public x As EventKlasse
Set c = New EventKlasse
In C# wird ein Event so definiert:
public event AlarmEventHandler Alarm; (ohne new)
AlarmEventArgs e = new AlarmEventArgs(...);
Und was in .Net empfohlen wird (als Pattern), kann in Vba nicht falsch sein.
Man muß ja nicht jeden Trend mitmachen, wenn sich die alte Methode bewährt hat.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Eventhandling - Word aus Excel geöffnet
23.02.2018 08:21:32
Luschi
es muß natürlich heißen:
Set x = New EventKlasse
Gruß von Luschi
aus klein-Paris
AW: Eventhandling - Word aus Excel geöffnet
23.02.2018 13:01:18
Christian
Hallo zusammen,
@Peter:
Ja, ich denke auch das es sich um ein Fehler beim Terminieren/Initialisieren handelt, steig aber absolut nicht dahinter und hab schon ziemlich viel ausprobiert :/
Also mit Druckauswahl wäre okay. Es geht nur darum, dass die Rechnung in der endgültigen Fassung(vor Druck) nochmal gespeichert wird. Ich probiere dein Beispiel sehr gerne aus.
Vielen Dank schonmal! :)
@Luschi:
Ja, das hab ich auch schon gelesen. Macht aber keinen Unterschied.
Danke dir trotzdem :)
Grüße
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige