Clever-Excel-Forum

Normale Version: Klasse im Personal.xlsb referenzieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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.
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ß
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.
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ß
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.