forms1 in globdot aus Document_Open aufrufen -> Fehler 424

01/03/2010 - 17:27 von carsten | Report spam
[Word 2003]
Hallo;

ich schlage mich mit dem Verweis auf zentralen pflegbaren Funktionscode in
einer GlobalenVorlage rum und verstehe die genauern Zusammenhànge wohl nicht
mehr.

Ich führe bei dem öffnen eines Dokumentes mittels Document_Open() Code aus.
Dies funktioniert auch. Ich möchte, um nicht zu sagen muss, der Wartbarkeit
wegen, den Code zentral in einer GlobalenVorlage auslagern. Auch das Öffnen
über Startup ordner gelingt; der Code ist im VBAeditor einsehbar und dort in
der eigenen Datei auch ausführbar, aber nicht, und dies ist das Problem (!),
über eine Sub aus einem aufgerufenem Dok. Führe ich bei Document_Open() ein
Load formInGlobForm aus oder auch load globVorlage.formInGlobForm
(globVorlage = Dateiname der geladenen globalen Vorlageg), erhalte ich leider
immer einen LAufzeitfehler 424 - Objekt erforderlich, also mein form wird vom
offnenden Dokument nicht in der globalen Vorlage "gesehen" ! Warum dies? -
Wie geht das richtig? Hilft mir ein Verweis weiter? und warum eventuell nur
durch eine solche Maßnahme?
Danke!!!
 

Lesen sie die antworten

#1 Thomas Gahler
01/03/2010 - 21:36 | Warnen spam
Hallo carsten

Ich möchte, um nicht zu sagen muss, der Wartbarkeit
wegen, den Code zentral in einer GlobalenVorlage auslagern.


Ob "muss" oder "wollen" es ist sinnvoll, den gelichen Code nur einmal auf
dem System zu haben zu nutzen. Also ist dein Weg doch ok.


Load formInGlobForm aus oder auch load globVorlage.formInGlobForm
(globVorlage = Dateiname der geladenen globalen Vorlageg),


Du kannst keine UserForm aus der Global.dot in deiner Dokumentvorlage direkt
aufrufen. Das geht nicht. Du musst über einen Umweg arbeiten, den ich
einsetze.

Ich habe in meiner "Global.dot" ein Modul, das die Steuerung der UserFormen
übernimmt. Da hat es ein paar Funktionen drin (Laden, Entladen, IstGeladen,
PositionPrüfen) mit denen kann ich dann indirekt die UserFormen aufrufen.

Sieht dann ungefàhr so aus:



Public Function funcUserFormAnzeigen( _
ByVal CUserForm As String, _
Optional ByVal CFlag As Variant) As Integer

'Parameter 'CUserForm' auswerten.
'Hinweis: Der Befehl 'With frm...' löst automatisch ein 'Load frm...' aus,
'somit wird auch 'UserForm_Initialize' abgearbeitet.
Select Case LCase$(CUserForm)

'Formular
«AdressListe» --
Case LCase$("frmAdressListe")
With frmAdressListe
'Übergabe-Flags auswerten
If IsMissing(CFlag) Then
CFlag = False
End If
'Schaltflàche «Zurück» und «Übernehmen» manipulieren
If CFlag Then
.cmdZurück.Visible = True
.cmdÜbernehmen.Caption = "Weiter >"
.cmdÜbernehmen.Accelerator = "W"
End If
'Dialogmaske anzeigen.
.Show vbModal
End With

'Formular «Eigenschaften zu Adresse
Einfügen» -
Case LCase$("frmAdresseEinfügen")
With frmAdresseEinfügen
'AnimationsBild in Formular einfügen.
If funcExistiertDatei(cAnimationsBild) Then
.Image1.Picture = LoadPicture(cAnimationsBild)
End If


'usw.

Ich übergebe nur ein Flag an die Funktion um die Darstellung der UserForm
beeinflussen zu können. Da làsst sich jedoch bei Bedasf mehr machen. Und
dieser Code ist schon ein paar Tage alt, heute würde ich es vielleicht
anders machen.

Den Verweis benötigts du natürlich trotzdem, damit diese Funktionen genutzt
werden können.

Und da ich nicht gerne mit globalen Variablen arbeite, schreibe ich die
Werte, die in der UserForm eingefüllt werden in eine .ini-Dati und lese
diese im weiteren Verlauf des Programms wieder aus.

Allles klar, sonst melde dich wieder



Thomas Gahler
Co-Autor von »Microsoft Word-Programmierung.
Das Handbuch« (MS Press)


- Windows Vista (SP2), Office 2007 (SP2)

Ähnliche fragen