snowman25
Goto Top

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: 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?

Content-ID: 128021

Url: https://administrator.de/contentid/128021

Ausgedruckt am: 24.11.2024 um 03:11 Uhr

76109
76109 27.10.2009 um 14:49:33 Uhr
Goto Top
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.
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
Snowman25
Snowman25 27.10.2009 um 15:38:27 Uhr
Goto Top
Tut mir leid didi, aber dein beispiel zeigt mir auch nur 'harte' Verweise.
Ich suche ja eine Möglichkeit, Objekte bzw. deren Eigenschaften variabel auszulesen und zu ändern.
76109
76109 27.10.2009 um 18:24:07 Uhr
Goto Top
Hallo Snowman25!

Das muss Dir nicht leid tun. Mit ein wenig Phantasie hättest Du Anhand meiner Beispiele selber draufkommen könnenface-smile
starttime = CallByName(Me.OLEObjects(MB & "_start").Object, "Value", VbGet)  

Gruß Dieter
Snowman25
Snowman25 28.10.2009 um 09:27:44 Uhr
Goto Top
Danke, funktioniert wunderbar face-smile