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

Instanz von Klasse nach String bennen

Instanz von Klasse nach String bennen
02.11.2022 19:50:44
Klasse
Hallo allerseits,
ich habe wieder einmal, denke ich, zwei recht einfache Fragen, nur schlägt wieder meine Unkenntnis durch:
a)
Ich habe eine Klasse namens Bauteil.
Wie ich nun Instanzen dieser Klasse erschaffe ist mir klar:

Dim Bauteil As New Bauteil
Dann habe ich eine Instanz, die der Klasse Bauteil angehört, namens Bauteil.
Nun würde ich aber gerne dieser Instanz, den Namen eines Strings geben, der sich immer wieder im Code ändert.
(Also die Instanz, direkt bei der Erschaffung, mit dem Namen des Strings versehen.)
b)
Kann man Instanzen von Klassen später noch irgendwie umbennen?
Vielen Dank im Vorraus.

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Instanz von Klasse nach String bennen
02.11.2022 23:24:21
Klasse
Hallo Shouchen,
nennt bitte deine Klasse in clsBauteil um. Es ist wichtig, Klassen und Objekt unterscheiden zu können.
Eine Variablenname hat nur eine Relevanz innerhalb des Codings. Es sollte nicht zu sehr mit dem "Verwalteltes" interferieren (oder ich habe deine Frage nicht verstanden). Vielleicht reicht es, wenn deine Klasse eine Eigenschaft "Name" hat, die Du befüllen kannst, wie es dir passt.
Um Elemente mit Namen ansprechen zu können, verwendest Du entweder "Collection" (built in) oder Dictionary (in der Bibliothek "Microsoft Scripting Runtime", die durch Extras, Verweise angebunden werden kann. Siehe davor und danach das Objekt- Katalog. Ansicht, Objekt-Katalog)
Zuerst der Wert der Eigenschaft Name setzten und die Name als Collection-Schlüssel verwenden.
Siehe auch https://excelmacromastery.com/vba-dictionary/
VG
Y'all
Anzeige
AW: Instanz von Klasse nach String bennen
03.11.2022 07:10:40
Klasse
Hallo Yáll,
danke für deine ausführliche Antwort, als erstes benenne ich dann mal die Klasse um.
Ich denke es ist auch besser, weil die Bennung dann auch schön eindeutig ist.
Was ich wollte, ist zum Beispiel ein Objekt namens: "Wasserstoffdüse" und ein Objekt: "Generator" anlegen.
Diese aber in Abhängigkeit von bestimmten Umständen erschaffen.
Nachdem ich nun "Collection" in Verbindung mit Klassen und Objekten gegoogled habe, denke ich, habe ich gefunden was ich benötige. :)
Vielen Dank nochmals!
Shouchen
Beispiel
03.11.2022 11:59:59
Yal
Hallo Shouchen,
kleine Nachtrag. Ich bin sicher, dass Du mit den Beispiele aus dem Netz weit gekommen bist.
Im Grund genommen kann man sich Excel als Beispiel nehmen: die Auslistung (engl.: collection) aller Blätter werden auch per "Name" angesprochen:

Debug.Print Worksheets("Tabelle1").Name
Wenn man es erfasst hat, sind jegliche Spielerei möglich (siehe insb. CollMonat(M.PrevMonth).DayCount ):

Sub test()
Dim CollMonat As Collection
Dim i
Dim M As clsMonat
Set CollMonat = New Collection
For i = 1 To 12
Set M = New clsMonat
M.Name = Format(DateSerial(2022, i, 1), "MMM")
CollMonat.Add M, M.Key
Next
For Each M In CollMonat
Debug.Print M.Name, M.DayCount, M.PrevMonth, CollMonat(M.PrevMonth).DayCount
Next
End Sub
Dabei ist die Klasse clsMonat wie folgt definiert:

Private pName As String
Property Get Key() As String
Key = pName
End Property
Property Let Name(newValue As String)
'SET ONLY ONCE
If pName = "" Then pName = CheckMonth(newValue)
End Property
Property Get Name() As String
Name = pName
End Property
Public Function DayCount() As Long
Dim D As Date
D = CDate("1. " & pName & " " & Year(Now))
DayCount = DateSerial(Year(D), Month(D) + 1, 1) - D
End Function
Public Function PrevMonth() As String
Dim D As Date
D = CDate("1. " & pName & " " & Year(Now))
PrevMonth = Format(DateSerial(Year(D), Month(D) - 1, 1), "MMM")
End Function
Private Function CheckMonth(strMonth As String) As String
On Error Resume Next
CheckMonth = Format(CDate("1. " & strMonth & " " & Year(Now)), "MMM")
End Function
VG
Yal
Anzeige

38 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige