Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Target.address = range

Forumthread: Target.address = range

Target.address = range
30.07.2021 16:44:49
Christoph
Moin,
ich habe da ein Problem mit einer Sache.
Hier

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$G$7" And WorksheetFunction.IsNumber(Target) Then Target = -Abs(Target)
End Sub

soll statt nur in der Zelle G7, in allen Zellen von G7 bis G49, jegliche Zahlen negativ gerechnet und angezeigt werden, auch wenn sie einfach positiv eingetragen werden.
Das Ganze soll ein ehefrauensicheres Kassenbuch werden. Sie hat sich so oft vertippt und ich habe keine Lust mehr das zu kontrollieren und zu korrigieren. Kostet zu viel Zeit.
Könnt ihr helfen?
Grüße
Christoph
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Target.address = range
30.07.2021 16:47:32
Hajo_Zi
Hallo Christoph,

Private Sub Worksheet_Change(ByVal Target As Range)
Dim RaBereich As Range                          ' Variable für Bereich
Dim RaZelle As Range                            ' Variable für Zelle
Set RaBereich = Range("L22:M39, O21:O26")       ' Bereich der Wirksamkeit
' noch mehr Bereiche
'Set RaBereich = Union(Range("C11:AG11 , C13:AG13, C15:AG15 , C17:AG17"), _
'    Range("C35:AE35, C37:AE37, C43:AG43, C45:AG45 , C47:AG47 , C49:AG49"), _
'    Range("C67:AF67 , C69:AF69 , C75:AG75 , C77:AG77 , C79:AG79 , C81:AG81"), _
'    Range("C99:AF99 , C101:AF101, C107:AG107 , C109:AG109 , C111:AG111"), _
'    Range("C127:AG127 , C129:AG129 , C131:AG131 , C133:AG133 , C139:AF139"), _
'    Range("C155:AG155, C157:AG157 , C159:AG159 , C161:AG161 , C163:AG163"), _
'    Range("C179:AF179 , C181:AF181, C187:AG187 , C189:AG189 , C191:AG191"))
' Union 30 Argumente zu je 255 Zeichen
' ab Vesion XP braucht der Schutz nicht aufgehoben werden
' Formatierung bei Schutz kann über Dialog Schutz eingestellt werden
' Zelle die in dem Bereich liegen auf die Variable schreiben
' damit werden nur noch die Zellen bearbeitet die im vorgegeben Bereich liegen
' jede Zelladresse ist einzeln angegeben
Set RaBereich = Intersect(RaBereich, Target)
If Not RaBereich Is Nothing Then
'ActiveSheet.Unprotect ("Passwort")
For Each RaZelle In RaBereich
With RaZelle
GrußformelHomepage
Anzeige
AW: Target.address = range
30.07.2021 16:56:29
ChrisL
Hi Christoph

Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
If Not Intersect(Target, Range("G7:G49")) Is Nothing Then
On Error Resume Next
Application.EnableEvents = False
For Each c In Intersect(Target, Range("G7:G49"))
If IsNumeric(c) And c > 0 Then c = c * -1
Next c
Application.EnableEvents = True
End If
End Sub
cu
Chris
Anzeige
AW: Target.address = range
30.07.2021 16:57:03
GerdL
Moin Christoph, teste mal.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
If Not Intersect(Range("G7:G49"), Target) Is Nothing Then
For Each Zelle In Intersect(Range("G7:G49"), Target)
Application.EnableEvents = False
If IsNumeric(Zelle) Then Zelle = Abs(Zelle) * -1
Application.EnableEvents = True
Next
End If
End Sub
Gruß Gerd
Anzeige
AW: Target.address = range
30.07.2021 17:42:31
onur

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("G7:G49")) Is Nothing Then Exit Sub
Application.EnableEvents = False
If IsNumeric(Target) Then Target = -Abs(Target)
Application.EnableEvents = True
End Sub

Anzeige
AW: Target.address = range
30.07.2021 18:26:01
GerdL
Moin onur,
Mehrere Zellen markieren - Eingabe einer positiven Zahl - STRG+ENTER
deckt dein Code offenbar nicht ab.
Gruß Gerd
AW: Target.address = range
30.07.2021 18:35:16
onur
Hi Gerd,
"ein ehefrauensicheres Kassenbuch" - warum sollte die Ehefrau mehrere Zellen gleichzeitig (mehrere gleiche Ausgaben ?) eingeben wollen, wenn sie es nicht mal mit dem Minuszeichen gebacken kriegt? :)
Gruß
Onur
Anzeige
AW: Target.address = range
30.07.2021 18:48:15
GerdL
Hi onur,
unterschätze seine Ehefrau nicht. :-)
Gruß Gerd
;

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
Anzeige

Infobox / Tutorial

Target.Address in Excel VBA effektiv nutzen


Schritt-für-Schritt-Anleitung

Um in Excel VBA die Funktionalität von Target.Address zu nutzen, um sicherzustellen, dass Eingaben in einem bestimmten Zellbereich automatisch bearbeitet werden, kannst du folgenden Code verwenden:

  1. Öffne den Visual Basic for Applications (VBA) Editor in Excel (Alt + F11).
  2. Wähle das entsprechende Arbeitsblatt im Projektfenster aus.
  3. Füge den folgenden Code in das Codefenster ein:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
    If Not Intersect(Target, Range("G7:G49")) Is Nothing Then
        Application.EnableEvents = False
        For Each c In Intersect(Target, Range("G7:G49"))
            If IsNumeric(c) And c > 0 Then c = c * -1
        Next c
        Application.EnableEvents = True
    End If
End Sub

Dieser Code bewirkt, dass jede positive Zahl, die in den Zellen G7 bis G49 eingegeben wird, automatisch in eine negative Zahl umgewandelt wird.


Häufige Fehler und Lösungen

  • Fehler: Der Code funktioniert nicht, wenn mehrere Zellen gleichzeitig bearbeitet werden.

    • Lösung: Stelle sicher, dass du die Intersect-Funktion korrekt verwendest und die Schleife für jede Zelle im Zielbereich durchläuft.
  • Fehler: Application.EnableEvents wird nicht richtig gesetzt.

    • Lösung: Immer sicherstellen, dass Application.EnableEvents auf True zurückgesetzt wird, auch wenn ein Fehler auftritt. Füge einen Fehlerbehandlungsmechanismus hinzu.

Alternative Methoden

Eine alternative Methode zur Überprüfung, ob die Target.Address im gewünschten Bereich liegt, ist die Verwendung der Intersect-Funktion. Hier ist ein Beispiel:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("G7:G49")) Is Nothing Then
        ' Dein Code hier
    End If
End Sub

Mit dieser Methode kannst du spezifische Aktionen für alle Zellen im Bereich G7 bis G49 implementieren, was eine flexible Handhabung der Eingaben ermöglicht.


Praktische Beispiele

Hier sind einige Beispiele zur Veranschaulichung der Anwendung von Target.Address:

  1. Negative Zahlen umwandeln: Wenn eine positive Zahl in den Zellen G7 bis G49 eingegeben wird, wird sie automatisch negativ.

  2. Formatierung anpassen: Du kannst auch die Formatierung der Zelle anpassen, wenn die Zahl negativ wird:

With c
    .NumberFormat = "0.00" ' Setzt das Zahlenformat
End With
  1. Mehrere Bereiche verwalten: Wenn du mehrere Bereiche verwalten möchtest, kannst du die Union-Methode verwenden:
Dim RaBereich As Range
Set RaBereich = Union(Range("A1:A10"), Range("B1:B10"))

Tipps für Profis

  • Nutze Option Explicit ganz oben in deinem Modul, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Implementiere eine Fehlerbehandlung, um sicherzustellen, dass das Makro auch bei unerwarteten Eingaben stabil bleibt.
  • Verwende Kommentare, um den Code zu dokumentieren, damit andere (oder du selbst in Zukunft) den Zweck jeder Codezeile verstehen.

FAQ: Häufige Fragen

1. Was passiert, wenn ich Target.Address direkt mit einem Bereich vergleiche? Es wird typischerweise empfohlen, Intersect zu verwenden, um zu überprüfen, ob Target in einem bestimmten Bereich liegt. Direkte Vergleiche führen oft zu unerwarteten Ergebnissen.

2. Wie kann ich sicherstellen, dass der Code bei einem Fehler nicht abstürzt? Setze On Error Resume Next ein, um Fehler zu ignorieren, aber sei vorsichtig, dies kann zu schwer nachvollziehbaren Bugs führen. Besser ist es, eine eigene Fehlerbehandlung zu implementieren.

3. Funktioniert dieser Code in allen Excel-Versionen? Die oben genannten Codes sollten in den meisten Excel-Versionen ab Excel 2007 funktionieren. Prüfe immer die Kompatibilität, wenn du mit älteren Versionen arbeitest.

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