[VB6] Zugriff auf Document wirft Error 32809 - Anwendungs- oder objektdefinierter Fehler - Warum?

17/09/2010 - 09:03 von Dieter Strassner | Report spam
Hallo an alle,

ich steh gerade (...seit 2 Tagen) auf dem berühmten Schlauch...

Übergebe an meine VB6.DLL per

Dim objWORD as Object
Set objWord = CreateObject("Word.Application")
objWord.Documents.Add Template:=strNameDerVorlage, NewTemplate:=False
Set DLL.WordDokument = objWord.ActiveDocument

das aktive WORD-Document. An obiger Stelle kann ich im Debugfenster, als
auch im Programmcode, auf
"objWord.ActiveDocument.Name" zugreifen und erhalte "Dokument1" als
erwartetes Ergebnis korrekt zurück. So weit alles Super!

Frage ich die gleiche "Name"-Eigenschaft innerhalb der Property
"WordDokument" nach der Zuweisung ab:

Die Property in der DLL (làuft in der IDE als Projektgruppe):
Public Property Set WordDokument(newValue As Object)
Set objDoc = newValue
debug.print objDoc.name
End Property

Da ich mit LateBinding arbeite, ist objDoc so definiert:
Private objDoc As Object

VB6 verràt mir an der Stelle "debug.Print objDoc.Name" mittels IntelliSense,
dass das geladene Objekt den Namen "Dokument1" hat - soweit immer noch alles
Super.

Führe ich nun jedoch den Debug.Print -Befehl aus, erscheint der im Betreff
genannte Fehler 32809. :-(

Warum entsteht der Fehler bei Zugriff auf das übergebene Objekt. Da wird
doch intern lediglich ein Pointer übergeben! Oder nicht?
(Der hier dargestellte Fehler zeigt sich dann konsequenterweise auch bei
weiteren Abfragen auf das Objekt objDoc )

Setze ich im DLL-Projekt den Verweis auf "Microsoft WORD 8.0 Object Library"
und definiere
Private objDoc As Document
dann klappt das wieder. Warum????

Wer kann mir mir sagen, wie ich den Fuß an die richtige Stelle bekomme?


Viele Grüße

Dieter


Rückfragen bitte nur in die Newsgroup!

EDV-Kommunikation Strassner e.K.
68623 Lampertheim
Internet: www.strassner.biz
 

Lesen sie die antworten

#1 W. Wolf
17/09/2010 - 14:29 | Warnen spam
Hallo Dieter,
"Dieter Strassner" schrieb
[...]

Führe ich nun jedoch den Debug.Print -Befehl aus, erscheint der im Betreff
genannte Fehler 32809. :-(



Habe deinen Code nur so weit erweitert wie
es nötig war um ihn zu testen. Hier funktioniert
alles wie erwartet (mit spàter Bindung).
Mein Code:

Projekt1:
Private Sub Command1_Click()
Dim objWORD As Object
Dim DLL As clsDLL
Set DLL = New clsDLL
Set objWORD = CreateObject("Word.Application")
objWORD.Documents.Add Template:="Normal.dot", NewTemplate:=False
Debug.Print objWORD.ActiveDocument
Set DLL.WordDokument = objWORD.ActiveDocument
End Sub

Projekt2:
Public Property Set WordDokument(newValue As Object)
Dim objDoc As Object
Set objDoc = newValue
Debug.Print objDoc.Name
End Property

Also nichts anderes als bei dir. Der Fehler muss wo anders
im Projekt liegen. Teste doch diesen (meinen) Code 1 zu 1 in einem
ganz neuen Projekt. Nicht vergessen Verweis in Projekt1
auf Projekt2 setzen. Vielleicht kannst Du so den Fehler eingrenzen.

Schönen Gruß
W. Wolf

Ähnliche fragen