Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen

Ansprechen von Steuerelementen via makro

Betrifft: Ansprechen von Steuerelementen via makro von: Toni
Geschrieben am: 11.08.2014 22:04:22

Hi Leute,

da ich per google schon häufiger Antworten auf meine Fragen in diesem Forum gefunden habe, hab ich mich mal angemeldet und hoffe das mir jemand mit meinem Problem helfen kann(Excel 2010):

Ich habe eine Tabelle, inder sobald eine bestimmte Zelle einen Wert enthält(sagen wir einfach mal B1), automatisch in der danebenliegenden Zelle eine Checkbox(Active X Steuerelement) erstellt wird(A1). Diesen Checkboxen werden dann abhängig vom Zelleninhalt bis A20 erstellt.
Den Checkboxen habe ich den Namen Versuch1 bis Versuch20 zugeordnet(nicht die Caption, sondern der Name).
Nun möchte ich eine Schleife aufbauen um diese Steuerelemente einzeln nacheinander Abzufragen(True or False) und eine Reaktion darauf auszulösen. Nur bekomme das beim besten willen nicht hin...
Eigentlich muss ich bei dem Namen ja nur die Zahl hinter Versuch auslesen, aber egal wie ich das Versuche, es klappt nicht. Die Steuerelemente sind der Spalte A nicht direkt zugeordnet und am liebsten würde ich das über den Namen abfragen. Zur Not würde ich den Wert der Checkbox auch der jeweiligen Zelle zuordnen und dann die Abfrage machen, jedoch bekomme ich dabei den Wert in der Zelle nicht unsichtbar für den benutzter... wäre super, wenn mir hier jemand helfen kann!

Hier der Quelltext für die Checkboxen:

Public Sub ActiveX_erstellen()
Dim i As Integer
Dim Versuch As String
ThisWorkbook.Worksheets("Eingabe").Activate

For i=1 To 20
If Not IsEmpty((Cells(i,2)) Then
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=10,
DisplayAsIcon:=False, Left:=Cells(i,1)+20, Top:=Cells(i,1).Top+2,
Width:=12,Height:=10).Name="VErsuch" & i
End If
Next i

mein letzter "verzweifelter" Quelltext zur Umsetzung meines Problems war:

For i=1 To 20
If ActiveSheet.OLEObjects.FormFields("Versuch" & i).CheckBox.Value= True Then
Cells(i,2)).Copy Destination:=Cells(i+10,i+10)
End If
Next i

Viele Grüße
Toni

  

Betrifft: AW: Ansprechen von Steuerelementen via makro von: Daniel
Geschrieben am: 11.08.2014 22:14:50

HI
ich würde da gar nicht mit Checkboxen arbeiten, sonden die Zellen der Spalte A selbst über das Doppelklick-Event als Checkbox verwenden mit folgendem Code:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column <> 1 Then Exit Sub 'Nur in Spalte A
If Target.Offset(0, 1).Value = "" Then Exit Sub 'nur wenn die Zelle daneben befüllt ist
If Target.Value = "" Then
    Target.Value = "X"
Else
    Target.ClearContents
End If
cancel = true
End Sub
zum Abfragen brauchst du dann nur noch die Zellinhalte der Spalte A zu prüfen, ob diese "X" oder leer sind.

wenn dir das "X" und Leer nicht gefällt, dann kannst du die Spalte A auch mit Wingding2 als Schriftart formatieren, da gibt es dann entsprechende Zeichen, die wie "gesetzes Häkchen" und "leeres Kästchen" aussehen und die du statt dem "X" verwenden kannst.

Gruß Daniel


  

Betrifft: AW: Ansprechen von Steuerelementen via makro von: Gerold
Geschrieben am: 11.08.2014 22:57:53

Hallo Toni

Etwa so?


For Each OleObj In Worksheets("Eingabe").OLEObjects
    Select Case Right(OleObj.Name, 2)       'Oder so - Select Case OleObj.Name -
                                            'Dann aber -  case = "Versuch01"
    Case Is = "01", "02", "03", "04", "05"  'Blei gleicher Aktion
        If OleObj.Object.Value = True Then
        
        End If
    Case Is = "06"
        If OleObj.Object.Value = True Then
        
        End If
        
    Case Is = "07"
        If OleObj.Object.Value = True Then
        
        End If
        
    Case Is = "08"
        If OleObj.Object.Value = True Then
        
        End If
        
    'usw......
    End Select
Next

Mfg Gerold

Rückmeldung wäre nett.


  

Betrifft: AW: Ansprechen von Steuerelementen via makro von: Toni
Geschrieben am: 11.08.2014 23:35:00

Hi Gerold,

damit müsste ich dann aber jeden der 20 Versuche bzw. dann eben auch CheckBoxen indirekt einzeln abfragen? Da hiernach erst eine längere Rechnung(für jede Checkbox aber die gleiche Rechnung nur ein anderes Ziel der generierten Daten) folgt, wollte ich das eben gern umgehen. Deswegen die Idee mit den Namen und der Nummerierung.
Ablauf wäre ca. so:
Eine If Schleife, die jede Checkbox auf True prüft und wenn das der Fall ist, kopiere Daten in ein Feld, löse ein anderes Makro aus, kopiere errechnete Daten zurück in ein Feld, beginne mit der Abfrage der Nächsten Box.

Viele Grüße
Toni


  

Betrifft: AW: Ansprechen von Steuerelementen via makro von: Daniel
Geschrieben am: 11.08.2014 23:56:06

Hi

for i = 1 to 20
    if ActiveSheet.OleObjects("Checkbox" & i).Object.Value = True then
Next
Gruß Daniel


  

Betrifft: AW: Ansprechen von Steuerelementen via makro von: Toni
Geschrieben am: 13.08.2014 17:09:42

Hi,

so eine kleine Rückmeldung:

die If- Schleife die ich versucht hatte im Anfangspost hatte natürlich nicht funktioniert! Daher ja mein Problem :)
Ich habe nun die Umsetzung von Gerold genommen. Es war nicht genau das was ich suchte, hat mir aber noch ein Problem abgefangen.
Vba sucht in einer If Schleife natürlich nach jeder Variablen und wenns eine davon nicht gibt, bricht es erst einmal ab. Da meine Checkboxen nicht immer da sind, sondern nur durch Einträge generiert werden, funzt die normale If- Schleife leider nicht, da excel Variablen sucht die es nicht gibt. Das löst die Version mit Case gleich mit :)
Um den Quelltext kurz zu halten übergebe ich jetzt einfach in dem jeweiligen case- Fall an eine andere Sub über variablen :)
Soweit ist damit meine Frage beantwortet und ich Danke euch beiden für die Hilfe

Gruß, Toni


  

Betrifft: AW: Ansprechen von Steuerelementen via makro von: Toni
Geschrieben am: 11.08.2014 23:21:44

Hi Daniel,

das würde mir nicht wirklich weiter helfen.
Zum einen betrachte ich die mache ein X Variante in der Zelle als Quick and Dirty Variante und wäre nur die letzte Lösung.
Zum anderen will ich dem Anwender die Möglichkeit lassen, frei entscheiden zu können welche Zeile er anklicken möchte um damit später weiter zu arbeiten. Soweit ich dein Vorschlag verstehe, löst jeder Eintrag in der Zelle neben dem X ein X aus. Damit würde er mit jedem auch weiter arbeiten müssen.
Zudem sehe ich keinen Grund dafür, wieso das nicht mit den CheckBoxen funktionieren soll... wozu gibt es sie denn sonst und swozu kann man ihnen Namen zuordnen. Ich weiß leider nur noch nicht wies geht :(

Viele Grüße,
Toni


  

Betrifft: AW: Ansprechen von Steuerelementen via makro von: Daniel
Geschrieben am: 11.08.2014 23:51:08

Hi
hast du falsch verstanden.
das "X" setzt du über den Doppelklick auf die Zelle in der Spalte A.
Das funktioniert aber nur, wenn in Spalte B ein Wert steht, dh wenn die Zelle in Spalte B leer ist, kann der Anwender soviel klicken wie er will, es passiert nichts, aber bei den Zellen wo in Spalte B steht, kann der Anwender frei entscheiden, ob er sie anklicken will oder nicht.

Gruß Daniel


  

Betrifft: AW: Ansprechen von Steuerelementen via makro von: Gerold
Geschrieben am: 12.08.2014 00:03:03

Hallo Toni


Durch 

For Each OleObj In Worksheets("Eingabe").OLEObjects" 
.
.
.
End Select


wird doch jedes einzelne Oleobjekt(CheckBox)abgefagt
wie in einer Schleife

Mfg Gerold

Rückmeldung wäre nett.


 

Beiträge aus den Excel-Beispielen zum Thema "Ansprechen von Steuerelementen via makro"