Check-box durch Makro ansteuern

fiedlator

Commander
Registriert
Okt. 2002
Beiträge
2.192
EXCEL 03 - Check-box durch Makro ansteuern

Neuer Tag, neue Frage :D.
Ich möchte gern ein Dropdown-Menü mit verschiedenen Werten (logisch :D) haben. Jeder Wert soll dabei, wenn er angewählt wird, ein bestimmtes Makro starten. Das Makro soll daraus bestehen, festgelegte Check-Boxen anzuklicken. Außerdem solle die Checkboxen, die vom Makro nicht angeklickt wurden, aber vor dem Start des Makros angeklickt waren, ausgeklickt werden.

Ich glaube, jetzt wird es etwas komplexer ^^. Wie geh ich daran :)

Danke schonmal an Mr. Snoot :evillol:
 
Zuletzt bearbeitet:
Ahh...sorry. Excel :)
 
Die DropDown Box hat ein Click Ereignis. Auf das reagierst Du und führst die entsprechenden Aktionen aus.
 
Das löst den ersten Aspekt, jedoch nicht den, dass vorher angeklickte Zellen ausgeklickt werden sollen, oder?
 
Du hast doch den Namen oder den Tag der Checkbox. Von denen setzt Du einfach den Value auf false
 
fiedlator schrieb:
Danke schonmal an Mr. Snoot :evillol:
:p

Kenn mich leider mit Formularen nicht wirklich aus, daher wird das hier nicht gerade optimal sein (den Checkboxen hab ich die Namen chkbx1 bis chkbx6 gegeben).

Code:
Sub worksheet_change(ByVal Target As Range)

If Target.Address = "$A$1" Then [COLOR="Green"]'Zelle mit der Dropdown-Liste[/COLOR]

auswahl = Target

Select Case auswahl [COLOR="green"]'abhängig vom ausgewählten Wert ein Makro aufrufen[/COLOR]
  Case "Wert1", "Wert3": Call makro_1
  Case "Wert2":  Call makro_2
  Case "Wert4":  Call makro_3
  Case "Wert5":  Call makro_4
  Case Else: MsgBox "Nichts gewählt."
End Select
End If
End Sub
Code:
Sub makro_1() [COLOR="green"]'Makro 1 soll Checkbox 1 und 3 auswählen[/COLOR]

For Each chkbx In Tabelle1.CheckBoxes
  With chkbx
    If .Name = "chkbx1" Or .Name = "chkbx3" Then
      Tabelle1.Shapes(.Name).ControlFormat.Value = xlOn
    Else
      Tabelle1.Shapes(.Name).ControlFormat.Value = xlOff
    End If
  End With
Next

End Sub

Sub makro_2()[COLOR="green"]'Makro 2 soll Checkbox 2 und 6 auswählen[/COLOR]

For Each chkbx In Tabelle1.CheckBoxes
  With chkbx
    If .Name = "chkbx2" Or .Name = "chkbx6" Then
      Tabelle1.Shapes(.Name).ControlFormat.Value = xlOn
    Else
      Tabelle1.Shapes(.Name).ControlFormat.Value = xlOff
    End If
  End With
Next

End Sub

Sub makro_3()[COLOR="green"]'Makro 3 soll Checkbox 4 auswählen[/COLOR]

For Each chkbx In Tabelle1.CheckBoxes
  With chkbx
    If .Name = "chkbx4" Then
      Tabelle1.Shapes(.Name).ControlFormat.Value = xlOn
    Else
      Tabelle1.Shapes(.Name).ControlFormat.Value = xlOff
    End If
  End With
Next

End Sub

Sub makro_4()[COLOR="green"]'Makro 4 soll Checkbox 5 auswählen[/COLOR]

For Each chkbx In Tabelle1.CheckBoxes
  With chkbx
    If .Name = "chkbx5" Then
      Tabelle1.Shapes(.Name).ControlFormat.Value = xlOn
    Else
      Tabelle1.Shapes(.Name).ControlFormat.Value = xlOff
    End If
  End With
Next

End Sub
 

Anhänge

Also wenn ich das Makro über "makro aufzeichnen" aufzeichne, nimmt er nur folgendes auf.

Code:
    Application.Run "'Devices zusammengefasst5(Version 1).xls'!chkbx"
    Application.Run "'Devices zusammengefasst5(Version 1).xls'!chkbx"

Wo kann ich nun das false zuweisen? Er registriert hier ja nur, dass ich auf die box geklickt habe, oder?
 
Was genau willst du denn jetzt aufzeichnen? Ich glaub Formularelemente lassen sich nur schwer mit dem Rekorder aufzeichnen.
 
Zuletzt bearbeitet:
Das sieht auf den ersten Blick gar nicht so verkehrt aus, ich würde es erstmal ausprobieren. Eine Frage: Woher erhalte ich den Name der jeweiligen Checkbox?
 
Wenn du die Checkbox mit gedrückter Strg-Taste anklickst, steht der Name oben links. Da kannst du auch einen anderen vergeben.


Musst nur aufpassen, wenn du die Namen von Excel beibehälst und zwischendurch mal eine Checkbox gelöscht hast. Denn Excel zählt immer um 1 hoch. Wenn du also eine einzige Checkbox einfügst und wieder löscht, wird Excel die nächste Checkbox nicht mehr Checkbox 1 nennen, sondern gleich Checkbox 2.
 

Anhänge

  • chkbox_name.jpg
    chkbox_name.jpg
    24 KB · Aufrufe: 207
Zuletzt bearbeitet:
Da bin ich wieder :).
Also bei mir zeigt dein oben angehängtes Programm einen Fehler. Ist das bei dir nicht so??
 
Ok. Ich hab das ganze jetzt in mein Tabellenblatt übertragen und erhalte folgende Meldung:

Code:
Fehler beim Kompilieren: Function oder Variable erwartet

Der Modul-Code sieht folgendermaßen aus:

Code:
[COLOR="DarkOrange"]Sub makro_1() (gelb hinterlegt)[/COLOR]
For Each chkbx In AAL.CheckBoxes
  With [COLOR="Blue"]chkbx(blau hinterlegt)[/COLOR]    If .Name = "chkbx1" Or .Name = "chkbx3" Then
      AAL.Shapes(.Name).ControlFormat.Value = xlOn
    Else
      AAL.Shapes(.Name).ControlFormat.Value = xlOff
    End If
  End With
Next

End Sub

Besteht die Möglichkeit, dass er mit chkbx nichts anfangen kann? Die Checkboxen hiessen ja vor meiner Umbenennung auch Kontrollkästchen...
Ergänzung ()

Natürlich wäre es auch möglich, die entsprechende Bezugszelle für jede chkbox per Makro umzuschreiben, wenn das einfacher zu programmieren ist....!?
Ergänzung ()

habs selbst gelöst :)
 
Zurück
Oben