Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1152to1156
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

On change Ereignis funzt nicht

On change Ereignis funzt nicht
Ptonka
Hallo zusammen,
folgendes Problem:
Ich habe Einträge (Zahlen) in Spalte A (bis Zeile 55). In Spalte B soll jedes mal, wenn eine Zahl in Spalte A geändert wird, diese Zahl mit 0,25 multipliziert werden.
Da ich keine Formeln hinterlegen möchte, habe ich es mit dem On Change-Ereignis versucht:
Siehe u.a. Skript. Problem: das Skript hängt sich immer (irgendwann bei "Next i") auf und muss debuggt werden. Ergo ist auch keine weitere Eingabe im Tabellenblatt möglich.
Die Berechnungen werden alle korrekt durchgeführt. Warum hängt sich das Skript auf?
Für einen Tipp bzw. eine Hilfe wäre ich sehr dankbar.
Gruß,
Ptonka
Private Sub Worksheet_Change(ByVal target As Range)
Wert = target.Value
Spalte = ActiveCell.Column
LZ = [A65536].End(xlUp).Row
Select Case Spalte
Case Is  1
Exit Sub
End Select
Select Case Wert
Case Is = ""
Exit Sub
Case Is  ""
For i = 2 To LZ
Menge = Cells(i, 1).Value
If Menge = "" Then GoTo weiter
Cells(i, 2).Value = Cells(i, 1).Value * 0.25
weiter:
Next i
End Select
End Sub

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

Betreff
Benutzer
Anzeige
AW: On change Ereignis funzt nicht
23.04.2010 09:49:09
Hajo_Zi
Hallo,
Option Explicit
Private Sub Worksheet_Change(ByVal target As Range)
Dim I As Long
If ActiveCell.Column = 1 And target  "" Then
For I = 2 To [A65536].End(xlUp).Row
If Cells(I, 1).Value  "" Then
Cells(I, 2).Value = Cells(I, 1).Value * 0.25
End If
Next I
End If
End Sub

Worksheet_Change funzt
23.04.2010 09:57:37
Erich
Hi zusammen,
auch Hajos Code wird wohl Probleme bereiten.
Was passiert, wenn Worksheet_Change die Tabelle ändert?
Worksheet_Change wird aufgerufen - und ändert die Tabelle. Was passiert? ...
Hier mein Vorschlag - mit Application.EnableEvents = ...:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim I As Long
If ActiveCell.Column = 1 And Target  "" Then
Application.EnableEvents = False
For I = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(I, 1).Value  "" Then
Cells(I, 2).Value = Cells(I, 1).Value * 0.25
End If
Next I
Application.EnableEvents = True
End If
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Worksheet_Change funzt
23.04.2010 10:22:56
Ptonka
Hallo Erich, hallo Hajo,
Danke für Eure Tipps - Gemeinsam habt Ihr mich ans Ziel geführt - Danke dafür!
Funktioniert prima.
Gruß,
Ptonka
Da war aber die Frage falsch formuliert
23.04.2010 11:34:35
Matthias
Hallo
Zitat:
In Spalte B soll jedes mal, wenn eine Zahl in Spalte A geändert wird, diese Zahl mit 0,25 multipliziert werden.
Dazu bräuchte man gar keine Schleife.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, Range("A:A")) Is Nothing And IsNumeric(Target) And Target > 0 And Target.Count = 1 Then
  Target.Offset(, 1) = Target * 0.25
  Else
  Target.Offset(, 1) = ""
 End If
End Sub
Gruß Matthias
Anzeige
@Matthias: Ja, aber ...
23.04.2010 16:43:46
Erich
Hi Matthias,
da stimme ich dir zu: Bei der Aufgabenstellung geht es besser ohne Schleife.
Allerdings würde ich deinen Codevorschlag so nicht einsetzen.
Wenn du einen Bereich - sagen wir C5:C7 - kopierst und in Spalte A einfügst,
bekommst du einen Runtime Error 13 - Typen unverträglich.
IsNumeric(Target) And Target > 0 sind beide für mehrzellige Bereiche nicht definiert.
Da die Routine zwar ändert, aber nicht in Spalte A, gibt es hier keinen Aufrufzirkel.
Trotzdem würde ich Application.EnableEvents verwenden, um unnötige Aufrufe ganz zu vermeiden.
Mein Vorschlag:

Option Explicit
Private Sub xWorksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Count = 1 Then
Application.EnableEvents = False
Target.Offset(, 1) = ""
If IsNumeric(Target) Then Target.Offset(, 1) = Target * 0.25
Application.EnableEvents = True
End If
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort und: Schönes WoEnde!
Anzeige
AW: @Erich: habs getestet ...
23.04.2010 23:47:22
Matthias

Hallo Erich
Ich habs getestet, Danke für den Hinweis
Übrigens meintest Du sicher .Column statt .Row
Ich würde es dann doch noch etwas erweitern, da wenn eine Zelle in Spalte A geleert wird
sonst eine "Null" in der Nachbarzelle eingetragen wird.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = 1 And Target.Count = 1 Then
    Application.EnableEvents = False
    Target.Offset(, 1) = ""
     If Target = "" Then
        Target.Offset(, 1) = ""
        Else
        If IsNumeric(Target) Then Target.Offset(, 1) = Target * 0.25
     End If
    Application.EnableEvents = True
 End If
End Sub

und Dein Private Sub xWorksheet_Change(ByVal Target As Range)
hat mich 5 min Zeit gekostet [ ich habs einfach nicht gleich gesehen ;o) ]

Gruß Matthias


Anzeige
Sorry Matthias, ...
24.04.2010 08:44:19
Erich
Hi Matthias,
... für meine x-Rows-Schlamperei!
Meine neueste Variante:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count = 1 Then
Application.EnableEvents = False
If Not IsEmpty(Target) And IsNumeric(Target) Then
Target.Offset(, 1) = Target * 0.25
Else
Target.Offset(, 1) = ""
End If
Application.EnableEvents = True
End If
End Sub
Ein netter Scherz nebenbei: Eine Uhrzeit ist numeric, ein Datum hingegen nicht - fürs Datum gibt es IsDate().
Grüße von Erich aus Kamp-Lintfort und nochmal: Schönes WoEnde!
Anzeige
@Erich ...
24.04.2010 21:29:31
Matthias
Hallo Erich
Is ja irre
Eine Uhrzeit ist numeric, ein Datum hingegen nicht
Und wenn ich dann die Zelle mit dem Datum anders formatiere z.B Standard
ist es dann doch numeric
geile Leistung von MS
Gruß Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige