Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Klasse im Personal.xlsb referenzieren
#1
Ola alle,

Wenn ich in eniem Workbook eine Klasse erstelle namens 'volgnr', kann ich eine neue Instanz machen mit:

Code:
Set it = New volgnr

oder

Code:
Private it as New volgnr

Nun habe ich die Klasse 'volgnr' im Personal.xlsb gesetzt.

Wie kann ich nun im Workbook eine neue Instanz dieser Klasse erstellen ?
Ich weiss schon wie man Makros un Funktionen im Personal.xlsb laufen lässt (Application.Run).


NB. Ich weiss schon das das läuft wenn die Personal.xlsb Datei referenziert ist mit
Code:
Thisworkbook.VBProject.addfromfile workbooks(1).fullname.
Ich möchte aber ohne diese Referenzierung.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antwortento top
#2
Hallo,

Du kannst Dir ein Handle auf die Klasse per Application.Run zurückgeben lassen. Dazu müsstest Du in der externen Datei,
die geöffnet sein sollte, in einem Modul eine Klassenvariable und entsprechende Funktionen anlegen und dann aufrufen.

Code:
Private strName As String

Property Let Name(Data As String) 
  strName = Data 
End Property

Property Get Name() As String 
  Name = strName 
End Property


Code:
Private myClass As clsTest

Sub ExternalCreate() 
  Set myClass = New clsTest 
End Sub

Sub ExternalDestroy() 
  Set myClass = Nothing 
End Sub

Public Function ExternalHandle() As Object 
  Set ExternalHandle = myClass 
End Function

Code:
Sub ExternalCall()
 
  Dim o As Object
 
  Application.Run "Class.xlsb!ExternalCreate" 
  Set o = Application.Run("Class.xlsb!ExternalHandle") 
  o.Name = "Hallo Welt!" 
  MsgBox o.Name 
  Application.Run "Class.xlsb!ExternalDestroy"
 
End Sub

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 01/2011 - 06/2019 :: 04/2020 - 06/2021
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner (neu)
Antwortento top
#3
Ola @MiW

Danke !

Ich möchte auch application. Run vermeiden.

Was ich nun habe

in die geladene Datei 'Beispiel.xlsb' eine Klasse, namens 'volgnr'

Diese Klasse enthält nur (hier als Beipeil etwas fixes)
Code:
Property Get Value()
  Value="2020001"
End Property

Datei 'Beispiel.xlsb' hat auch ein algemeines Makromodul, namens 'volg_nr'
Diese enthällt:
Code:
Public volgnr As New volgnr

Function F_snb()
  F_snb = volgnr.Value
End Function

Nun kann ich in jedem Excel workbook diese Code verwenden:
Code:
Msgbox application.run("beispiel.xlsb!volg_nr.F_snb")

Ich möchte in jedem Workbook diese Code verwenden
Code:
MsgBox volgnr.Value

Ich hoffte es wäre vielleicht möglich die Klasse in Beispiel.xlsb unmittelbar zu referenzieren/instanzieren.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antwortento top
#4
Hallo,

was mich betrifft, mir wäre leider keine Möglichkeit bekannt, die Klasse ohne Verweis direkt zu instanziieren,
zumal eine Klasse höchstenfalls als PublicNonCreatable deklariert werden kann.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 01/2011 - 06/2019 :: 04/2020 - 06/2021
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner (neu)
Antwortento top
#5
Ola,

Ich fürchtete das schon.
Man kann sehen das Word VBA neuer ist als Excel VBA.
Jedes Dokument ist automatisch referenziert auf 'Normal.dot'.
Dann ist 'inheritance' auch Erfolgreich.
In Word kann man mit den Code die ich gezeigt habe in jedes Dokument ohne weiteres verwenden:

Code:
Msgbox volgnr.Value

Danke für deine Mühe.
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antwortento top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste