Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
456to460
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
456to460
456to460
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

einmalig Makro wenn Zellwert sich ändert

einmalig Makro wenn Zellwert sich ändert
16.07.2004 08:09:44
Gerold
Hallo Forum,
ich habe eine Frage zu einer bestimmten Funktion.
Ich möchte ein Makro ausführen wenn ein bestimmter Wert
in einer Zelle steht.
Ich habe das folgendermaßen realisiert. (Code ist teilweise aus diesem Forum)

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("K40") = 0 Then
Range("D57:G58").Select
Selection.ClearContents
End If
Range("A39").Select
End Sub

Nun kommt meine Frage:
Da diese Bedingung (("K40") = 0) danach erhalten bleibt,
wird das Makro immer wieder ausgeführt.
Gibt es eine Möglichkeit dies abzufangen.
Beispiel: Wechsel K40 von 1 nach 0 dann Makro
Für Eure Hilfe im voraus schon mal vielen Dank
Gruß
Gerold Dornbusch

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: einmalig Makro wenn Zellwert sich ändert
16.07.2004 08:31:08
joel
hallo gerold
nimm nicht das selectionchang-ereignis, sondern das change-ereignis, das immer dann auftritt, wenn ein zellwert geändert wird.
prüfe anschliessend, ob target der zelle k40 entspricht, wenn ja, prüfe denn zellwert (value)
gruss joel
ps:
prüfen, ob target zelle k40 entspricht:
if not intersect(target, tabelle1.range("K40")) is nothing then
zellwert prüfen:
if target.value = 0 then
AW: einmalig Makro wenn Zellwert sich ändert
16.07.2004 08:35:49
Andre
Wenn ich´s richtig verstanden habe, sollte dir folgender Code helfen:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "K40" Then
If Range("K40") = 0 Then
Range("D57:G58").Select
Selection.ClearContents
End If
Range("A39").Select
End If
End Sub

Gruß Andre
Anzeige
AW: einmalig Makro wenn Zellwert sich ändert
Jan
Hi Gerold,
Ändere mal den VBA-Code wie folgt:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("K40") = 0  Then
Range("D57:G58").Select
Selection.ClearContents
End If
Range("k40") = 1
End Sub

Jetzt wird das Makro erst ausgeführt, wenn in der Zelle K40 nichts
steht.
Jan
AW: einmalig Makro wenn Zellwert sich ändert
16.07.2004 08:59:49
Gerold
Hallo Joel,Hallo Andre,Hallo Jan,
vielen Dank für die schnellen Antworten,
ich muss die Vorschläge jetzt der Reihe nach testen
und werde mich dann wieder melden.
Ich muss noch eine Info hinzufügen.
Die Zelle K40 wird bei mir nie ausgewählt, in dieser Zelle ändert sich nur
der Wert von 0 nach 1 und umgekehrt.
Das Makro darf nur bei 0 einmalig ausgelöst werden.
Wie müsste die Lösung dann aussehen.
(ich bin noch Anfänger was VBA betrifft)
Gruß
Gerold Dornbusch
Anzeige
AW: einmalig Makro wenn Zellwert sich ändert
16.07.2004 09:25:12
Andre
Ok, dann ist mein Ansatz nicht wirklich hilfreich gewesen, denn mit ihm wird das Ereignis nur ausgelöst, wenn in K40 eine Eingabe getätigt wird! Muß man ja wissen!
Dann nehme ich an, in K40 steht eine Formel, die du auch weiterhin nutzen möchtest.
Mal sehen was man da machen kann.
AW: einmalig Makro wenn Zellwert sich ändert
16.07.2004 09:38:45
Gerold
Hallo Andre,
du hast mit deiner Vermutung (Formel in Zelle, die benötigt wird)recht!
Meine Infos waren auch nicht vollständig, aber ich denke
das Problem ist jetzt klar.
Gruß
Gerold Dornbusch
AW: einmalig Makro wenn Zellwert sich ändert
16.07.2004 09:37:00
joel
hallo gerold
wenn in zelle k40 (nur) eine formel steht, dann bringt dir die abfrage, ob diese zelle geändert wurde nichts..
diese zelle reagiert dann höchstens auf das "calculate-ereignis". das abzufangen ist jedoch auch eher zeitverschwendung
am besten du löst das problem mit einer static-variable

Private Sub Worksheet_Change(ByVal Target As Range)
Static vZellwert As Variant         'ist zu beginn "Empty"
'prüfen, ob die zelle ein neuer wert erhalten hat
If vZellwert <> Feuil1.Range("C4").Value Then
'makro ausführen
MsgBox "makro ausführen"
'neuen zellwert merken
vZellwert = Feuil1.Range("C4").Value
End If
End Sub

gruss joel
Anzeige
sprachensalat..
16.07.2004 09:38:59
joel
hallo gerold
noch was kleines:
arbeite hier auf nem französischen system, deshalb musst du bei dir wohl "Feuil1" noch mit "Tabelle1" ersetzen
und dann noch "C4" mit "K40"
zusätzlich bei "msgbox "makro ausführen"" dein makro einfügen
gruss joel
AW: sprachensalat..
16.07.2004 10:43:02
Gerold
Hallo joel,
Deine Lösung funktioniert,
ich habe sie nur noch etwas angepasst.


Private Sub Worksheet_Change(ByVal Target As Range)
Static vZellwert As Variant         'ist zu beginn "Empty"
'prüfen, ob die zelle ein neuer wert erhalten hat
If vZellwert <> Sheets("Maschinenangaben").Range("K40").Value Then
'makro oder funktion ausführen
Range("D57:G58").Select
Selection.ClearContents
'neuen zellwert merken
vZellwert = Sheets("Maschinenangaben").Range("K40").Value
End If
Range("A39").Select
End Sub

Vielen Dank und schönes Wochenende (auch an Jan und Andre)
Gruß
Gerold Dornbusch
Anzeige
noch eine kleinigkeit
16.07.2004 10:48:19
joel
hallo gerold
wenn wir schon dabei sind...
Range("D57:G58").Select
Selection.ClearContents
kannst du gleich in einer zeile schreiben... Range("D57:G58").ClearContents
ich würd übrigens das tabellenblatt noch vornedran nehmen..
Sheets("Maschinenangaben").Range("D57:G58").ClearContents
gruss

AW: noch eine kleinigkeit
16.07.2004 12:44:38
Gerold
Hallo joel,
nochmals vielen Dank.
Gruß
Gerold

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige