Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1644to1648
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

Klasse in anderem Workbook instanzieren

Klasse in anderem Workbook instanzieren
12.09.2018 10:16:54
Frank
Hallo zusammen,
ich habe ein Workbook namens »module.xls«. Es enthält eine Sammlung verschiedener Module und Klassenmodule die ich in unterschiedlichen Projekten einsetze. Zum Beispiel lade ich im Workbook »projekt.xls« das Workbook »module.xls« mit
Workbooks.open(PfadZumModul & "module.xls")
Von »projekt.xls« kann ich jetzt auch problemlos auf die Subs und Functions in den normalen Modulen von »module.xls« zugreifen, z.B. so:
Ergebnis = Run("module.xls!IrgendeineFunction", Argument1, Argument2)
Wie aber instanziere ich in »projekte.xls« eine Class in einem Klassenmodul von »module.xls«? Folgendes habe ich ausprobiert, aber es funktioniert nicht.
Dim MeinObject as Object
Set MeinObject = New Run("module.xls!EineClass")

Da meckert der Compiler bereits bei der Eingabe und erwartet das Anweisungsende.
Dim MeinObject as Object
Set MeinObject = CreateObject("module.xls!EineClass")

Hier erhalte ich den Laufzeitfehler 429: Objekterstellung durch ActiveX-Komponente nicht möglich. Soweit ich es verstehe, müsste ich für diese Version erst die Registry bemühen, was ich allerdings nicht möchte.
Es ist in beiden Fällen übrigens egal, ob ich nur »module.xls« schreibe oder noch den Pfad davor setze. Aus »module.xls« möchte ich auch nicht unbedingt ein Add-In machen, wobei mein Problem dort dann wahrscheinlich auch auftreten würde.
Leider finde ich dazu nichts im Internet, aber vielleicht kann mir hier jemand helfen.

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

Betreff
Datum
Anwender
Anzeige
AW: Klasse in anderem Workbook instanzieren
12.09.2018 11:26:53
Luschi
Hallo Frank,
Du willst Kirschen pflücken, ohne zu wissen, wo der Kirschbaum steht; daß geht so nicht.
Die Klasse muß instanziiert werden in einem normalen Modul der Arbeitsmappe, in der sich auch das Klassenmodul befindet - ansonsten wäre ja die OOP ein Scheunentor für Wilderer!
Gruß von Luschi
aus klein-Paris
AW: Klasse in anderem Workbook instanzieren
12.09.2018 12:13:53
Frank
Hallo Luschi,
vielen Dank für Deine prompte Antwort! Damit ist das Problem wohl gelöst. Ich habe folgendes gemacht:
In »module.xls« eine Function in einem normalen Modul angelegt, welche die Class instanziert und die Instanz zurückgibt (»EineClass« ist meine Class):
Public Function newEineClass() As Object
Set newEineClass = New EineClass
End Function
In »projekt.xls« kann ich mir nun die Instanz wie folgt holen:
Dim dieInstanz as Object
Set dieInstanz = Application.Run("module.xls!newEineClass")
Habe zwar noch nicht alles Mögliche ausprobiert, aber bisher funktioniert es tadellos!
Viele Grüße
Frank
Anzeige
AW: Klasse in anderem Workbook instanzieren
12.09.2018 11:45:58
Der
Hallo,
man kann die Klasse auf Public stellen, dazu muss Du in den Eigenschaften der Klasse den Eintrag "Instancing" auf "2 - PublicNotCreatable" stellen.
Ob das Sinn macht oder nicht sei dahin gestellt ...
Gruß
Michael
AW: Klasse in anderem Workbook instanzieren
12.09.2018 12:27:06
Frank
Hallo Michael,
vielen Dank auch für Deine Antwort! Diesen Lösungshinweis finde ich auch interessant. Nur bleibt bei mir die Frage offen: Wie instanziere ich in »projekt.xls« diese nun öffentliche Class?
Viele Grüße
Frank
AW: Klasse in anderem Workbook instanzieren
12.09.2018 12:30:55
Der
Schau mal, ob Dir das weiterhilft:
https://support.microsoft.com/en-us/help/555159
AW: Klasse in anderem Workbook instanzieren
12.09.2018 13:27:20
Frank
Hallo Michael,
in dem Artikel ist es so ziemlich genauso beschrieben, wie ich es mithilfe von Luschis Tipp gelöst habe. Seltsamerweise macht es keinen Unterschied, ob ich die Class auf »Private« setze oder auf »Public, not creatable« – es funktioniert beides. Möglicherweise liegt es daran, dass ich »module.xls« von »projekt.xls« aus bereits geöffnet habe. Werde mal forschen – Hauptsache klappt!
Nochmals Danke und viele Grüße
Frank
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige