Live-Forum - Die aktuellen Beiträge
Datum
Titel
03.05.2024 10:49:02
03.05.2024 10:43:56
03.05.2024 07:38:32
Anzeige
Archiv - Navigation
1928to1932
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

flexible Objektsuche

flexible Objektsuche
25.04.2023 17:57:18
Kla Ba

Hallo,
ich möchte meine Objektsuche flexibler gestalten. Mein Problem ist die Adressierung.
UserForm1 und Frame3 sollen aus 2 Comboboxen zusammen gesetzt werden.
Wie kann ich das erreichen? Als "Text" einsetzen funktioniert nicht.
Gruß Klaus

Sub FremdObjekte()
Dim ctrl As Object, i As Integer
With ComboBox1
.Clear
For Each ctrl In UserForm1.Frame3.Controls
.AddItem (ctrl.Name)
.List(i, 1) = (ctrl)
i = i + 1
Next ctrl
End With
Label9 = i - 1 'Anzahl Objekte
End Sub

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: flexible Objektsuche
25.04.2023 19:54:25
GerdL
Main Station,
probier mal.

Sub FremdObjekte()

Dim ctrl As Object, i As Integer
Dim UFO As Object, FRM As Object
Dim Text1 As String, Text2 As String

Text1 = "..."
Text2 = "---"


Set UFO = UserForms(Text1)
Set FRM = UFO.Frames(Text2)

With ComboBox1
    .Clear
    For Each ctrl In FRM.Controls
        .AddItem (ctrl.Name)
        .List(i, 1) = (ctrl) '?
        i = i + 1
    Next ctrl
End With

Label9 = i - 1 'Anzahl Objekte
End Sub

End Sub
Gruß Gerd


AW: flexible Objektsuche
25.04.2023 21:34:45
Kla Ba
Hallo Gerd,
funktioniert leider nicht. Text wird vom Objekt nicht angenommen. Fehlermeldung: >Typen unverträglich.
Gruß Klaus


Anzeige
AW: flexible Objektsuche
25.04.2023 21:38:20
GerdL
Hallo Klaus,

dazu kann ich ohne zu wissen, was du den Variablen Text1 u. Text2 zugewiesen hast u. ohne deine Datei
wenig sagen.

Gruß Gerd


AW: flexible Objektsuche
25.04.2023 21:57:45
Kla Ba
Hallo Gerd,
zur Prüfung habe ich alles in dieser Routine untergebracht. Dimensionierung und die Variablenzuweisung.
Gruß Klaus

Sub FremdObjekte()
Dim ctrl As Object, i As Integer, Text1 As String, Text2 As String, UFO As Object, FRM As Object
Text1 = "UserForm1"
Text2 = "Frame3"
Set UFO = UserForms(Text1)
Set FRM = UFO.Frames(Text2)
With ComboBox1
.Clear
For Each ctrl In FRM.Controls
.AddItem (ctrl.Name)
.List(i, 1) = (ctrl) 'Standartwert vom Steuerelement(.Caption oder .Text u.a.)
i = i + 1
Next ctrl
End With
Label9 = i - 1 'Anzahl Objekte
End Sub




Anzeige
AW: flexible Objektsuche
25.04.2023 23:10:37
Oberschlumpf
Hi,

da sich dein Sub FremdObjekte - außerhalb! - eines Ereignisevents deines Userforms befindet, muss es schon hier...

With ComboBox1
...zu einem Fehler kommen, da der Code "gar nich weiß", WO sich denn Combobox1 befindet.

Außerdem wolltest du doch eine ComboBox INNERHALB eines Frames ansprechen, oder?
Dann müsstest du wahrscheinlich eher so schreiben:


With FRM.ComboBox1
Ich weiß jetzt ohne testen nicht genau, ob das die richtige Syntax ist - aber ich kann ja nicht testen, weil wir deine Excel-Bsp-Datei, von dir per Upload gezeigt, noch nicht kennen.

Konnte ich denn helfen?

Ciao
Thorsten


Anzeige
AW: flexible Objektsuche
25.04.2023 23:45:53
Kla Ba
Hallo Thorsten,
die Steuerelemente, die sich auf einer Userform befinden, sind aus jeder Sub-Prozedur aufrufbar. ComboBox1 spreche ich mit dem Namen an.
Mit der Suche im Frame begrenze ich das Suchfeld. Ich kann auch auf der UserForm suchen und finde ComboBox1.
> Der Code funktioniert so nicht! es sei denn, ich gebe den Pfad >UserForm1.Frame3 direkt ein, statt FRM.
Gruß Klaus

Sub FremdObjekte()
    Dim ctrl As Object, i As Integer, Text1 As String, Text2 As String, UFO As Object, FRM As Object
    Text1 = "UserForm1"
    Text2 = "Frame3"
    Set UFO = UserForms(Text1)
    Set FRM = UFO.Frames(Text2)
    With ComboBox1
        .Clear
        For Each ctrl In FRM.Controls
            .AddItem (ctrl.Name)
            .List(i, 1) = (ctrl) 'Standartwert vom Steuerelement(.Caption oder .Text u.a.)
            i = i + 1
        Next ctrl
    End With
    Label9 = i - 1 'Anzahl Objekte
End Sub


Anzeige
AW: flexible Objektsuche
26.04.2023 00:40:19
Oberschlumpf
Hi Klaus,

und ohne eine von dir per Upload gezeigte Bsp-Datei mit allem, was erforderlich ist, kann zumindest ich noch immer nicht testen.
Aber ok, kein Problem, is ja deine Entscheidung...

Ciao
Thorsten


AW: flexible Objektsuche
26.04.2023 01:21:28
Kla Ba
Hallo Thorsten,
mein privates Projekt an dem ich z.Zt. arbeite ist zu Umfangreich um alles Hochzuladen. Es sind diverse Sub-Prozeduren die untereinander über Steuerelemente
kommunizieren. Wer den Code testen möchte braucht eine UserForm, 1 Rahmen mit Steuerelementen (Label, TextBoxen, Image u.a.) und eine ComboBox1 mit
2 Spalten, die irgendwo plaziert wird. Der Pfad der jetzt mit FRM besetzt ist, muß durch > UserForm1.Frame1.Controls ersetzt werden.
Frame1 wenn nur Rahmen vorhanden ist. Bei mir läuft der Code
Gruß Klaus.


Anzeige
AW: flexible Objektsuche
26.04.2023 01:31:03
Kla Ba
Hatte ich vergessen. Meine Prozedur steht in UserForm2.


AW: flexible Objektsuche
28.04.2023 13:17:29
Mullit
Hallo,

Deine Syntax ist falsch, statt:
Set UFO = UserForms(Text1)
Set FRM = UFO.Frames(Text2)
mach:
Set UFO = UserForms.Add(Text1)
Set FRM = UFO.Controls(Text2)
Gruß, Mullit


AW: flexible Objektsuche
28.04.2023 22:23:05
Kla Ba
Hallo Mullit,
ich habe Deinen Vorschlag befolgt, funktioniert leider nicht.
Ich habe ein Programm mit 2 UserForms und diversen Steuerelementen geschrieben, das mein Problem nachvollziehbar macht.
Es funktioniert gut, bis auf die letzte Adressierung. Ich ist der Link zum Download https://www.herber.de/bbs/user/158956.xlsm

Gruß Klaus


Anzeige
AW: flexible Objektsuche
28.04.2023 22:58:50
Kla Ba
Habe Haken vergessen !


AW: flexible Objektsuche
29.04.2023 16:41:48
Mullit
Hallo Klaus,

weiß jetzt sowiewo nicht genau was Du vorhast, aber gut, hast die Korrektur doch schon eingesetzt: bei mir läuft der Code schon mal fehlerfrei mit der Korrektur für Auswahl Form2 in der Combobox...Für Form1 wird ein Fehler geworfen, wenn das Control auf Form2 nicht vorhanden ist, logisch, müsstest Du noch abfangen...

Gruß, Mullit


AW: flexible Objektsuche
29.04.2023 17:44:10
Kla Ba
Hallo Mullit,
Dein Tipp hat mir nur zur Hälfte geholfen. Die Fehlermeldung, die Du bekommen hast, ist mein Problem.
Wie muß der Code hinter der IF Abfrage aussehen, damit die Adressierung variabel wird?
Ich habe das Programm nochmal überarbeitet und einige Änderungen vorgenommen. https://www.herber.de/bbs/user/158960.xlsm
Gruß Klaus

Private Sub testSteuerelement()
    Dim ctrl As Object, UFo As Object, frm As Object, gelb As Long
    gelb = 65535
    Set UFo = UserForms.Add(ComboBox1.Text)
    'Set frm = UFo.Controls(ComboBox2.Text)
    '
    For Each ctrl In UFo.Controls
        If (ctrl.Name) = ComboBox2.Text Then UserForm2(ctrl.Name).BackColor = gelb
    '
    MsgBox (ctrl.Name)
    Next ctrl
End Sub


Anzeige
AW: flexible Objektsuche
30.04.2023 19:27:18
Kla Ba
Hallo Mullit,

dank Deiner Hilfe laufen die Schleifen gut. Nur das Schreiben haut nicht hin.
Bei der Eingabe von UFo(ctrl.name).Backcolor kommt keine Fehlermeldung, aber er schreibt nicht.
Mir ist aufgefallen, daß von den ToggleButton.Value nur die Standart- bzw. Startwerte angezeigt werden - nicht die aktuellen Werte.
Mit den Farben verhält es sich genauso.
Kann es sein, das UFo ins Leere schreibt?
Mit UserForm direkter Code funktioniert es?
Anbei meine neueste Version ==> https://www.herber.de/bbs/user/158972.xlsm

Gruß Klaus


Anzeige
AW: flexible Objektsuche
01.05.2023 15:02:40
Mullit
Hallo,

die Fehlermeld. kannst ja einfach mit On Error abfangen, oder Du loopst ehrlich durch die Controls...aber mit dem Schreiben u. Lesen ist mir immer noch nicht ganz klar wozu das ganze eigentl gut sein soll...erklär viell mal den Sinn der Geschichte...;-)
'...
On Error GoTo ErrorHandler
    For Each ctrl In UFo.Controls
        If ctrl.Name = ComboBox2.Text Then UserForm2(ctrl.Name).BackColor = gelb  'UFo.BackColor = gelb
    '
        Call MsgBox(ctrl.Name)
    Next ctrl
ErrorHandler:
    If Err.Number > 0 Then Call MsgBox(Err.Number & vbCr & Err.Description, vbCritical, "Error")
'...
Gruß, Mullit


Anzeige
AW: variable Adressierung
01.05.2023 17:40:35
Kla Ba
Hallo Mullit,

ich habe 2 UserForms, UserForm1 beinhaltet das Hauptprogramm, die andere soll UserForm1 während der Laufzeit bearbeiten können.
Auf der 2. UserForm stehen mir bereits 16 Mio. Farben zur Verfügung. Mit der Navigation kann ich einzelne oder Gruppen von Steuerelementen
ansprechen und z.B. die Farben dem Hintergrund (z.B. Internetseite) anpassen und speichern.
Da mir Programmieren Spaß macht und ich diverse Projekte angehen möchte, ist so ein Werkzeug doch hilfreich.
Meine Programmierkenntnisse (nur Bücher & Internet) sind eher bescheiden. Durch Gerd und Dich, ist mir klar geworden, daß ich in Sachen
"On Error" und "Control" mein Wissen aufbessern sollte.
Wie loopt man denn durch die Controls?

Gruß Klaus


AW: variable Adressierung
02.05.2023 13:46:24
Mullit
Hallo Klaus,
Wie loopt man denn durch die Controls?
damit war umgangsspr. gemeint per Schleife durch die Controls Coll zu gehen, funktioniert hier aber genauso gut mit Fehlerbeh.
Bei der Eingabe von UFo(ctrl.name).Backcolor
in Deinem Code steht aber:
UserForm2(ctrl.Name).BackColor
Du schreibst also immer in Form2, ist das Control da nich vorhanden, wird auch nix gefärbt, logisch...;-)
Klaro über Forumsbsp von den Pros und e books dazulernen geht ja immer...ist nie verkehrt....;-)
Mal zwei Links zur Fehlerbeh., die Seiten sind auch allg. sehr gut...

https://www.online-excel.de/excel/singsel_vba.php?f=144
http://www.cpearson.com/Excel/ErrorHandling.htm

Gruß, Mullit


AW: variable Adressierung
03.05.2023 12:31:38
Kla Ba
Hallo Mullit,

danke für die Lektüre, das wird mein nächstes Thema. Dennoch bleibt mein Problem offen.
Der Code >UserForm2(ctrl.Name) funktioniert, ist aber nur zum Teil variabel.
>UFo(ctrl.Name) ist nur ein Verweis auf das Steuerelement mit den Startwerten, - aber nicht auf das Steuerelement mit den aktuellen Einstellungen.
Wo finde ich das Steuerelement mit den aktuellen Einstellungen?
Bei meiner Testroutine habe ich den Code teilweise anders gestaltet und auch die - Suche im Rahmen - mit eingebunden. https://www.herber.de/bbs/user/159013.xlsm

Gruß Klaus


AW:offen: variable Adressierung in Forms?
06.05.2023 15:56:13
Kla Ba
Die Frage ist noch offen.


ich lass mal offen...
26.04.2023 01:41:45
Oberschlumpf
Hi Klaus,

...und ich hab es mir abgewöhnt, Testdateien "nach Anleitung nachzubauen".
Denn zu oft hab ich es schon erlebt, wenn ich denn selbst eine Testdatei erstellt hatte, dass dann vom Fragenden trotzdem noch Hinweise kamen, wie z Bsp "geht immer noch nicht, weil in meiner Datei ist noch dies + das anders..." usw

Aber ich wünsch dir weiter viel Erfolg!

Ciao
Thorsten


AW: ich lass mal offen...
30.04.2023 20:50:37
Kla Ba
Hallo Thorsten,

ich habe ein Testprogramm geschrieben, daß mein Problem verdeutlicht.
Kannst Du damit etwas anfangen? https://www.herber.de/bbs/user/158972.xlsm
Wie muß der Code hinter der IF Abfrage aussehen, damit die Adressierung variabel wird?
>UserForm2(ctrl.Name).BackColor = gelb so funktioniert er, ist aber nicht variabel.

Private Sub testSteuerelement()
    Dim ctrl As Object, UFo As Object, frm As Object, gelb As Long
    gelb = 65535
    Set UFo = UserForms.Add(ComboBox1.Text)
    Set frm = UFo.Controls(ComboBox2.Text)
    '
    For Each ctrl In UFo.Controls
        If (ctrl.Name) = ComboBox2.Text Then UserForm2(ctrl.Name).BackColor = gelb
    '
    MsgBox (ctrl.Name)
    Next ctrl
End Sub
Gruß Klaus


AW: ich lass mal offen...
01.05.2023 11:15:30
Oberschlumpf
Hi Klaus,

du hast doch schon 2 Helfer - wir woll'n ja nich übertreiben :-)
Ich helf mal den anderen Fragenden.

Ciao
Thorsten


AW: flexible Objektsuche
30.04.2023 12:42:05
GerdL
Hallo
Private Sub CommandButton1_Click()

Dim ctrl As Object, i As Integer
Dim UFO As Object, FRM As Object
Dim Text1 As String, Text2 As String

Text1 = "...."
Text2 = "...."


Set UFO = UserForms.Add(Text1)
On Error Resume Next
Set FRM = UFO.Controls(Text2)
On Error GoTo 0


With ComboBox1
    .Clear
    If FRM Is Nothing Then
    .AddItem "nix"
    Else
    For Each ctrl In FRM.Controls
        .AddItem (ctrl.Name)
        i = i + 1
    Next ctrl
    If .ListCount = 0 Then .AddItem "nix"
    End If
End With

Label9 = i - 1 'Anzahl Objekte
End Sub
Gruß Gerd


AW: flexible Objektsuche
30.04.2023 14:16:06
Kla Ba
Hallo Gerd,

danke für Deine Mühe, die Befüllung der ComboBoxen hat sich erledigt bzw. verlagert.
Mittlerweile habe ich eine Testplattform programmiert ==> https://www.herber.de/bbs/user/158960.xlsm

Das Problem:
Wie muß der Code hinter der IF Abfrage aussehen, damit die Adressierung variabel wird?
UserForm2(ctrl.Name).BackColor = gelb

Private Sub testSteuerelement()
    Dim ctrl As Object, UFo As Object, frm As Object, gelb As Long
    gelb = 65535
    Set UFo = UserForms.Add(ComboBox1.Text)
    Set frm = UFo.Controls(ComboBox2.Text)
    '
    For Each ctrl In UFo.Controls
        If (ctrl.Name) = ComboBox2.Text Then UserForm2(ctrl.Name).BackColor = gelb
    '
    MsgBox (ctrl.Name)
    Next ctrl
End Sub
Gruß Klaus

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige