HERBERS Excel-Forum - das Archiv

Thema: +/- KI - zwei Beispiele

+/- KI - zwei Beispiele
MB12
Frage an Copilot: " Excel VBA - was bedeutet "Me" " - Perfekte Antworten mit Beispielen
Gartenfest Teilnahme ja anstatt : =ZÄHLENWENN(B2:B21;"x")

=SUMMENPRODUKT(LÄNGE(KLEIN(B2:B21)) - LÄNGE(WECHSELN(KLEIN(B2:B21);"x";"")))

LG, Margarete
AW: +/- KI - zwei Beispiele
BoskoBiati
Hi,

Frage an MB12:
Was willst Du uns mit diesem Beitrag sagen?

Gruß

Edgar
AW: +/- KI - zwei Beispiele
MB12
ist das nicht selbsterklärend? KI kann sehr gut helfen, aber man sollte außerdem seinen Kopf einschalten.
AW: +/- KI - zwei Beispiele
schauan
Viele schimpfen auf MS, aber Bing bringt mir das

Wenn eine Klasse mehrere Instanzen haben kann, stellt Me eine Möglichkeit dar, um auf diejenige Instanz der Klasse zu verweisen, in der Code ausgeführt wird.
genau diese Antwort....
MB12
..... hätte mir nicht geholfen, die ausführliche Erklärung von Copilot aber schon.
AW: genau diese Antwort....
RPP63
Moin!
Manchmal hilft ja auch die VBA-Hilfe (Me markieren, F1):
https://learn.microsoft.com/de-de/office/vba/language/reference/user-interface-help/me-keyword
Klassenmodule sind nicht nur "Klassen", sondern auch die Code-Module der Tabellen, Userforms und von DieseArbeitsmappe.
Als Beispiele:
• Ich benenne ein UserForm in Mein_neues_UF um (bis zu 40 Zeichen sind erlaubt).
Wenn ich es schließen will, geht das mit
Unload Mein_neues_UF
oder eben einfacher mit
Unload Me
(Me referenziert auf die Klasse, aus der es aufgerufen wird, hier eben auf das Userform)
• Ich will per Button das Blatt, in dem sich der Button befindet, ausblenden
Allgemeines Modul:
Sub Blende_mich_aus(tbl As Worksheet)

tbl.Visible = xlSheetHidden
End Sub

Dem ActiveX-Button wird jetzt folgendes Ereignismakro zugeordnet:
Private Sub CommandButton1_Click()

Blende_mich_aus Me
End Sub


Wahrscheinlich bezieht sich Deine Anfrage darauf, dass ich in einem anderen Thread behauptet habe, dass das Schlüsselwort Me als Kennzeichner des Parent überflüssig ist, da default.
Ja, Me.Textbox1 ist zwar korrekt referenziert, aber es reicht Textbox1, wenn sich der Code im zugehörigen Klassenmodul befindet.
Befindet sich Code in einem allgemeinen Modul, ist Me ohnehin falsch!
Dann muss man korrekt referenzieren.
Hier wäre das z.B. Tabelle1.Textbox1

Two Cents
Ralf
AW: genau diese Antwort....
xlKing
Hi zusammen
Ich finde Me keinesfalls überflüssig. Ja im Userform und Tabellenblatt kann man es auch weglassen, weil es sich hier um ein bereits instanziertes Objekt handelt. Aber in der Klassenprogrammierung ist es echt hilfreich. Hier verwende ich Me z.B. gern um einem Unter-Objekt eine Parent-Eigenschaft zu setzen, die auf das Elternelement verweist. Ein simples Beispiel:

In ein Klassenmodul namens "myObjects"
Dim iParent As Object

Dim coll As New Collection
Public Function Add(Name As String) As myObject
coll.Add New myObject, Name
Set Add = coll(coll.Count)
Add.setName Name
If Not iParent Is Nothing Then Add.setParent iParent
End Function
Public Function Count() As Long
Count = coll.Count
End Function
Public Property Get item(index) As myObject
Set item = coll(index)
End Property
Friend Sub setParent(o As Object)
Set iParent = o
End Sub

In ein weiteres Klassenmodul namens "myObject"
Dim iName As String

Dim iParent As Object
Dim iSubobjects As New myObjects
Property Get Name() As String
Name = iName
End Property
Property Get Parent()
Set Parent = iParent
End Property
Friend Sub setParent(o As Object)
Set iParent = o
End Sub
Friend Sub setName(n As String)
iName = n
End Sub
Property Get Subobjects() As myObjects
Set Subobjects = iSubobjects
Subobjects.setParent Me
End Property

In ein allgemeines Modul
Sub Test()


Dim objects As New myObjects

For i = 1 To 2
objects.Add "Test" & i
For k = 1 To 3
objects.item(i).Subobjects.Add "Test" & i & "." & k
Next k
Next i


With objects.item(2).Subobjects
For i = 1 To .Count
Debug.Print .item(i).Name & " hat Elternobjekt " & .item(i).Parent.Name
Next i
End With

End Sub

Ich gebe zu, dieses Beispiel ist wenig sinnreich, weil ich vom Hauptobjekt aus die Liste der Subobjekts aufrufe. Aber wenn man viele verschiedene Klassen hat, macht es durchaus Sinn eine Parent-Eigenschaft zu verwenden. Z.B. kann sich ein Gegenstand entweder in einem Raum oder an einer Person befinden. Wenn ich nun nur ein Objekt vom Typ Gegenstand habe, will ich natürlich wissen, wo es sich befindet.

PS. Die item-Eigenschaft kann man natürlich auch als Standardeigenschaft setzen, sodass man sie nicht immer mit angeben muss. Aber das würde jetzt hier zu weit führen und wäre abseits vom Thema.

Gruß Mr. K.