Registriert seit: 29.09.2015
Version(en): 2030,5
Ola alle,
Wenn ich in eniem Workbook eine Klasse erstelle namens 'volgnr', kann ich eine neue Instanz machen mit:
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.
Registriert seit: 08.05.2014
Version(en): Office 2010, Office 365, Office 365 Betakanal
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) :: 2011-2019 & 2020-2022 :: 10 Awardshttps://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Registriert seit: 29.09.2015
Version(en): 2030,5
28.07.2020, 10:59
(Dieser Beitrag wurde zuletzt bearbeitet: 28.07.2020, 10:59 von snb.)
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
Ich hoffte es wäre vielleicht möglich die Klasse in Beispiel.xlsb unmittelbar zu referenzieren/instanzieren.
Registriert seit: 08.05.2014
Version(en): Office 2010, Office 365, Office 365 Betakanal
28.07.2020, 14:02
(Dieser Beitrag wurde zuletzt bearbeitet: 28.07.2020, 14:03 von maninweb.)
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) :: 2011-2019 & 2020-2022 :: 10 Awardshttps://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Registriert seit: 29.09.2015
Version(en): 2030,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:
Danke für deine Mühe.