Excel und VB for Applications - Objekte Dynamisch ansprechen
Ich möchte verschiedene DropDown-Listen, die nach dem gleichen Muster benannt sind, nacheinander ansprechen.
Hardcoded funktioniert es mit CallByName.
Sobald ich die Anweisung in ein Muster umschreibe, wird der Run-time error 424 geworfen: 'Object required'
Ich durchlaufe mit einer Foreach-schleife ein Array, in dem 3-stellige Strings gespeichert sind und übergebe diesen String dann an eine sub 'create' mit Namen MB als Variant (foreach benötigt variant). Das funktioniert soweit auch.
Das Muster der Objekte ist so aufgebaut:
Die Sub:
mit
erhalte ich den entsprechenden Wert. Allerdings bekomme ich immer den Fehler, wenn ich es wie im obrigen Beispiel probiere.
Gibt es eine Möglichkeit, diese Objekte dynamisch aufzurufen?
Hardcoded funktioniert es mit CallByName.
Sobald ich die Anweisung in ein Muster umschreibe, wird der Run-time error 424 geworfen: 'Object required'
Ich durchlaufe mit einer Foreach-schleife ein Array, in dem 3-stellige Strings gespeichert sind und übergebe diesen String dann an eine sub 'create' mit Namen MB als Variant (foreach benötigt variant). Das funktioniert soweit auch.
Das Muster der Objekte ist so aufgebaut:
Me.<MB aus dem Array>_start
Die Sub:
Private Sub create(MB As Variant)
Dim aio
starttime = CallByName("Me." & MB & "_start", "Value", VbGet)
If Not starttime = "" Then
MsgBox "Bei " & MB & " ist ein Startwert von " & starttime & " definiert."
End If
aio = ""
End Sub
mit
CallByName(Me.AUG_start, "Value", VbGet)
erhalte ich den entsprechenden Wert. Allerdings bekomme ich immer den Fehler, wenn ich es wie im obrigen Beispiel probiere.
Gibt es eine Möglichkeit, diese Objekte dynamisch aufzurufen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 128021
Url: https://administrator.de/contentid/128021
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo Snowman25!
Ich verstehe nicht, warum Du das ganze so kompliziert machst? Warum sprichst Du die Teile nicht direkt an.
Beispiel:
Du hast in Tabelle 1 eine Text-Box mit dem Namen "TextBox1", dann kannst Du das Object von jedem Modul oder was auch immer direkt steuern.
Dein CallByName erwartet ein Object und Du übergibst nur ein String, müsste also etwas in der Art CallByName(Object("String")... heißen
Gruß Dieter
Ich verstehe nicht, warum Du das ganze so kompliziert machst? Warum sprichst Du die Teile nicht direkt an.
Beispiel:
Du hast in Tabelle 1 eine Text-Box mit dem Namen "TextBox1", dann kannst Du das Object von jedem Modul oder was auch immer direkt steuern.
sub test()
Dim Wks As Worksheet, MeineTextBox As OLEObject, Wert As String
Set Wks = Sheets("Tabelle1")
Set MeineTextBox = Wks.OLEObjects("TextBox1") 'Oder
Set MeineTextBox = Sheets("Tabelle1").OLEObjects("TextBox1")
Wert = Wks.OLEObjects("TextBox1").Object.Value 'Oder
Wert = MeineTextBox.Object.Value 'Oder
Wert = Sheets("Tabelle1").OLEObjects("TextBox1").Object.Value
End Sub
Dein CallByName erwartet ein Object und Du übergibst nur ein String, müsste also etwas in der Art CallByName(Object("String")... heißen
Gruß Dieter
Hallo Snowman25!
Das muss Dir nicht leid tun. Mit ein wenig Phantasie hättest Du Anhand meiner Beispiele selber draufkommen können
Gruß Dieter
Das muss Dir nicht leid tun. Mit ein wenig Phantasie hättest Du Anhand meiner Beispiele selber draufkommen können
starttime = CallByName(Me.OLEObjects(MB & "_start").Object, "Value", VbGet)
Gruß Dieter