Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Ansprechen von Steuerelementen via makro

Ansprechen von Steuerelementen via makro
11.08.2014 22:04:22
Steuerelementen
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

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ansprechen von Steuerelementen via makro
11.08.2014 22:14:50
Steuerelementen
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

Anzeige
AW: Ansprechen von Steuerelementen via makro
11.08.2014 22:57:53
Steuerelementen
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.

Anzeige
AW: Ansprechen von Steuerelementen via makro
11.08.2014 23:35:00
Steuerelementen
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

Anzeige
AW: Ansprechen von Steuerelementen via makro
11.08.2014 23:56:06
Steuerelementen
Hi
for i = 1 to 20
if ActiveSheet.OleObjects("Checkbox" & i).Object.Value = True then
Next
Gruß Daniel

AW: Ansprechen von Steuerelementen via makro
13.08.2014 17:09:42
Steuerelementen
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

Anzeige
AW: Ansprechen von Steuerelementen via makro
11.08.2014 23:21:44
Steuerelementen
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

Anzeige
AW: Ansprechen von Steuerelementen via makro
11.08.2014 23:51:08
Steuerelementen
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

Anzeige
AW: Ansprechen von Steuerelementen via makro
12.08.2014 00:03:03
Steuerelementen
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.
;
Anzeige
Anzeige

Infobox / Tutorial

Steuerelemente in Excel via Makro ansprechen


Schritt-für-Schritt-Anleitung

Um Steuerelemente in Excel über VBA anzusprechen, folge dieser Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und aktiviere das VBA-Entwicklungsfenster:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Rechtsklicke im Projektfenster auf "VBAProject (DeinWorkbookName)" und wähle Einfügen > Modul.
  3. Füge den folgenden VBA-Code ein, um ActiveX-Checkboxen zu erstellen:

    Public Sub ActiveX_erstellen()
       Dim i As Integer
       ThisWorkbook.Worksheets("Eingabe").Activate
       For i = 1 To 20
           If Not IsEmpty(Cells(i, 2)) Then
               ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", _
               Link:=False, DisplayAsIcon:=False, _
               Left:=Cells(i, 1) + 20, Top:=Cells(i, 1).Top + 2, _
               Width:=12, Height:=10).Name = "Versuch" & i
           End If
       Next i
    End Sub
  4. Erstelle eine Schleife, um die Checkboxen abzufragen:

    For i = 1 To 20
       If ActiveSheet.OLEObjects("Versuch" & i).Object.Value = True Then
           ' Hier kannst du deine gewünschte Aktion einfügen
       End If
    Next i
  5. Testen: Führe das Makro aus, um die Checkboxen zu erstellen und abzufragen.


Häufige Fehler und Lösungen

  • Fehler: "Objekt nicht gefunden"

    • Lösung: Stelle sicher, dass die Checkboxen korrekt benannt wurden. Achte darauf, dass die Namen genau mit dem Code übereinstimmen.
  • Fehler: Schleife bricht ab

    • Lösung: Verwende On Error Resume Next, um den Code so zu gestalten, dass er auch bei fehlenden Objekten fortfährt.

Alternative Methoden

Wenn du die ActiveX-Steuerelemente nicht verwenden möchtest, kannst du auch Formularsteuerelemente verwenden. Hier ist ein Beispiel für die Verwendung von Formularsteuerelementen:

  1. Füge eine Checkbox über das Menü "Entwicklertools" hinzu.
  2. Nutze folgenden Code, um die Checkboxen zu steuern:

    Dim cb As CheckBox
    For Each cb In ActiveSheet.CheckBoxes
       If cb.Value = 1 Then
           ' Hier deine gewünschte Aktion
       End If
    Next cb

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du Steuerelemente in Excel ansprechen kannst:

  • Checkboxen in einer bestimmten Zeile abfragen:

    For i = 1 To 20
      If ActiveSheet.OLEObjects("Versuch" & i).Object.Value = True Then
          Cells(i, 3).Value = "Aktiv"
      End If
    Next i
  • Daten in eine andere Tabelle kopieren:

    For i = 1 To 20
      If ActiveSheet.OLEObjects("Versuch" & i).Object.Value = True Then
          Cells(i, 2).Copy Destination:=Worksheets("Ziel").Cells(i, 1)
      End If
    Next i

Tipps für Profis

  • Verwende Select Case für bessere Übersichtlichkeit: Dies hilft, viele If-Bedingungen zu vermeiden und macht deinen Code sauberer.

  • Optimiere die Performance: Deaktiviere Bildschirmaktualisierung und berechne die Arbeitsmappe nicht während der Ausführung des Codes, um die Performance zu verbessern:

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    ' Dein Code hier
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Wie kann ich meine Steuerelemente benennen?
Du kannst die Steuerelemente beim Erstellen benennen, indem du im Name-Parameter des OLEObjects.Add-Befehls den gewünschten Namen angibst.

2. Wie überprüfe ich, ob eine Checkbox aktiviert ist?
Nutze den folgenden Code: If ActiveSheet.OLEObjects("CheckboxName").Object.Value = True Then.

3. Gibt es eine Möglichkeit, Steuerelemente dynamisch zu erzeugen?
Ja, du kannst eine Schleife verwenden, um mehrere Steuerelemente basierend auf den Werten in einer Spalte zu erstellen, wie im Schritt-für-Schritt-Beispiel gezeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige