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

Prozedur aufrufen mit einer Variablen

Prozedur aufrufen mit einer Variablen
26.01.2023 22:45:02
boris
Hallo liebe Leute. Ich MUSS folgendes zum laufen bringen :-) Ich will von der 'Sub Irgendwas' jenachdem eine von den '
Private Sub OptionButton 8 oder  9oder 10_Click()' aufrufen.
Sub Irgendwas ()
OpbNr = 8
Call 
Private Sub "OptionButton"  &  OpBNr  &  "_Click()"
End Sub
Private Sub OptionButton8_Click()
Private Sub OptionButton9_Click()
Private Sub OptionButton10_Click()
gibt es etwas in der Art?
Vielen Dank und viele Grüsse Boris


							

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prozedur aufrufen mit einer Variablen
26.01.2023 22:46:05
boris
keine Ahnung was hier formatiert wird ?
was wird formatiert
27.01.2023 08:41:43
Daniel
Hi
du kannst in diesem Forum Formeln oder auch VBA-Code speziell formatieren, so dass man ihn besser lesen kann (Courier als Schriftart, Einrückungen bleiben erhalten usw).
Dies kann von hand machen, in dem man den Code markiert und den entsprechenden Formatierungsbutton oberhalb der des Eingabefensters drückt.
der Forumseditor macht das aber auch automatisch, beispielsweise wenn der den Text "Sub" erkennt. Dann wird der Teil mit der Zeile von "Sub" bis "End Sub" entsprechend formatiert. Bei dir fehlt aber das "End Sub"; dh es wird immer ein neuer Formatierungsblock "aufgemacht", der dann aber nicht abgeschlossen werden kann. Dann kommt das raus.
Also entweder die Markos vollständig kopieren oder die Formatierung von Hand ausführen.
Gruß Daniel
Anzeige
AW: Prozedur aufrufen mit einer Variablen
26.01.2023 23:02:40
Yal
Hallo Boris,
die Ereignisse müssen pro Objekt definiert werden. Was gemacht wird, kann aber in einem Prozeduren zusammengefasst.
Private Sub OptionButton8_Click()
    Mache 8
End Sub
Private Sub OptionButton9_Click()
    Mache 9
End Sub
Private Sub OptionButton10_Click()
    Mache 10
End Sub
Private Sub Mache (Nr as Integer)
    Select Case Nr
    Case 8
        ...
    Case 9, 10
        ...
    Case Else
        ...
    End Select
End Sub
Eine kompakte Version kann mit Zeilentrenner (Doppelpunkte):
Private Sub OptionButton8_Click(): Mache 8: End Sub
Private Sub OptionButton9_Click(): Mache 9: End Sub
Private Sub OptionButton10_Click(): Mache 10: End Sub
VG
Yal
Anzeige
AW: Prozedur aufrufen mit einer Variablen
26.01.2023 23:25:26
boris
Hi Yal, ich schau mir das morgen früh mal an. Sieht nicht schlecht aus. Vielen Dank
AW: Prozedur aufrufen mit einer Variablen
27.01.2023 08:58:53
boris
openai und ich haben es hin bekommen, in nur zwei stunden :-)
Private Sub Frame2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
            Dim OpbNr As Variant
            For Each Ctrl In Frame2.Controls
                If Ctrl.Value = True Then
                    OpbNr = Ctrl.Name
                    Exit For
                End If
            Next
               CallByName Me, OpbNr & "_Click", VbMethod 
  End Sub
Beim öffnen wird je nachdem was in der tabelle steht ein optionbutton auf value = true gesetzt. die buttonnummer wird in der schleife ermittelt und dann an die callbynameanweisung übergeben und die 'Sub OptionButtonxxx_Click()' wird ausgeführt.
kann vielleicht für andere auch interresant sein
viele grüsse boris schönen tag euch allen
Anzeige
AW: Prozedur aufrufen mit einer Variablen
27.01.2023 09:53:10
Yal
Hallo Boris,
jetzt erkenne ich ungefähr, wie deine Frage zu interpretieren war.
Die Sinnigkeit ist mMn weiterhin zu hintergefragen.
VG
Yal
AW: Prozedur aufrufen mit einer Variablen
27.01.2023 10:02:47
boris
der sinn ist, dass die app später allen mitarbeiter zu verfügung steht und jeder fehler bei der eingabe vermieden werden muss, des halb muss an der stelle des codes nochmals die irgendeine optionbutton_click prozedur durchgeführt werden muss
AW: Prozedur aufrufen mit einer Variablen
27.01.2023 10:19:25
Yal
Ich bin bei Dir, aber ich meinte: es gibt eh schon die Ereignisprozedure pro OptionButton. Warum muss der Frame anschliessend doppelgeklickt werden, um die bereit durchgeführt Prozedere nochmal laufen zu lassen?
Ich kann mir vortstellen, dass die Anwort in Richtung: "weil anschliessend etwas auf eine Wert/Variable gemacht werden soll, dessen Verarbeitung in den jeweiligen OptionButtonX_Click abgelegt ist".
Wenn die Aktion in den Ereignisprozedure auch "von ausserhalb" angestossen werden könne sollen, dann müsse diese abgelagert werden:
Private Sub OptionButton8_Click(): Machen: End Sub
Private Sub OptionButton9_Click(): Machen: End Sub
Private Sub OptionButton10_Click(): Machen: End Sub
Private Sub Frame2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Machen
End Sub
Private Sub Machen()
    Select Case True 'Innerhalb eines Frames kann nur einen der OptBtn "True" sein.
    Case OptionButton8.Value
        ...
    Case OptionButton9.Value, OptionButton10.Value
        ...
    Case Else
        ...
    End Select
End Sub
VG
Yal
Anzeige
AW: Prozedur aufrufen mit einer Variablen
27.01.2023 10:46:35
boris
frame1 hat fünf OpB von denen je nach dem was man zuvor wählt nur bestimmte enabled sind. werden in frame2 OpB gewöhlt, müssen alle OpB in Frame1 enabled = false sein. geht man mit DblClick wieder zurück in Frame1 sollen wieder die enabled sein die es zuvor waren. das ist schon alles. und ich will noch was dazu lernen deshalb bin ich etwas stur :-)
AW: Prozedur aufrufen mit einer Variablen
27.01.2023 11:48:55
Daniel
Hi
Die Frage ist, ob sich das ganze nicht wesentlich einfacher Programmieren lässt, wenn du anstelle jeder Optionbuttongruppe bzw Frame mit Optionbutton eine Listbox verwendest.
Die Listbox kann das gleiche wie eine Optionbuttongruppe, ist aber nur ein Steuerelement und nicht viele, was für dich die Sache wesentlich einfacher macht.
Gruß Daniel
Anzeige
Hmm...
27.01.2023 12:17:20
Yal
Inspiriert von deiner Vorgabe, habe ich folgende Entwurf hergestellt. Es geht hier nicht, um "so muss es sein" sondern, so könnte es aussehen. Entdecken/Lernen kommt von verschiedenen Ansätze bewerten.
Irgendwie könnte ich mit dem Zustand speichern und Zustand zurückspielen auf keinem grünen Zweig. Alternativ bietet sich das Enabling. Die angeklickte Zustände der OptionButtons bleiben bestehen, aber ob wahrgenommen werden soll, wird durch die Abfrage der Enable-Zustand getestet
2 Frames: Frame1 und Frame2, je mit OptionButtons. Anzahl ist egal. Ein CommandButton "cmdOk".
Private Sub UserForm_Initialize()
    frmControls_aktiviere "Frame2", False
End Sub
Private Sub Frame1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    frmControls_aktiviere "Frame2", False
    frmControls_aktiviere "Frame1", True
End Sub
Private Sub Frame2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    frmControls_aktiviere "Frame1", False
    frmControls_aktiviere "Frame2", True
End Sub
Private Sub frmControls_aktiviere(frmName As String, Aktiv As Boolean)
Dim Ct
    Application.EnableEvents = False
    For Each Ct In Controls(frmName).Controls
        Ct.Enabled = Aktiv
    Next
    Application.EnableEvents = True
End Sub
Private Sub cmdOk_Click()
Dim Msg, Fr, Ct
    For Each Fr In Array("Frame1", "Frame2")
        For Each Ct In Controls(Fr).Controls
            If Ct Then Msg = Msg & vbLf & Ct.Name & " angeklick" & IIf(Ct.Enabled, " und erlaubt.", " aber blockiert.")
        Next
    Next
    MsgBox Mid(Msg, 2)  'ohne führende vbLf
End Sub
VG
Yal
Anzeige
AW: Hmm...
27.01.2023 12:45:13
boris
Userbild
im frame "Schichtmodell" wird gewählt. zb. 2 Schichten
Userbild
jetzt kann man im Frame "Schcihten" nur Früh und Spaätschicht wählen und aus dem Frame "Sonstige Zustände" nichts. Click man auf einen OpB im Frame "Sonstige Zustände" kann man nichts mehr im Frame "Schichten" wählen. Sollte man es sich anders überlegen kann man mit DblClick auf Frame "Schichten" und diese OpB wieder enabled setzen, aber und hier kommt das aktuelle ins Spiel, nur diese zwei OpB die im Schichtmodell gewählt wurden. Also wird in der DblClickFrame "Schichten"-Sub,Frame "Sonstige Zustände" unabled = false und eben die oberen zwei OpB wieder wählbar. Deshalb wird hier abgefragt, welcher Schcihtmodel/OpB gewählt wurde, und führe dies Sub, in dem Fall "2Schcihten"
Schichtmodell wählen ("2Schicht"):
Sub OptionButton10_Click()
TextBoxenSchichtModellEnabledTrue
Worksheets("einloggen").Range("D10").Value = "10"
Count = 2: ArrayAnweisung = 0: ArraySteps = 12: SetControlls = "TextBox": Reihenfolge = Array(1, 1, 2, 1, 1, 2, 1, 1, 1)
ArrayMaschine
UnterSubAllOpBEnabled
Count = 3: ArrayAnweisung = 0: ArraySteps = 5: SetControlls = "Optionbutton": Reihenfolge = Array(1, 1, 1, 1)
ArrayMaschine
End Sub die einstellung wird dann wieder hergestellt mit ebem dem diskutierten ding:
Private Sub FraSchicht_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
                 CtrlNrVon = 6: CtrlNrBis = 9: SetEnabledValue = "Value": SetWahrFalsch = False: SetControlls = "Optionbutton"
                 SteuerElementMaschine
                 CtrlNrVon = 6: CtrlNrBis = 9: SetEnabledValue = "Enabled": SetWahrFalsch = False: SetControlls = "Optionbutton"
                 SteuerElementMaschine
               Dim OpbNr As String
                    For Each Ctrl In Me.Frame1.Controls
                        If TypeName(Ctrl) = "OptionButton" And Ctrl.Value = True Then
                           OpbNr = Ctrl.Name
                           Exit For
                       End If
                    Next
               CallByName Me, OpbNr & "_Click", VbMethod
        End Sub
Falls es interresiert :-) Jedenfalls Danke für Eure Anteilnahme Grüsse
Anzeige
Konsequenterweise
27.01.2023 13:48:55
Yal
... mit einem OptionButton schalten. So ist das erwartete Verhalten sichtbar.
Userbild
OptionButton müssen nicht in einem Frame sein um zusammen zu gehören. Es reicht, wenn man die Eigenschaft "GroupName" den beiden dieselben Groupname zuordnet.
Dann der Code:
Private Sub UserForm_Initialize()
    OptBtn_Frame1.GroupName = "Grp1"
    OptBtn_Frame2.GroupName = "Grp1"
    OptBtn_Frame1.Value = 1
End Sub
Private Sub OptBtn_Frame1_Click()
    frmControls_aktiviere "Frame2", False
    frmControls_aktiviere "Frame1", True
End Sub
Private Sub OptBtn_Frame2_Click()
    frmControls_aktiviere "Frame1", False
    frmControls_aktiviere "Frame2", True
End Sub
Private Sub frmControls_aktiviere(frmName As String, Aktiv As Boolean)
Dim Ct
    Application.EnableEvents = False
    For Each Ct In Controls(frmName).Controls
        Ct.Enabled = Aktiv
    Next
    Application.EnableEvents = True
End Sub
Private Sub cmdOk_Click()
Dim Msg, Fr, Ct
    For Each Fr In Array("Frame1", "Frame2")
        For Each Ct In Controls(Fr).Controls
            If Ct Then Msg = Msg & vbLf & Ct.Name & " angeklick" & IIf(Ct.Enabled, " und erlaubt.", " aber blockiert.")
        Next
    Next
    MsgBox Mid(Msg, 2)  'ohne führende vbLf
End Sub
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige