Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1208to1212
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
Inhaltsverzeichnis

Target Change / BeforeDoubleClick

Target Change / BeforeDoubleClick
Alex
Guten morgen,
ich hänge irgendwie am Verständniss... Ich möchte in eine Zelle eine Anzahl eingeben, die bei verlassen der Zelle in einen Betrag umgerechnet wird. Soweit funktioniert das auch. Wenn ich nun ein eine Zelle die bereits einen Betrag umgerechnet hat mit einer neuen Anzahl überschreiben möchte, wird nicht mehr gerechnet. Kann mir jemand helfen?
Den "sinnlosen" Code hab ich weggelassen :-)
Mit irgeneiner Abfrage möchte ich quasi der Zelle mitteilen, wenn format "#,##0.00 $" dann prüfe ob bereits ein Wert vorhanden ist lösche oder überschreibe Ihn mit der neuen Eingabe (Anzahl) und dann wieder umrechnen.
Cells(Target.Row, Target.Column) = Cells(Target.Row, Target.Column) * Cells(Target.Row, 3).
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target = "" Then Exit Sub
If Target.NumberFormat = "0" Then
Target.NumberFormat = "#,##0.00 $"
Target.Interior.ColorIndex = 0
Cells(Target.Row, Target.Column) = Cells(Target.Row, Target.Column) * Cells(Target.Row, 3)
End If
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
If Target = "" Then Exit Sub
Cells(Target.Row, Target.Column) = Cells(Target.Row, Target.Column) / Cells(Target.Row, 3)
Target.NumberFormat = "0"
Target.Interior.ColorIndex = 34
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Target Change / BeforeDoubleClick
31.03.2011 06:41:23
Marc
Guten Morgen!
Das Problem ist unter anderem, dass du mit der Änderung aus dem Double-Click-Ereignis das Change-Ereignis wieder auslöst. Unterbinden kannst du das mit application.enableevents = false
Das muss am Ende des Codes unbedingt wieder auf TRUE gesetzt werden!
Sieht dann so aus:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False
If Target = "" Then Exit Sub
If Target.NumberFormat = "0" Then
Target.NumberFormat = "#,##0.00 $"
Target.Interior.ColorIndex = 0
Cells(Target.Row, Target.Column) = Cells(Target.Row, Target.Column) * Cells(Target.Row, 3)
End If
Application.EnableEvents = True
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Cancel = True
Application.EnableEvents = False
If Target = "" Then Exit Sub
Cells(Target.Row, Target.Column) = Cells(Target.Row, Target.Column) / Cells(Target.Row, 3)
Target.NumberFormat = "0"
Target.Interior.ColorIndex = 34
Application.EnableEvents = True
End Sub
Allerdings hast du das beforedoubleClick genommen. Das heißt, der code läuft ab, rechnet alles um, setzt alle Ereignisse wieder auf aktiv, und anschließend wir der Doppelklick ausgeführt. Damit bist du im Feld zur Änderung. Drückst du ESC ist alles in Ordnung, nix wird geändert. Bestätigst du aber mit ENTER, schlägt sofort das CHANGE-Ereignis wieder zu und alles ist beim alten. Die kleine Zeile Cancel = true vermeidet den eigentlichen Doppelklick. Allerdings weiß ich nicht, ob es generell in deinem Sinne ist, den Doppelklick zu unterdrücken.
Gruß, Marc
Anzeige
AW: Target Change / BeforeDoubleClick
31.03.2011 22:07:24
Alex
Hi Marc,
Application.EnableEvents = True / False hat irgendwie keine Auswirkung auf das Makro.
Doppelklick ist Okay und Esc ist klar.
Vorgang: ich gebe eine Zahl x in Zelle y ein.
Mit Change wird beim verlassen der Zelle y die Zahl x mit Zelle z multipliziert und das Format geändert.
Mit einem Doppelklick auf die Zelle y wird mir die Anzahl x angezeigt. Die Zahl kann nun ändern, oder ich lasse es sein. Das ist auch so gewollt.
Problemstellung:
Wenn ich nun ohne einen Doppelklick eine Zahl x1 in Zelle y Eingebe, wird natürlich nicht mehr mit der Zelle z multipliziert, weil das Format nicht stimmt. ist das überhaupt realisierbar?
Hab schon einiges ausprobiert, aber finde keine Lösung...
Anzeige
AW: Target Change / BeforeDoubleClick
01.04.2011 00:30:53
Alex
Beispiel wie es sein solte aber nicht funktioniert. Else wird nicht erkannt, und der die Zelle wird bis max Integer gerechnet...
Zelle ist bei der ersten Eingabe mit "0" formatiert.
a = Target.Row
b = Target.Column
If Target = "" Then Exit Sub
If Cells(a, b).NumberFormat = "#,##0.00 $" Then
Cells(a, b).NumberFormat = "0"
Cells(a, b).Interior.ColorIndex = 2
Cells(a, b) = Cells(a, b) * Cells(a, 3)
'Cells(a, b).NumberFormat = "#,##0.00 $"
'Exit Sub
Else
'If Cells(a, b).NumberFormat = "0" Then
Cells(a, b).NumberFormat = "#,##0.00 $"
Cells(a, b).Interior.ColorIndex = 0
Cells(a, b) = Cells(a, b) * Cells(a, 3)
End If
Anzeige
AW: Target Change / BeforeDoubleClick
02.04.2011 18:40:34
fcs
Hallo Alex,
ohne die Deaktivierung der Ereignismakros läuft deine Prozedur in eine Endlosschleife. Bei mir stürzt Excel 2007 mit deiner Version schlicht und einfach ab. Außerdem solltest du unbedingt Bedingungen einbauen für die Zeilen/Spalten in denen die Eingabe von Werten eine Berechnung auslosen soll.
Gruß
Franz
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Long, b As Long
a = Target.Row
b = Target.Column
Application.EnableEvents = False
If Target = "" Then Exit Sub
If a > 2 And b = 2 Then 'Bedingungen für Eingabezeile und -spalte
If Cells(a, b).NumberFormat = "#,##0.00 $" Then
Cells(a, b).NumberFormat = "0"
Cells(a, b).Interior.ColorIndex = 2
Cells(a, b) = Cells(a, b) * Cells(a, 3)
Else
'If Cells(a, b).NumberFormat = "0" Then
Cells(a, b).NumberFormat = "#,##0.00 $"
Cells(a, b).Interior.ColorIndex = 0
Cells(a, b) = Cells(a, b) * Cells(a, 3)
End If
End If
Application.EnableEvents = True
End Sub

Anzeige
AW: Target Change / BeforeDoubleClick
02.04.2011 23:44:33
Alex
Da war ich aber komplett auf'm Holzweg... Warum kompliziert, wenn es doch so einfach sein kann?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Long, b As Long
a = Target.Row
b = Target.Column
If Target = "" Then Exit Sub
Application.EnableEvents = False
If IsNumeric(Target.Value) Then
Cells(a, b).NumberFormat = "#,##0.00 $"
Cells(a, b).Interior.ColorIndex = 2
Cells(a, b) = Cells(a, b) * Cells(a, 3)
End If
Application.EnableEvents = True
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target = "" Then Exit Sub
Application.EnableEvents = False
If IsNumeric(Target.Value) Then
Cells(Target.Row, Target.Column) = Cells(Target.Row, Target.Column) / Cells(Target.Row, 3)
Target.NumberFormat = "0"
Target.Interior.ColorIndex = 36
End If
Application.EnableEvents = True
End Sub

Tausend Dank für die Unterstützung!
Anzeige

48 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige