Discussion:
Makro bei Veränderung automatisch erzeugter Zellen starten
(zu alt für eine Antwort)
l***@freenet.de
2006-11-03 11:45:34 UTC
Permalink
Hallo Excel-Experten,

ich sitze schon seit einiger Zeit an einem Problem.

Mit:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 0 Then MAKRO
End Sub
kann ich ein Makro bekanntermaßen starten lassen, wenn auf dem
Arbeitsblatt per Hand etwas eingegeben wird. Leider funktioniert dies
nicht mit Radio-Buttons und Häkchen aus der Symbolleiste "Formular".
Mir würde es reichen das Ergebnis einer Zelle zu überwachen. Dort
greift aber die obige Routine nicht, da die Formel an sich in dieser
Zelle ja nicht geändert wird, lediglich das Ergebnis, welches sie
darstellt.
Meine Frage, gibt es eine Möglichkeit entweder diese eine Zelle auf
Veränderung des Ergebnisses zu überwachen, oder deim Eingabe-Blatt
sämtliche Buttons und Häkchen mit zu erfassen?

danke im Voraus für eure Mühen.
Robert Gelbmann
2006-11-03 12:07:54 UTC
Permalink
Hallo Lugor!
Post by l***@freenet.de
kann ich ein Makro bekanntermaßen starten lassen, wenn auf dem
Arbeitsblatt per Hand etwas eingegeben wird. Leider funktioniert dies
nicht mit Radio-Buttons und Häkchen aus der Symbolleiste "Formular".
Mir würde es reichen das Ergebnis einer Zelle zu überwachen. Dort
greift aber die obige Routine nicht, da die Formel an sich in dieser
Zelle ja nicht geändert wird, lediglich das Ergebnis, welches sie
darstellt.
Meine Frage, gibt es eine Möglichkeit entweder diese eine Zelle auf
Veränderung des Ergebnisses zu überwachen, oder deim Eingabe-Blatt
sämtliche Buttons und Häkchen mit zu erfassen?
Das einfachste wäre es IMHO nicht die (veralteteten) Steuerelemente aus
der Symbolleiste "Formular" zu verwenden, sondern stattdessen die (seit
Excel 97) neuen Steuerelemente aus der Symbolleiste
"Steuerelement-Toolbox". Diese sind zwar komplizierter in der
Handhabung, aber auch um einiges "mächtiger":

- Ansicht / Symbolleisten / Steuerelement-Toolbox
- (z. B.) Das Steuerelement "Kontrolkästchen" auswählen und an
gewünschter Stelle mit der Maus "aufziehen" bzw. platzieren.
- Excel schaltet dann automatisch in den Entwurfsmodus (=1. Symbol auf
der Symbolleiste).

Nur falls du das Ergebnis (WAHR/FALSCH) tatsächlich in Excel nützen
möchtest:
- Blende das Eigenschaftenfenster ein (=2. Symbol).
- Eigenschaft "LinkedCell": manuell (!) die gewünschte Zelle angeben!

Mit einem Doppelklick auf das Kontrollkästchen wird der VBE (Visual
Basic-Editor) gestartet, das (Klassen)-Modul des betreffenden
Tabellenblattes geöffnet und folgende Zeilen werden eingefügt:

'---snip---
Private Sub CheckBox1_Click()

End Sub
'---snip---
' CheckBox1 ist hier übrigens der Codename des Kontrollkästchens,
' den du im Eigenschaftenfenster (siehe oben) ändern kannst
(Eigenschaft "(Name)").

Hier kannst du nun beliebigen VBA-Code einfügen, der dann automatisch
ausgeführt wird, wenn jemand das Kontrollkästchen verwendet; z. B.:

'---snip---
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
MsgBox "Sie haben das Kontrollkästchen angekreuzt!"
End If
End Sub
'---snip---
--
In der Hoffnung geholfen zu haben, verbleibe ich mit einem leisen


Servus aus Wien,
-Robert Gelbmann-
---
The world is quiet here.
Robert Gelbmann
2006-11-03 12:11:50 UTC
Permalink
Hallo Lugor!

Kleiner Nachtrag:
Am Ende der Arbeiten nicht vergessen, den Entwurfsmodus wieder zu
verlassen (=1. Symbol auf der Symbolleiste "Steuerelement-Toolbox") und
die Symbolleiste kannst du dann selbstverständlich auch wieder
ausblenden.
--
In der Hoffnung geholfen zu haben, verbleibe ich mit einem leisen


Servus aus Wien,
-Robert Gelbmann-
---
I solemnly swear that I'm up to no good.
l***@freenet.de
2006-11-03 12:31:59 UTC
Permalink
Danke Robert,

die neueren Steuerelemente habe ich mit Absicht vermieden, da ich zwar
excel ganz gut kenne, aber die Auseinandersetzung mit dem schriptcode
zu lange dauert. Wenn ichs vergessen habe zu erwähnen: ich bin
absoluter Laie was VBA-Progemmieren angeht. Einlesen, Ausgeben,
Schleifen usw. geht zwar ganz gut, doch sicherlich nutze ich bei weiten
nicht alle Möglichkeiten. Um an den obigen Codeschnipsel ran zu kommen
musste ich auch erstmal im I-net lesen. Ich danke dir für deine
Mühen, aber dieses Vorgehen scheidet alleine schon aus Zeitgründen
für mich aus, da mein Projekt kein Hobbyprojekt ist und ich an gewisse
Liefertermine gebunden bin^^.

Trotzdem vielen Dank.
Robert Gelbmann
2006-11-03 13:17:19 UTC
Permalink
Hallo Lugor!
Post by l***@freenet.de
die neueren Steuerelemente habe ich mit Absicht vermieden, da ich zwar
excel ganz gut kenne, aber die Auseinandersetzung mit dem schriptcode
zu lange dauert. Wenn ichs vergessen habe zu erwähnen: ich bin
absoluter Laie was VBA-Progemmieren angeht. Einlesen, Ausgeben,
Schleifen usw. geht zwar ganz gut, doch sicherlich nutze ich bei weiten
nicht alle Möglichkeiten.
Womit sich die Frage stellt, was genau du denn jetzt machen möchtest?

Soll immer, wenn das Kontrollkästchen angeklickt wird, ein Makro
ausgeführt werden?

'---snip---
Private Sub CheckBox1_Click()
Call MAKRO
End Sub
'---snip---


Oder immer dann, wenn das Kontrollkästchen angekreuzt wird?

'---snip---
Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
Call MAKRO
End If
End Sub
'---snip---


Oder soll eben noch zusätzlich etwas geprüft werden?!

(Bin jetzt etwas verwirrt!)
--
In der Hoffnung trotzdem etwas geholfen zu haben, verbleibe ich mit
einem leisen


Servus aus Wien,
-Robert Gelbmann-
---
The world is quiet here.
l***@freenet.de
2006-11-03 13:29:12 UTC
Permalink
Ja genau sowas muss es sein. Neben der Überwachung der
handbearbeiteten Zellen brauche ich noch ein Skriptschnipsel, was meine
Häkchen (das sind doch CheckBoxen?) und die RadioButtons (wie greif
ich auf die Zurück?) auf Aktivität überwacht. Ich habe gerade
nachgeschaut, wie bekomm ich denn raus, welche Nummer solch ein
Formularelement hat? Ich muss das ja irgendwie ansprechen können. Die
Radiobuttons musste ich auch mit Gruppenfelder zusammenfassen, da ich
mehrere davon besitze. Wenn das mit den Formulardingern auch geht
bräuchte ich deshalb nur zu wissen wie ich diese auf Aktivität
überwachen kann. Ein "Call Makro" muss dann eigentlich reichen.
Thomas Ramel
2006-11-03 14:20:02 UTC
Permalink
Grüezi Lugor
Post by l***@freenet.de
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 0 Then MAKRO
End Sub
Meine Frage, gibt es eine Möglichkeit entweder diese eine Zelle auf
Veränderung des Ergebnisses zu überwachen, oder deim Eingabe-Blatt
sämtliche Buttons und Häkchen mit zu erfassen?
Verknüpfe doch deine Checkboxen mit jeweils einer Zelle, dann kannst Du mit
dem Change-Ereignis und Target ohne weiteres ergründen welche Chackbox
angeklickt wurde und wie deren Wert im Moment ist.

Damit kannst Du dann dein Makro wie gewünscht starten.
--
Mit freundlichen Grüssen

Thomas Ramel (@Web-Interface)
- MVP für Microsoft-Excel -

[Win XP Pro SP-2 / xl2003]
l***@freenet.de
2006-11-03 14:49:17 UTC
Permalink
Post by Thomas Ramel
Verknüpfe doch deine Checkboxen mit jeweils einer Zelle, dann kannst Du mit
dem Change-Ereignis und Target ohne weiteres ergründen welche Chackbox
angeklickt wurde und wie deren Wert im Moment ist.
Damit kannst Du dann dein Makro wie gewünscht starten.
--
Mit freundlichen Grüssen
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003]
Hallo Thomas,

genau das funktioniert eben nicht. Anscheinend reagiert dieses

Private Sub Worksheet_Change(ByVal Target As Range)

nur auf Eingaben, die vom Benutzer per Hand gemacht wurden.
Einer meiner Fragen war ja, ob es einen anderen Befehl gibt, der auch
automatisch geänderte Zellen überwacht.

aber trotzdem vielen Dank!
Thomas Ramel
2006-11-03 15:28:22 UTC
Permalink
Grüezi lugor
Post by l***@freenet.de
Post by Thomas Ramel
Verknüpfe doch deine Checkboxen mit jeweils einer Zelle, dann kannst Du mit
dem Change-Ereignis und Target ohne weiteres ergründen welche Chackbox
angeklickt wurde und wie deren Wert im Moment ist.
genau das funktioniert eben nicht. Anscheinend reagiert dieses
Private Sub Worksheet_Change(ByVal Target As Range)
nur auf Eingaben, die vom Benutzer per Hand gemacht wurden.
Ich habe das Verhalten 1:1 reproduzieren können - auch bei Elementen aus
der Steuerelemente-Toolbox reagieren die Workscheet-Ereignisse nicht, wenn
die Werte über eine Zellenverknüpfung ist Tabellenblatt 'geschrieben'
werden. :-((((
Post by l***@freenet.de
Einer meiner Fragen war ja, ob es einen anderen Befehl gibt, der auch
automatisch geänderte Zellen überwacht.
IMO nicht, nein.

Du wirst also kaum um ein wenig Programmierung herum kommen - Du könntst
z.B. die Werte der Elemente aus der Steuerelemente-Toolbox per VBA ins
Tabellenblatt srheiben lassen und dort dann wie gewohnt mit dem
Change-Ereignis arbeiten. Für eine Checkbox kann das wie folgt aussehen:

Private Sub CheckBox1_Click()
Range("B10") = CheckBox1.Value
End Sub


Auch Radio-Buttons kannst Du so mit Code bestücken.
Im Entwurfsmodus einfach auf 'Code anzeigen' klicken und der Code-Rumpf im
VBA-Editor wird dir von selbst erzeugt.



Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps
Loading...