Textboxen auf mehreren Tabellenblättern durch eine Checkbox ansprechen

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Textboxen auf mehreren Tabellenblättern durch eine Checkbox ansprechen

    Hallo zusammen,

    Ich muss für die Arbeit eine Liste bzw ein Leistungsverzeichnis erstellen.
    Dieses beinhaltet Objekte die auf Baustellen montiert werden z.B ein Heizkörper.
    In Excel habe ich das jetzt so gelöst das ein Objekt ( Heizkörper ) zwei Zellen beansprucht.
    In der oberen befindet sich die Angabe wie viele Minuten die Montage dauern darf.
    In der gleichen Zelle liegt auch noch eine TextBox dort wird die Stückzahl eingegeben und weiter mir den Minuten multipliziert.
    Bedeutet also wenn ich wenn ich in der Textbox 1 Stück eingeben steht in der Zelle1 20 min. Trage ich 2 Stück ein erhöht sich die Zelle1 natürlich auf 40 min. In der unteren Zelle2 befindet sich dann nur noch das Ergebnis für die Minuten mal einem Minutenlohn( dieser wird per Hand eingeben).
    Soweit funktioniert auch alles.

    Jedoch möchte ich wenn die Liste nicht intern benutzt wird sondern in der Hand eines NU ist,
    die Textbox nicht mehr sichtbar ist und auf die Stückzahl 1 gesetzt wird.
    Das habe ich mit einem einer CheckBox und dem Code lösen können
    In dem Code befindet sich auch noch kein Befehl das die Stückzahl 1 sein soll.
    Trotzdem hier der Code

    Private Sub TextBox1_Change()

    If Range("Q1").Value = False Then
    TextBox1.Visible = True

    End If

    If Range("Q1").Value = True Then

    TextBox1.Visible = False

    End If
    End Sub

    Das alles funktioniert, aber nur auf dem gleichen Tabellenblatt.
    Wenn ich Range (“NameTB!Q1“) eingebe, dann funktioniert das auf einem anderen Tabellenblatt schon gar nicht mehr. Das andere Problem ist ich habe mehr als 300 Textboxen und durch den oben genannten Code spreche ich ja nur die einzelne Textbox an ( der Code gehört ja auch nur der Textbox)

    Meine Frage besteht also darin kann ich der Checkbox einen Code zuweisen der alle Textboxen auf allen Tabellenblättern anspricht, diese auf 1 setzt und unsichtbar macht.?

    Ich komm was das angeht nicht weiter, auch nach langem suchen in Foren.

    Vielen Dank für die Hilfe.

    LG willstus
    Sieht mir nach VBA aus...
    Würde empfehlen das in den VBA-Bereich zu schieben, damit es auch die lesen die sich mit auskennen.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    Willkommen im Forum. :thumbup:

    willstus schrieb:

    der alle Textboxen auf allen Tabellenblättern anspricht, diese auf 1 setzt und unsichtbar macht.?
    1. Beschreib mal bitte, was genau wir uns unter dieser Fragestellung vorstellen sollen.
    und 2. mach dies:

    Visual Basic-Quellcode

    1. TextBox1.Visible = Not Range("Q1").Value
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielen Dank für die Antworten

    Also ich habe im Inhaltsverzeichnis eine Checkbox die alle Textboxen unsichtbar machen soll. So stell ich mir das zumindestens vor. Diese Textboxen befinden sich allerdings auf anderen Tabellenblättern.
    Das Problem an der Sache ist einfach das ich an die 400 Textboxen habe und für jede einen Code eingeben würde eine Ewigkeit dauern. Ich würde also gerne einen Code schreiben ( auch wenn ich kaum Ahnung davon habe, aber da hoffe ich auf eure freundliche Unterstützung) der, der Checkbox zugeordnet ist und alle Textboxen anspricht.

    Um euch einfach zu zeigen wie ich mir das vorstelle hier mal ein Code der nicht funktioniert aber das beschreibt was ich gerne hätte.

    Private Sub CheckBox_Change()

    If CheckBox1.Value= True Then

    all TextBoxes.Visible = False

    Else

    If Checkbox1.Value= False Then

    all TextBoxes.Visible = True

    End If


    So einfach ist es natürlich nicht. Und ich hoffe dort kann mir jemand helfen von euch helfen.

    Noch mal danke für die Unterstützung.

    Und ich dachte ich hätte das in den VBA Bereich geschrieben das steht zum. oben im Reiter. Falls nicht entschuldige ich mich, muss aber auch zugeben das ich noch nie ein Forum benutzt habe und gerade den Weg zum verschieben nicht finde

    willstus schrieb:

    Das Problem an der Sache ist einfach das ich an die 400 Textboxen habe
    was dich irgendwann in den Wahnsinn treiben wird.
    Abgesehen von der Tatsache, dass in diesem Fall höchstwahrscheinlich das Design nicht so richtig durchdacht ist, wird Excel bei zu vielen Controls irgendwann merkwürdige Effekte zeigen.
    Das beginnt damit, dass er einzelne Controls nicht mehr richtig anzeigt und endet damit, dass er einfriert, wenn du bestimmte Controls anspricht.
    Ich hatte das vor Jahren hier mal in einem Thread ausführlich erläutert.
    Vielleicht findest du ihn ja.

    Zu deinem Problem:
    Loope durch alle Shapes und setze Visible, wenn es eine Textbox ist.
    Wie du das rauskriegst hängt erst mal davon ab, ob die Textbox ein Form-Control oder ein ActiveX-Control ist.
    Welche Art von Textboxen verwendest du?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Für ActiveX-Textboxen:

    Visual Basic-Quellcode

    1. Private Sub CheckBox1_Click()
    2. For Each t In Me.Shapes
    3. If t.Type = msoOLEControlObject Then
    4. If TypeName(t.OLEFormat.Object.Object) = "TextBox" Then
    5. t.Visible = Not CheckBox1.Value
    6. End If
    7. End If
    8. Next
    9. End Sub
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Klappt ... allerdings nur auf dem Tabellenblatt wo die Checkbox liegt.
    Wenn ich die Checkbox auf anderen Tabellenblätter kopieren möchte kommt ein

    Laufzeitfehler `438`
    Objekt unterstützt diese Eigenschaft oder Methode nicht

    Excel zeigt mir beim Debuggen dann die Zeile
    "If t.Type = msoOLEControlObject Then" an

    petaod vielen Dank für deine Hilfe.


    Mir ist gerade doch eine Idee gekommen.

    Ich kann die Checkboxen einfach verbinden und die die nicht im Inhaltsverzeichnis sind einfach auf nicht sichtbar stellen.

    Den Code den ich gemacht habe funktioniert aber nicht.

    If CheckBox1.Value = True Then Sheets("Schlauchdämmung").CheckBox1.Value = True
    End If

    Hast du eventuell eine Idee

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „willstus“ ()

    So ganz habe ich nicht verstanden, was du machen willst.

    Du hast viele Tabellenblätter mit je einer Checkbox?
    Wenn du eine Checkbox anklickst, sollen sich die anderen an diese anpassen?
    Wenn du irgendeine der Checkboxen anklickst, sollen sich im ganzen Workbook die Textboxen auf Invisible stellen?

    willstus schrieb:

    Objekt unterstützt diese Eigenschaft oder Methode nicht
    Vielleicht hast du ja irgendwelche Shapes, die nicht in das Schema passen. Dann musst du halt nachschauen, welche Shapes das sind und irgendwie anders ausschliessen.
    Das muss ja ein Control sein, das keine Property "Type" hat.
    Habe ich so noch nie gesehen.
    Was ist denn das für ein Control in t, das zum Fehler führt?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --