Office: VBA Abfrage ob Checkboxen im Blatt sind (ActiveX)

Helfe beim Thema VBA Abfrage ob Checkboxen im Blatt sind (ActiveX) in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo, vor einiger Zeit habe ich eine Excel-Mappe mit Makros erstellt, die soweit auch gut funktionieren. Allerdings hat sich jetzt etwas... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von fette Elfe, 3. August 2010.

  1. fette Elfe Erfahrener User

    VBA Abfrage ob Checkboxen im Blatt sind (ActiveX)


    Hallo,

    vor einiger Zeit habe ich eine Excel-Mappe mit Makros erstellt, die soweit auch gut funktionieren.

    Allerdings hat sich jetzt etwas geändert, und ich finde die Lösung für die Anpassung nicht. Ich hoffe das Ihr mir dabei helfen könnt.

    bisher gegeben:
    In jedem Blatt gibt es zwei Checkboxen (1 & 2) die sich nur auf das jeweilige Blatt beziehen und auch in jedem Blatt gleich benannt sind (Checkbox1 & Checkbox2).
    Die Mappe und auch die Makros sind so variabel, dass ich Blätter nach Bedarf hinzufügen oder löschen kann und immernoch alles funktioniert.

    Jetzt ist aber das erste Blatt hinzugekommen wo ich diese Checkboxen nicht nur nicht benötige, sondern sie auch nicht gebrauchen kann.
    Und dadurch entsteht ein Problem:

    Um Bedienfehler zu minimieren wird der Wert der Checkboxen bei bestimmten Ereignissen auf "false" gesetzt, sprich die hinterlegten Funktionen werden deaktiviert.
    Aber in Blättern ohne Checkboxen finden die Makros natürlich keine und "meckern".

    Deshalb würde ich gerne Abfragen ob überhaupt Checkboxen im entsprechenden Blatt vorhanden sind und wenn nein, dann halt nichts machen, aber wenn ja, dann alle auf "false" setzen.

    Genau diese Abfrage ob es Checkboxen gibt bekomme ich nicht hin.
    Schön wäre auch wenn die Checkboxen nicht einzeln benannt werden müssten, sondern alle im Blatt (egal wieviele) auf "false" gesetzt würden.

    Mein bisheriger Code in "DieseArbeitsmappe":

    Code:
    Option Explicit
    
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        
        ActiveSheet.CheckBox1.Value = False
        ActiveSheet.CheckBox2.Value = False
        
    End Sub
    
    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    
        ActiveSheet.CheckBox1.Value = False
        ActiveSheet.CheckBox2.Value = False
    
    End Sub
    
     
    fette Elfe, 3. August 2010
    #1
  2. schatzi Super-Moderator
    Hallo!

    Frag doch einfach den Blattnamen ab.

    Code:
    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    If ActiveSheet.Name <> "Blatt_ohne_Checkboxen" Then
        ActiveSheet.CheckBox1.Value = False
        ActiveSheet.CheckBox2.Value = False
    End If
    End Sub
     
    schatzi, 3. August 2010
    #2
  3. fette Elfe Erfahrener User
    Nabend schatzi,
    wenns so einfach wäre...
    aber genau soetwas möchte ich ja vermeiden.
    Die mappe soll variabel bleiben ohne das ich ständig die Makros anpassen muss.

    Siehe:
     
    fette Elfe, 3. August 2010
    #3
  4. schatzi Super-Moderator

    VBA Abfrage ob Checkboxen im Blatt sind (ActiveX)

    Hallo!

    Und dieses eine Blatt ohne Checkboxen wechselt ständig seinen Namen?
     
    schatzi, 3. August 2010
    #4
  5. fette Elfe Erfahrener User

    Neee, aber vermutlich werden zeitweise noch andere Blätter benötigt die ebenfalls keine Checkboxen haben.
    Obendrein bin ich bei uns der Einzige der überhaupt weiß was Makros sind, aber eben nicht der Einzige der mit den Dateien arbeitet.
    D.h. ich muss immer darauf achten das die anderen Nutzer möglichst vor keinen Problemen stehen, vor allem falls ich gerade nicht da bin (krank, Urlaub, Berufsschule etc.)
     
    fette Elfe, 3. August 2010
    #5
  6. schatzi Super-Moderator
    Hallo!

    Hab' diesen Code gefunden:
    Code:
    Public Sub Haken_Loeschen()
    Dim ObjOLE  As OLEObject
       For Each ObjOLE In ActiveSheet.OLEObjects
          If TypeOf ObjOLE.Object Is MSForms.CheckBox Then
             ObjOLE.Object.Value = False
          End If
       Next ObjOLE
    End Sub
     
    schatzi, 3. August 2010
    #6
  7. Beverly
    Beverly Erfahrener User
    Hi Achim,
    Code:
    Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
        Dim oobCheckBox1 As Object
        Dim oobCheckBox2 As Object
        On Error Resume Next
        Set oobCheckBox1 = Sh.OLEObjects("CheckBox1").Object
        Set oobCheckBox2 = Sh.OLEObjects("CheckBox2").Object
        On Error GoTo 0
        If Not oobCheckBox1 Is Nothing Then oobCheckBox1 = False
        If Not oobCheckBox1 Is Nothing Then oobCheckBox2 = False
    End Sub
    
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Dim oobCheckBox1 As Object
        Dim oobCheckBox2 As Object
        On Error Resume Next
        Set oobCheckBox1 = ActiveSheet.OLEObjects("CheckBox1").Object
        Set oobCheckBox2 = ActiveSheet.OLEObjects("CheckBox2").Object
        On Error GoTo 0
        If Not oobCheckBox1 Is Nothing Then oobCheckBox1 = False
        If Not oobCheckBox1 Is Nothing Then oobCheckBox2 = False
    End Sub
    Bis später,
    Karin
     
    Beverly, 4. August 2010
    #7
  8. fette Elfe Erfahrener User

    VBA Abfrage ob Checkboxen im Blatt sind (ActiveX)

    Super!
    Ganz lieben Dank schatzi, funktioniert genauso wie ich es brauche.
    Hatte auch schon im Netz ähnliches gefunden aber nicht verstanden und nicht ans Laufen bekommen.
    Dein Code läuft und ist so einfach das ich verstehe was drin steht. *grins*


    @Beverly
    Auch Dir ganz lieben Dank für Deine Lösung.
    Ist eine andere Variante die ich mir merken werde.

    Hätte aber noch Fragen zu Deinem Code:

    1)
    Warum (was bedeutet)
    Code:
    oob
    in
    Code:
    Dim oobCheckBox1 As Object
    ???

    2)
    Was bedeutet die
    Code:
    0
    in
    Code:
    On Error GoTo 0
    ???
    Wo führt das "GoTo" hin, was passiert dann?
     
    fette Elfe, 4. August 2010
    #8
  9. Beverly
    Beverly Erfahrener User
    Hi Achim,

    Variablen sollte man bekanntlich einen Präfix aus Kleinbuchstaben voran setzen, welcher den Typ der Variablen charakterisiert. In meinem ursprünglichen Code hatte ich mich auf ein OLEObject bezogen und habe deshalb die Abkürzung OleOBject zu Grunde gelegt, also oob. Dann habe ich den Code nochmal geändert und den Typ Object verwendet und dabei vergessen, die Präfixe in obj (von Object) umzubenennen. Die Benennung von Variablen und Präfixen hat jedoch keinerlei Einfluss auf irgendeinen Code.

    Der Befehl On Error Resume Next bewirkt bekanntlich, dass bei Auftreten eines Fehlers die nächstfolgende(n) Zeile(n) durchlaufen werden, ohne dass der Debugger eine Fehlermeldung ausgibt. Nachdem die Stelle mit einem möglichen Fehler passiert ist, setzt man diese Fehlerbehandlung wieder zurück durch On Error GoTo 0. On Error GoTo ist eine Anweisung, dass bei einem auftretenden Fehler zu einer bestimmten Position im Code gegangen und die dazwischen liegenden Zeilen ignoriert werden sollen und normalerweise erwartet Excel hier eine Sprungmarke (z.B. On Error GoTo ErrorHandler). Da der Code aber weiterlaufen muss und nicht gesprungen werden soll, setzt man die Sprungmarke sozusagen ins "Nichts", also 0 (Null). Die Verwendung von GoTo ist quasi ein "Überbleibsel" aus der Basic-Programmierung, wo ja viel mit Sprungmarken gearbeitet wird.

    Übrigens, wenn du mehr als 2 CheckBoxen in deinen Tabellen hättest, aber nur die CheckBox1 und die CheckBox2 zurücksetzen willst, wäre der Code aus dem Beitrag 03.08.2010, 20:01 nicht geeignet, denn er setzt alle CheckBoxen zurück. Außerdem müssen dort erst alle OLEObjekte durchlaufen werden, nur um 2 auszuschalten - das kann bei Vorhandensein vieler OLEObjekte den Code gehörig ausbremsen. Da in deinem Fall der Vorteil besteht, dass die zurück zu setztenden CheckBoxen in allen Tabellenblättern den selben Namen haben, kann man das umgehen, indem man sie direkt anspricht - der Code sieht zwar komplizierter aus, ist aber wesentlich effektiver.

    Bis später,
    Karin
     
    Beverly, 4. August 2010
    #9
  10. fette Elfe Erfahrener User
    Hallo Beverly,

    super Erklärung. Dankeschön.

    Die Effektivität spielt diesmal zum Glück eine untergeordnete Rolle.
    Außer den CheckBoxen habe ich nur im ersten Blatt noch einen CommandButton.
    Ansonsten sind in der Datei keinerlei OleObjects vorhanden (wenn ich richtig verstanden habe was so ein OleObject ist).
    Läuft auch alles innerhalb eines Augenschlages.

    Aber, da ich mich erstens Stück für Stück in VBA einarbeite, und zweitens solche Lösungen mit Sicherheit nochmal gebrauchen kann (speichere mir sowas immer ab):

    Gibt es nicht eine Möglichkeit eine Variable als
    ObjOLE.Object vom TypeOf MSForms.CheckBox
    zu definieren, so dass nicht alle OleObjects abgearbeitet werden, sondern nur alle vorhandenen CheckBoxen?

    Damit wäre dann wieder Variabilität gegeben die ich anstrebe, es wäre egal wieviele CheckBoxen vorhanden sind, ob überhaupt eine, und auch wie sie benannt sind.
     
    fette Elfe, 5. August 2010
    #10
  11. Beverly
    Beverly Erfahrener User
    Hi Achim,

    du meinst sicher so etwas in dieser Form:
    Code:
    Sub CheckBoxen()
        Dim chbBox As CheckBox
        For Each chbBox In ActiveSheet.CheckBoxes
            MsgBox chbBox.Name
        Next chbBox
    End Sub
    Dieser Code funktioniert nur mit den CheckBoxen (bzw. bei anderer Benennung mit anderen Elementen) aus der Formular-Symbolleiste. Alle ActiveX-Steuerelemente aus der Steuerelemente-Toolbox sind jedoch OLEObjects und lassen sich nicht von Vornherein auf einen bestimmten Typ reduzieren.

    Bis später,
    Karin
     
    Beverly, 5. August 2010
    #11
  12. fette Elfe Erfahrener User
    Schade, wäre ja auch zu einfach gewesen...
    ;O)

    Danke für Deine Hilfe.
     
    fette Elfe, 7. August 2010
    #12
Thema:

VBA Abfrage ob Checkboxen im Blatt sind (ActiveX)

Die Seite wird geladen...
  1. VBA Abfrage ob Checkboxen im Blatt sind (ActiveX) - Similar Threads - VBA Abfrage Checkboxen

  2. Auslesen einer Abfrage in VBA Modul

    in Microsoft Access Hilfe
    Auslesen einer Abfrage in VBA Modul: Hallo zusammen, ich wünsche allen ein frohes und gesundes Jahr 2024. Ich habe eine alte Access 2003 und da habe ich zur Ermittlung von Planungsdaten folgende Funktion genutzt, jetzt mit Office 365...
  3. Automatisch aktualisierende Tabelle? Hilfe!! :-)

    in Microsoft Excel Hilfe
    Automatisch aktualisierende Tabelle? Hilfe!! :-): Hallo zusammen, ich habe da ein kleines Excel-Problem und komme einfach nicht auf die Lösung. Ich habe 25 riesige Tabellen und möchte diese in einer Tabelle zusammen, wenn eine bestimmte...
  4. VBA Hilfe Abfrage ob UserForm vom anderen User geöffnet ist

    in Microsoft Excel Hilfe
    VBA Hilfe Abfrage ob UserForm vom anderen User geöffnet ist: Hallo zusammen, ich und Kollegen nutzen ein Excel Arbeitsblatt mit mehreren Userforms. Zur Zeit ist es möglich, dass alle gleichzeitig die Userform öffnen. Wir möchten ein Makro schreiben, das...
  5. Primärschlüssel/Fremdschlüssel aus 2.Tabelle automatisch einfügen

    in Microsoft Access Hilfe
    Primärschlüssel/Fremdschlüssel aus 2.Tabelle automatisch einfügen: Hallo zusammen, ich stehe gerade vor dem Problem, dass ich die Datensätze zwischen zwei Tabellen nicht verknüpfen kann. Konkret habe ich die beiden Tabellen tblEigenschaft und tblBasis. In der...
  6. VBA Ja nein Abfrage mit Ausgabe

    in Microsoft Excel Hilfe
    VBA Ja nein Abfrage mit Ausgabe: Hallo zusammen, Ich versuche grade eine Tabelle für den Dienstplan meiner Fahrer einzurichten und bräuchte da hilfe. Ich habe 2 Tabellen die eine Tabelle gibt die Planung an und die 2te Tabelle...
  7. Abfrage per VBA zusammenbauen

    in Microsoft Access Hilfe
    Abfrage per VBA zusammenbauen: Hi, Ich habe in meiner Datenbank das angehängte Formular, mit dem die Datensätze (Prüfungsfragen) nach bis zu 3 verschiedenen Kriterien gefiltert werden können. Bislang habe ich 8 Verschiedene...
  8. Abfrage Kriterien in VBA Rückgabewert

    in Microsoft Access Hilfe
    Abfrage Kriterien in VBA Rückgabewert: Moin, ich habe in einer Abfrage eine VBA Funktion die mir einen Rückgabewert als Long liefert. Will ich nun in der Abfrage in den Kriterien z.B. den Wert 1 filtern so bekomme ich die...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden