Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Fehlermeldung 2147417848(80010108) Die Methode Range für das Objekt _Worksheet ist fe
#1
Hallo liebe Excel Profis,
ich brauch nochmal eure Unterstützung. Ich habe in einer Userform 3 Togglebuttons gegeneinander verriegelt so das immer nur einer aktiv ist. Bei Click wird immer der jeweilige Button auf True gesetzt und die beiden anderen auf False. Soweit funktioniert auch alles wie von mir ertüftelt. Nun soll aber je nach gedrücktem Toggle in Tabelle3 (Pflege) die Caption des Buttons geschrieben werden einfach nur als Krücke für andere Userformen später. Da taucht dann mein Problem auf.

Bei Ausführung bricht er mit der Fehlermeldung 2147417848(80010108) Die Methode Range für das Objekt _Worksheet ist fehlgeschlagen

Am Anfang habe ich die Zelle nur mit Range("B4") angesprochen das führte aber zu Stapelfehlern, weil Excel wohl jedes Change Ereignis wie ein Click Ereignis behandelt und so den ganzen Code durchläuft.
Was in der Ausgabe Zelle dann zu einem häufigen wechsel des Inhalts führt und somit zum Stapelfehler hab ich mir als Laie mal so hergeleitet.
Hab es in der Variante auch mal mit einer Warte Verzögerung versucht was sich aber in der Bedienung der Userform komisch "anfühlt" und auch nicht immer den Stapelfehler unterdrückt hat.

In einem Beitrag hier im Forum hab ich den Hinweis gefunden das die Zelle genau definiert sein soll habe dann noch ActiveWorkbook.Worksheets("Pflege"). vorne an gestellt und zumindest kein Stapelfehler mehr. Aber dafür den Laufzeitfehler  :@ 
Suche jetzt seit mehreren Stunden nach möglichen Lösungsansätzen im WWW und im Forum aber finde nichts was mich der Lösung näher bringt oder ich mit meinem kleinen Wissen begreife. Ich weiß das Togglebuttons im Programmier Sinne nicht die sauberste Lösung sind und Optionbuttons besser geeignet wären aber ich habe in der selben Userform noch eine Abfrage per Optionbuttons und wollte keine zwei und find es mit Togglebuttons auch optisch ansprechender. Auch habe ich mir angelesen das es besser wäre die Caption in eine Variable zu übergeben aber dafür reicht mein Wissen noch nicht aus man wächst an seinen Aufgaben.

Der Code zu den 3 Buttons, leider kann ich von der Arbeit nichts durch die Firewall hochladen. Falls nötig baue ich die Mappe zu Hause nochmal nach und lade sie hoch. Aber vielleicht seht ihr auf Anhieb wo ein Fehler ist.



 Private Sub ToggleButtonRegio_Click()
    If ToggleButtonSWD.Value = True Or ToggleButtonSWJ.Value = True Then
        ToggleButtonSWD.Value = False
        ToggleButtonSWJ.Value = False
        ToggleButtonRegio.Value = True
    End If
    ActiveWorkbook.Worksheets("Pflege").Range("B4") = ToggleButtonRegio.Caption
End Sub

Private Sub ToggleButtonSWD_Click()
    If ToggleButtonRegio.Value = True Or ToggleButtonSWJ.Value = True Then
        ToggleButtonRegio.Value = False
        ToggleButtonSWJ.Value = False
        ToggleButtonSWD = True
    End If
    ActiveWorkbook.Worksheets("Pflege").Range("B4") = ToggleButtonSWD.Caption
End Sub
Private Sub ToggleButtonSWJ_Click()
    If ToggleButtonRegio.Value = True Or ToggleButtonSWD.Value = True Then
        ToggleButtonRegio.Value = False
        ToggleButtonSWD.Value = False
        ToggleButtonSWJ = True
    End If
    ActiveWorkbook.Worksheets("Pflege").Range("B4") = ToggleButtonSWJ.Caption
End Sub

Vielen Dank im voraus und einen schönen Samstag
Gruß Micha
Antworten Top
#2
Hallo Micha,

versuche mal ein Value mit anzuhängen.

Code:
ActiveWorkbook.Worksheets("Pflege").Range("B4").Value = ToggleButtonRegio.Caption

mache das analog auch bei den anderen ToggleButtons.

Es wäre aber IMHO besser, du würdest die OptionButtons verwenden. Funktionalität geht vor dem Aussehen.
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#3
Hallo,

ja, mit .Value kommt es nicht mehr zum Abbruch. Es sind dann bei mir immer 562 Wiederholungen, bis es zum Stillstand kommt.
Zum Testen hab ich 3 Labels eingefügt und den Code so ergänzt:
 Private Sub ToggleButtonRegio_Click()
   Label1 = Label1 + 1
   If ToggleButtonSWD.Value = True Or ToggleButtonSWJ.Value = True Then
       ToggleButtonSWD.Value = False
       ToggleButtonSWJ.Value = False
       ToggleButtonRegio.Value = True
   End If
   ActiveWorkbook.Worksheets("Pflege").Range("B4").Value = ToggleButtonRegio.Caption
End Sub

Private Sub ToggleButtonSWD_Click()
   Label2 = Label2 + 1
   If ToggleButtonRegio.Value = True Or ToggleButtonSWJ.Value = True Then
       ToggleButtonRegio.Value = False
       ToggleButtonSWJ.Value = False
       ToggleButtonSWD = True
   End If
   ActiveWorkbook.Worksheets("Pflege").Range("B4").Value = ToggleButtonSWD.Caption
End Sub
Private Sub ToggleButtonSWJ_Click()
   Label3 = Label3 + 1
   If ToggleButtonRegio.Value = True Or ToggleButtonSWD.Value = True Then
       ToggleButtonRegio.Value = False
       ToggleButtonSWD.Value = False
       ToggleButtonSWJ = True
   End If
   ActiveWorkbook.Worksheets("Pflege").Range("B4").Value = ToggleButtonSWJ.Caption
End Sub

Private Sub UserForm_Click()
   Label1 = 0
   Label2 = 0
   Label3 = 0
End Sub

Private Sub UserForm_Initialize()
   UserForm_Click
End Sub
Mit folgendem Code verhält es sich (ohne Wiederholungen) wie mit OptionButtons:
Private Sub ToggleButtonRegio_Click()
   If Me.ActiveControl.Name = "ToggleButtonRegio" Then
       If ToggleButtonRegio.Value = True Then
           ToggleButtonSWD.Value = False
           ToggleButtonSWJ.Value = False
           Worksheets("Pflege").Range("B4").Value = ToggleButtonRegio.Caption
       Else
           ToggleButtonRegio.Value = True
       End If
   End If
End Sub

Private Sub ToggleButtonSWD_Click()
   If Me.ActiveControl.Name = "ToggleButtonSWD" Then
       If ToggleButtonSWD.Value = True Then
           ToggleButtonRegio.Value = False
           ToggleButtonSWJ.Value = False
           Worksheets("Pflege").Range("B4").Value = ToggleButtonSWD.Caption
       Else
           ToggleButtonSWD.Value = True
       End If
   End If
End Sub
Private Sub ToggleButtonSWJ_Click()
   If Me.ActiveControl.Name = "ToggleButtonSWJ" Then
       If ToggleButtonSWJ.Value = True Then
           ToggleButtonRegio.Value = False
           ToggleButtonSWD.Value = False
           Worksheets("Pflege").Range("B4").Value = ToggleButtonSWJ.Caption
       Else
           ToggleButtonSWJ.Value = True
       End If
   End If
End Sub
Gruß Uwe
Antworten Top
#4
Guten Morgen,
erstmal vielen Dank euch beiden funktioniert einwandfrei. Mit dem Label ist ein guter Kniff den kannte ich auch noch nicht.
Wenn ich darf würde ich gern noch eine Fragen stellen damit es sich in meinem tumben Schädel auch verankert.

Was berwirkt Value in dem Zusammenhang oder warum hab ich es bisher immer weggelassen ohne zu merken das es, wie
man in dem Beispiel sieht,sehr nützlich ist. Das Ergebnis ist ja das gleiche wie ohne, mal von dem Fehler abgesehen oder ist
das der Hintergrund?

Ich versuche immer mir den Code so ein bischen herzuleiten damit ich auch verstehe was ich da schreibe und was im Hintergrund damit passiert.

Wenn Knopf Regio gedrückt wird und nicht schon gedrückt ist, setze Button SWD + SWJ auf nicht gedrückt und schreibe in Zelle...den Namen des Knopfes.

If Me.ActiveControl.Name = "ToggleButtonRegio" Then                                                 Wenn der benutze Button Regio ist dann
       If ToggleButtonRegio.Value = True Then                                                                      Wenn der Button Regio den Wert gedrückt hat dann
           ToggleButtonSWD.Value = False                                                                                  setze Button SWD Wert auf nicht gedrückt
           ToggleButtonSWJ.Value = False                                                                                   setze Button SWJ Wert auf nicht gedrückt
           Worksheets("Pflege").Range("B4").Value = ToggleButtonRegio.Caption                            und ändere Tabelle Pflege.Zelle B4 Inhalt = Aufschrift Button Regio
       Else                                                                                                                           sonst
           ToggleButtonRegio.Value = True                                                                                  setze Button Regio Wert auf gedrückt

das Else bezieht sich auf den benutzten Button, habe ich das oben richtig verstanden und wieder gegeben?

Sorry falls ich offensichtiliches frage aber ich fuchs mich in Excel Stück für Stück rein.

Nochmals Vielen Dank und einen schönen Sonntag euch allen

Gruß Micha
Antworten Top
#5
Code:
Private Sub ToggleButtonRegio_Click()
    y = ToggleButtonSWD + ToggleButtonSWJ
    ToggleButtonSWD.Value = y = 0
    ToggleButtonSWJ.Value = y = 0
    ToggleButtonRegio.Value = y <> 0

    sheets("Pflege").Range("B4") = ToggleButtonRegio.Caption
End Sub

Private Sub ToggleButtonSWD_Click()
    y = ToggleButtonRegio + ToggleButtonSWJ
    ToggleButtonRegio.Value = y = 0
    ToggleButtonSWJ.Value = y = 0
    ToggleButtonSWD.Value = y <> 0
    
    sheets("Pflege").Range("B4") = ToggleButtonSWD.Caption
End Sub

Private Sub ToggleButtonSWJ_Click()
    y = ToggleButtonRegio + ToggleButtonSWD
    ToggleButtonRegio.Value = y = 0
    ToggleButtonSWD.Value = y = 0
    ToggleButtonSWJ = y <> 0

    sheets("Pflege").Range("B4") = ToggleButtonSWJ.Caption
End Sub

Unterschied:
ToggleButtonRegio.Value = True:  die Wert in ToggleButton wird geändert
ToggleButtonRegio = True ;    das Control wird aktiviert (wie 'Click')
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#6
Hallo Micha,

(04.03.2018, 07:57)kraehenseele schrieb: Was berwirkt Value in dem Zusammenhang oder warum hab ich es bisher immer weggelassen ohne zu merken das es, wie
man in dem Beispiel sieht,sehr nützlich ist. Das Ergebnis ist ja das gleiche wie ohne, mal von dem Fehler abgesehen oder ist
das der Hintergrund?
Sie dazu auch mal hier: Default: Kleines Wort - Grosse Wirkung
Es ist nie verkehrt, im Code genau zu definieren, was man will/meint, auch wenn immer mal wieder irgend jemand extra darauf hinweisen sollte, dass man das nicht braucht.

(04.03.2018, 07:57)kraehenseele schrieb: ..., habe ich das oben richtig verstanden und wieder gegeben?
alles richtig verstanden.  :28:

Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste