Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Workbook_SheetChange
12.09.2014 20:35:42
Peter
Guten Abend
Damit ich einen negativen Betrag im Format n- und -n eingeben kann, habe ich folgenden Code bei DieseArbeitsmappe hinterlegt:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Left(Target, 1)  "-" And Right(Target, 1) = _
"-" And IsNumeric(Left(Target, Len(Target) - 1)) Then
Target = "-" & Left(Target, Len(Target) - 1)
Else
End If
End Sub

Nun kriege ich noch Probleme, wenn die Selektion mehrere Zellen umfasst. Wie kann ich das abfangen?
Gruss, Peter

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Workbook_SheetChange
12.09.2014 21:40:47
Beverly
Hi Peter,
sollen bei Mehrfachmarkierung alle Zellen geändert werden oder soll dann gar nichts passieren?


AW: Workbook_SheetChange
12.09.2014 21:52:00
Peter
Hallo Karin
Es wäre praktisch, beide Varianten zu kennen :-)
Gruss
Peter

AW: Workbook_SheetChange
12.09.2014 22:31:41
Beverly
Hi Peter,
versuche es mal so:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
For Each Target In Target
If Len(Target) > 1 Then
If Left(Target, 1)  "-" And Right(Target, 1) = _
"-" And IsNumeric(Left(Target, Len(Target) - 1)) Then
Application.EnableEvents = False
Target = "-" & Left(Target, Len(Target) - 1)
Application.EnableEvents = True
End If
End If
Next Target
End Sub


Anzeige
AW: Workbook_SheetChange
12.09.2014 22:36:46
Daniel
Hi
Variante a) nichts machen wenn mehrer Zellen ausgewählt werden:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.CountLarge > 1 Then Exit sub
Application.EnableEvents = False
If Left(Target, 1)  "-" And Right(Target, 1) = _
"-" And IsNumeric(Left(Target, Len(Target) - 1)) Then
Target = "-" & Left(Target, Len(Target) - 1)
End If
Application.EnableEvents = True
End Sub

Variante b) Jede Zelle bearbeiten, per Schleife
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Zelle as Range
Application.enableEvents = False
For Each Zelle in Intersect(Target, sh.UsedRange)
If Left(Zelle, 1)  "-" And Right(Zelle, 1) = _
"-" And IsNumeric(Left(Zelle, Len(Zelle) - 1)) Then
Zelle = "-" & Left(Zelle, Len(Zelle) - 1)
End If
Next
Application.enableEvents = True
End Sub
das Application.EnableEvents = False verhindert den rekursiven Selbstaufruf des Makros (muss hinterher wieder aktiviert werden, denn diese Einstellung bleibt bei Makroende erhalten!)
das Intersect(Target, sh.Usedrange) verhindert überlange Laufzeiten, wenn du mal ne ganze Spalte bearbeitest (z.B. beim löschen)
Gruß Daniel

Anzeige
AW: Workbook_SheetChange
15.09.2014 22:38:28
Peter
Hallo zusammen
Vielen Dank. Ich habe den Code von Daniel übernommen, diesen dann noch mit der Bedingung aus dem Code von Karin ergänzt (Abfrage, ob Targetlänge grösser als 1 ist).
So ist's prima.
Gruss, Peter

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige