Office: Command Buttons programmieren - Zählen

Helfe beim Thema Command Buttons programmieren - Zählen in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo liebe Kenner:) Ich hoffe ihr könnt mir helfen, da ich absoluter VBA Laie bin! habe insgesamt 9 CommandButtons und möchte das jeder einzelne... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Micha2104, 4. März 2010.

  1. Micha2104 Erfahrener User

    Command Buttons programmieren - Zählen


    Hallo liebe Kenner:)

    Ich hoffe ihr könnt mir helfen, da ich absoluter VBA Laie bin!

    habe insgesamt 9 CommandButtons und möchte das jeder einzelne meinen Klick in 2 Zellen zählt also +1 und andere Zellenwerte auf 0 setzt

    wenn ich einen der neun buttons klicke möchte ich das nur dieser Klick gezählt wird und alle anderen "klickzählstände" der anderen Buttons wieder auf 0 gesetzt werden - und das bei jedem Button!

    Es wäre super, wenn beim Klick die Spalte UND Zeile +1 addiert wird...in meinem Beispiel wäre das beim Klick auf den Button oben links (C4), dass Zelle B4 und B9 +1 addieren und alle anderen gehen auf 0, nur ich möchte gern, dass JEDER Button diese Funktion des addierens und auf null setzen hat?!

    Wer kann helfen, wäre sehr dankbar!

    Vielen Dank schon mal vorab!!
     
    Micha2104, 4. März 2010
    #1
  2. Hajo_Zi
    Hajo_Zi Erfahrener User
    Hallo Micha,

    Du schreibst von CommandButton und das die schon was machen, da gehe ich von VBA aus. In einer XlsX Datei kann kein VBA sein.
    Der Dateiname sollte was mit dem Problem zu tun haben. Ich habe mir z.B. einen Ordner angelegt in dem ich alle Dateien aus dem Internet speichere. Bei Dateinamen wie Test., Mappe.., Beispiel wird eine vorhandene überschrieben.

    Gruß Hajo
     
    Hajo_Zi, 4. März 2010
    #2
  3. Beverly
    Beverly Erfahrener User
    Hi Micha,

    ich weiß nicht, ob ich dein Anliegen richtig verstanden habe. Ich habe mal versucht das umzusetzen, was ich aus deiner Beschreibung interpretiert habe.

    Bis später,
    Karin

    PS: bei dem Beispiel werden beim Öffnen der Arbeitsmappe alle Zählerstände auf 0 gesetzt.
     
    Beverly, 4. März 2010
    #3
  4. Micha2104 Erfahrener User

    Command Buttons programmieren - Zählen

    Hi Karin,

    danke, dass kommt meiner Vorstellung schon sehr nahe, jetzt wäre es noch super wenn du folgendes einbauen könntest:

    Zur besseren Übersicht habe ich jetzt die Spalten gekennzeichnet um Verwechslungen auszuschliessen - jede Spalte hat also 3 Buttons untereinander!

    Ich würde gern, dass der Zähler unten, also für die Spalte, immer hochzählt und zwar bei jedem klick auf einen der 3 buttons, der zähler soll erst auf 0 zurück gehen sobald ich einen button der anderen spalte klicke....

    ist kompliziert ich weiß:)

    Hast du da ne Lösung?! Wäre super

    Liebste Grüße

    Micha
     
    Micha2104, 5. März 2010
    #4
  5. Beverly
    Beverly Erfahrener User
    Hi Micha,

    ergänze im allgemeinen Modul bei den Variablendeklarationen zusätzlich

    Code:
    Public inSpalte As Integer
    und ändere den Code im Klassenmodul wie folgt:

    Code:
    Private Sub cmbSchalter_Click()
        If Cells(cmbSchalter.TopLeftCell.Row, cmbSchalter.TopLeftCell.Column).Address <> strAdresse Then
            strAdresse = Cells(cmbSchalter.TopLeftCell.Row, cmbSchalter.TopLeftCell.Column).Address
            If inSpalte <> cmbSchalter.TopLeftCell.Column Then
                Range("B4,B6,B8,C9,E9,G9") = 0
            Else
                Range("B4,B6,B8") = 0
            End If
        End If
        Cells(cmbSchalter.TopLeftCell.Row, 2) = Cells(cmbSchalter.TopLeftCell.Row, 2) + 1
        Cells(9, cmbSchalter.TopLeftCell.Column) = Cells(9, cmbSchalter.TopLeftCell.Column) + 1
        inSpalte = cmbSchalter.TopLeftCell.Column
    End Sub
    
    Bis später,
    Karin
     
    Beverly, 5. März 2010
    #5
  6. Micha2104 Erfahrener User
    Hi Karin,

    was wäre die Welt ohne dich:)

    hab es probiert und klappt wunderbar, aber leider ist mir nun noch was aufgefallen:)

    kann man nun auch so weit gehen, dass er auch die Zeilenklicks zählt? Also genau das selbe was du jetzt mit den Spalten gemacht hast zusätzlich auch nochmal mit den Zeilen?!

    Also klicks innerhalb einer Zeile zählen und die anderen auf 0 setzen?!

    Ich hoffe das es auch das letzte Mal war zwecks Nachbesserung, nochmal vielen Dank!!!
     
    Micha2104, 5. März 2010
    #6
  7. Beverly
    Beverly Erfahrener User
    Hi Micha,

    das stand aber so nicht in deinem zweiten Beitrag.

    Ergänze im allgemeinen Modul
    Code:
    Public inZeile As Integer
    
    und ändere den Code im Klasenmodul:
    Code:
    Private Sub cmbSchalter_Click()
        If strAdresse <> "" Then
            If Cells(cmbSchalter.TopLeftCell.Row, cmbSchalter.TopLeftCell.Column).Address <> strAdresse Then
                strAdresse = Cells(cmbSchalter.TopLeftCell.Row, cmbSchalter.TopLeftCell.Column).Address
                If inSpalte <> cmbSchalter.TopLeftCell.Column And inZeile <> cmbSchalter.TopLeftCell.Row Then
                    Range("B4,B6,B8,C9,E9,G9") = 0
                Else
                    If inSpalte <> cmbSchalter.TopLeftCell.Column Then Range("C9,E9,G9") = 0
                    If inZeile <> cmbSchalter.TopLeftCell.Row Then Range("B4,B6,B8") = 0
                End If
            End If
        End If
        Cells(cmbSchalter.TopLeftCell.Row, 2) = Cells(cmbSchalter.TopLeftCell.Row, 2) + 1
        Cells(9, cmbSchalter.TopLeftCell.Column) = Cells(9, cmbSchalter.TopLeftCell.Column) + 1
        inSpalte = cmbSchalter.TopLeftCell.Column
        inZeile = cmbSchalter.TopLeftCell.Row
    End Sub
    
    Bis später,
    Karin
     
    Beverly, 5. März 2010
    #7
  8. Micha2104 Erfahrener User

    Command Buttons programmieren - Zählen

    Ja ich weiß, aber wenn etwas entsteht kommen einen die meisten Ideen:) was nicht heißen soll, dass du dich hier für mich verbiegen sollst, nein du hast schon ziemlich viel getan!

    Aber:)

    Mit den neuen Formeln zählt er jetzt die Zeilen- und Spaltenklicks ohne irgendwelche Zählstände zu löschen....siehe Anhang!

    Ziel des Tools soll es sein, dass ich sehen kann wenn eine der 3 Zeilen oder Spalten 4x hintereinander geklickt wurde bzw. gezählt wurde, hoffe du verstehst was ich meine?!

    Deine erste Variante war schon gut, denke die muss nur optimiert werden?!

    Wäre dir nochmals dankbar!!!! Hast einen gut*g*
     
    Micha2104, 5. März 2010
    #8
  9. Beverly
    Beverly Erfahrener User
    Hi Micha,

    nur zur Information und zum Verständnis: es sind keine Formeln, sondern es ist VBA-Code.

    So müsste es jetzt richtig funktionieren:
    Code:
    Private Sub cmbSchalter_Click()
        If Cells(cmbSchalter.TopLeftCell.Row, cmbSchalter.TopLeftCell.Column).Address <> strAdresse Then
            strAdresse = Cells(cmbSchalter.TopLeftCell.Row, cmbSchalter.TopLeftCell.Column).Address
            If inSpalte <> cmbSchalter.TopLeftCell.Column And inZeile <> cmbSchalter.TopLeftCell.Row Then
                Range("B4,B6,B8,C9,E9,G9") = 0
            Else
                If inSpalte <> cmbSchalter.TopLeftCell.Column Then Range("C9,E9,G9") = 0
                If inZeile <> cmbSchalter.TopLeftCell.Row Then Range("B4,B6,B8") = 0
            End If
        End If
        Cells(cmbSchalter.TopLeftCell.Row, 2) = Cells(cmbSchalter.TopLeftCell.Row, 2) + 1
        Cells(9, cmbSchalter.TopLeftCell.Column) = Cells(9, cmbSchalter.TopLeftCell.Column) + 1
        inSpalte = cmbSchalter.TopLeftCell.Column
        inZeile = cmbSchalter.TopLeftCell.Row
    End Sub
    
    Du schreibst
    Was soll denn in diesem Fall passieren? Derzeit zählt der Code ja unendlich weiter, es gibt also keine Begrenzung auf 4 in einer Zeile oder Spalte.

    Bis später,
    Karin
     
    Beverly, 5. März 2010
    #9
  10. Micha2104 Erfahrener User
    Guten Morgen Karin,

    ok da sind Makros und wie kann man das lernen?! Stell mir das schwierig vor?!

    So zum Tool:)

    Also in deiner neuesten Version zählt er zwar aber setzt keinen Zählerstand mehr auf 0 zurück...

    Also ich muss sehen welche Zeile / Spalte 4x hintereinander kam....und wenn zwischenduch eine andere Zeile / Spalte gedrückt wurde muss diese anfangen mit hochzählen und dafür aber die anderen auf 0 zurück setzten, da ich sonst ja nicht bei 0 anfangen wenn ich sie wieder drücke?!

    Kann mann das begrenzen mit zählen, also das jeder Zählerstand nur bis 8 (statt wie vorher genannt 4) geht und dann wieder auf 0 springt?

    Als Ergebnis möchte ich also (bei x beliebiger Klickfolge) das ich sehen kann welche Spalte ODER Zeile 4x oder mehr (bis 8) angeklickt wurde. Betrachte also die Buttons (jeweils 3) nur als Zeile oder Spalte.

    Vielleicht kannst du mir empfehlen wie man sich diese Programmierung selber beibringen kann?

    Vielen Lieben Dank

    anbei nochmal das Tool mit deinen letzen Makro
     
    Micha2104, 6. März 2010
    #10
  11. Beverly
    Beverly Erfahrener User
    Hi Micha,

    Kann ich nicht nachvollziehen, es wird korrekt die betreffende Zelle auf 0 gesetzt. Beispiel:

    1. in allen Zellen 0
    2. Button in C4 -> in B4 und C9 steht jeweils 1
    3. Button in C4 -> in B4 und C9 steht jeweils 2
    4. Button in C6 -> in B6 steht 1, in B4 steht 0, in C9 steht 3
    5. Button in E4 -> in B6 steht 0, in B4 steht 1, in C9 steht 0 und in E9 steht 1
    6. Button in G4 -> in B4 steht 2 , in E9 steht 0 und in G9 steht 1
    7. Button in G6 -> in B4 steht 0, in B6 steht 1 und in G9 steht 2

    Und das ist genau das, was du wolltest - es wird immer in der betreffenden Zeile bzw. Spalte gezählt. Sind Zeile oder Spalte vreschieden vom vorhergehenden Button, wird in der betreffenden Zeile bzw. Spalte auf 0 gesetzt.

    Damit angezeigt wird, welche Zelle 4 enthält, ändere den Code wie folgt:
    Code:
    Private Sub cmbSchalter_Click()
        Dim raZelle As Range
        If Cells(cmbSchalter.TopLeftCell.Row, cmbSchalter.TopLeftCell.Column).Address <> strAdresse Then
            strAdresse = Cells(cmbSchalter.TopLeftCell.Row, cmbSchalter.TopLeftCell.Column).Address
            If inSpalte <> cmbSchalter.TopLeftCell.Column And inZeile <> cmbSchalter.TopLeftCell.Row Then
                Range("B4,B6,B8,C9,E9,G9") = 0
            Else
                If inSpalte <> cmbSchalter.TopLeftCell.Column Then Range("C9,E9,G9") = 0
                If inZeile <> cmbSchalter.TopLeftCell.Row Then Range("B4,B6,B8") = 0
            End If
        End If
        Cells(cmbSchalter.TopLeftCell.Row, 2) = Cells(cmbSchalter.TopLeftCell.Row, 2) + 1
        Cells(9, cmbSchalter.TopLeftCell.Column) = Cells(9, cmbSchalter.TopLeftCell.Column) + 1
        inSpalte = cmbSchalter.TopLeftCell.Column
        inZeile = cmbSchalter.TopLeftCell.Row
        Set raZelle = Range("B4,B6,B8,C9,E9,G9").Find(4, lookat:=xlWhole)
        If Not raZelle Is Nothing Then
            MsgBox "Zelle " & raZelle.Address & " hat den Wert 4 erreicht"
            Range("B4,B6,B8,C9,E9,G9") = 0
        End If
        Set raZelle = Nothing
    End Sub
    
    Bis später,
    Karin

    PS: Programmieren kann man genau so lernen wie jedes andere Fach in der Schule. Besorge dir Literatur, zeichne Code mit dem Makrorekorder auf und bearbeite ihn anschließend, schaue dir die Beispiele in den Foren an und baue sie nach - Übung macht den Meister. ;-)
     
    Beverly, 6. März 2010
    #11
  12. Micha2104 Erfahrener User
    Hallo Karin,

    so jetzt klappt es wunderbar!

    Als Bonus bzw. I-tüpfelchen wäre es jetzt schön, wenn kein Fenster erscheint nachdem eine Spalte / Zeile 4x hintereinander kam sondern die anderen beiden Spalten / Zeilenstände so formatiert werden das sie dann im hintergrund grün werden und ich schnell sehen kann welche beiden Zeilen / Spalten 4x nicht kamen....danach wieder auf 0 springen kann bleiben!

    Wenn du das noch hinbekommen würdest wäre ich wunschlos glücklich!!

    Vielen Dank an Dich und schönen Abend!

    LG Micha
     
    Micha2104, 6. März 2010
    #12
  13. Beverly
    Beverly Erfahrener User

    Command Buttons programmieren - Zählen

    Hi Micha,

    wieso soll es plötzlich richtig funktionieren und vorher nicht? Ich hatte an dem ursprünglichen Code aus meinem Beitrag vom 05.03.2010, 20:08 nichts geändert, nur ergänzt, dass die MsgBox angezeigt wird.

    Code:
    Private Sub cmbSchalter_Click()
        Dim raZelle As Range
        Dim strAdresse As String
        If Application.Sum(Range("B4,B6,B8,C9,E9,G9")) = 0 Then Range("B4,B6,B8,C9,E9,G9").Interior.ColorIndex = xlNone
        If Cells(cmbSchalter.TopLeftCell.Row, cmbSchalter.TopLeftCell.Column).Address <> strAdresse Then
            strAdresse = Cells(cmbSchalter.TopLeftCell.Row, cmbSchalter.TopLeftCell.Column).Address
            If inSpalte <> cmbSchalter.TopLeftCell.Column And inZeile <> cmbSchalter.TopLeftCell.Row Then
                Range("B4,B6,B8,C9,E9,G9") = 0
            Else
                If inSpalte <> cmbSchalter.TopLeftCell.Column Then Range("C9,E9,G9") = 0
                If inZeile <> cmbSchalter.TopLeftCell.Row Then Range("B4,B6,B8") = 0
            End If
        End If
        Cells(cmbSchalter.TopLeftCell.Row, 2) = Cells(cmbSchalter.TopLeftCell.Row, 2) + 1
        Cells(9, cmbSchalter.TopLeftCell.Column) = Cells(9, cmbSchalter.TopLeftCell.Column) + 1
        inSpalte = cmbSchalter.TopLeftCell.Column
        inZeile = cmbSchalter.TopLeftCell.Row
        With Range("B4,B6,B8,C9,E9,G9")
            Set raZelle = .Find(4, lookat:=xlWhole)
            If Not raZelle Is Nothing Then
                strAdresse = raZelle.Address
                Do
                    raZelle.Interior.ColorIndex = 4
                    Set raZelle = .FindNext(raZelle)
                Loop While raZelle.Address <> strAdresse And Not raZelle Is Nothing
                Range("B4,B6,B8,C9,E9,G9") = 0
            End If
        End With
        Set raZelle = Nothing
    End Sub
    Bis später,
    Karin
     
    Beverly, 6. März 2010
    #13
  14. Micha2104 Erfahrener User
    Morgen Karin,

    ja du ich weiß auch nicht, auf jedenfall hat es nicht so funktioniert wie es sollte...zum Verständnis für mich, ich füge deinen Code im Klassenmodul ein (ersetze den bestehenden) und drücke die "play" Taste zum Ausführen oder?

    In deiner jetzigen Version zeigt er mir leider die Zelle grün an, die 4x hintereinander kam...ich würde es genau anders herum haben, die die nicht kamen sollen grün werden. Also jeweils bei Spalte und Zeile.

    ICh werde mir demnächst mal ein Buch zum Thema gönnen:)

    Vielen Dank.
     
    Micha2104, 7. März 2010
    #14
  15. Beverly
    Beverly Erfahrener User
    Hi Micha,

    wenn du Code im Klassenmodul geändert hast, musst du zur Sicherheit erst die Prozedur InitSchalter im Modul mdlAllgemein ausführen (indem du dort die Play-Taste drückst), denn Excel hat dann inzwischen meistens "vergessen", für welche Schalter der Code im Klassenmodul gilt und es passiert gar nichts, wenn du die Schalter drückst.
    Code:
    Private Sub cmbSchalter_Click()
        Dim raZelle As Range
        Dim strAdresse As String
        If Cells(cmbSchalter.TopLeftCell.Row, cmbSchalter.TopLeftCell.Column).Address <> strAdresse Then
            strAdresse = Cells(cmbSchalter.TopLeftCell.Row, cmbSchalter.TopLeftCell.Column).Address
            If inSpalte <> cmbSchalter.TopLeftCell.Column And inZeile <> cmbSchalter.TopLeftCell.Row Then
                Range("B4,B6,B8,C9,E9,G9") = 0
            Else
                If inSpalte <> cmbSchalter.TopLeftCell.Column Then Range("C9,E9,G9") = 0
                If inZeile <> cmbSchalter.TopLeftCell.Row Then Range("B4,B6,B8") = 0
            End If
        End If
        Cells(cmbSchalter.TopLeftCell.Row, 2) = Cells(cmbSchalter.TopLeftCell.Row, 2) + 1
        Cells(9, cmbSchalter.TopLeftCell.Column) = Cells(9, cmbSchalter.TopLeftCell.Column) + 1
        inSpalte = cmbSchalter.TopLeftCell.Column
        inZeile = cmbSchalter.TopLeftCell.Row
        If Application.Max(Range("B4,B6,B8,C9,E9,G9")) = 4 Then
            For Each raZelle In Range("B4,B6,B8,C9,E9,G9")
                If raZelle <> 4 Then raZelle.Interior.ColorIndex = 4
            Next raZelle
            Range("B4,B6,B8,C9,E9,G9") = 0
        Else
            Range("B4,B6,B8,C9,E9,G9").Interior.ColorIndex = xlNone
        End If
    End Sub
    Bis später,
    Karin

    PS: als Literatur empfehle ich dir erst einmal, unter diesem Link zu schauen Handbuch Excel VBA - das ist kostenlos. Falls du dir ein Buch kaufen willst, so wird häufig der Autor Michael Kofler empfohlen. Dennoch kann ich aus eigener Erfahrung sagen - nutze die Foren, denn Probieren geht über Studieren, dabei lernt man am meisten.
     
    Beverly, 7. März 2010
    #15
Thema:

Command Buttons programmieren - Zählen

Die Seite wird geladen...
  1. Command Buttons programmieren - Zählen - Similar Threads - Command Buttons programmieren

  2. Event-Handler für Command Button in Tabellenblatt

    in Microsoft Excel Hilfe
    Event-Handler für Command Button in Tabellenblatt: Liebe community, bestimmt kann mir jemand bei folgendem Problem weiterhelfen: Ich möchte dynamisch einen ActiveX-Button einem Tabellenblatt zufügen. Dazu habe ich versucht den Code zum Einfügen...
  3. Command Button ein-/ausblenden

    in Microsoft Excel Hilfe
    Command Button ein-/ausblenden: Hallo Ich habe folgenden Code: Private Sub Worksheet_Change(ByVal Target As Range) Dim oSH As Sheets Dim oWs As Worksheet If BlattExist("Jan") Then If Target.Address = "$A$3" Then Call...
  4. Private Sub über Command-Button aufrufen

    in Microsoft Excel Hilfe
    Private Sub über Command-Button aufrufen: Hi! Bin bei meiner Suche nach einer Lösung für mein Problem auf euer tolles Forum gestoßen. Ich habe folgendes Makro eingebunden. Es funktioniert auch prima. Private Sub Worksheet_Change(ByVal...
  5. Über Command Button dynamisch Dokumente öffnen

    in Microsoft Excel Hilfe
    Über Command Button dynamisch Dokumente öffnen: Hallo Zusammen, Ich habe eine Tabelle in der über unterschiedliche Kriterien, Produkte angezeigt werden. Nun möchte ich dazu, zu dem entsprechenden Produkt, über einen CommandButton die...
  6. Excel VBA Suche mit Hilfe Command Buttons anzeigen

    in Microsoft Excel Hilfe
    Excel VBA Suche mit Hilfe Command Buttons anzeigen: Hallo Ich habe eine UserForm erstellt, welche mit voneinander Abhängige Comboboxen sucht. Dabei wurde mir schon geholfen in diesen Forum. Ich würde mir gerne das Ergebnis mithilfe eines...
  7. Excel bestimmte Tabellenblätter mittels Schaltfläche (VBA) drucken/ pdf drucken

    in Microsoft Excel Hilfe
    Excel bestimmte Tabellenblätter mittels Schaltfläche (VBA) drucken/ pdf drucken: Hallo zusammen, ich habe folgendes Problem und hoffe ihr könnt mir hierbei helfen. Ich möchte folgende Schaltflächen evtl. mit Steuerelement Toolbox und VBA generieren: 1. Tabellenblatt...
  8. Command Button

    in Microsoft Excel Hilfe
    Command Button: hallo liebe excel freunde, ich habe in einer excel datei zwei command buttons. der eine "T" für tagdienst, der andere "N" für nachtdienst. wenn ich eine betreffende zelle markiere, und dann...