Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Target as Range ???

Forumthread: Target as Range ???

Target as Range ???
05.03.2004 15:27:35
Ben
Hallo,
ich verstehe die Redeweise "Target as Range" nicht. Nehmen wir die Prozedur Worksheet_Change:
Ich vermute, Target ist hier jene Zelle, die geändert wird bzw. gerade geändert worden ist. - Richtig?
Aber wie steht es in der Prozedur Worksheet_SelectionChange?
Nehmen wir an, Zelle A1 ist selektiert, ich drücke Enter, und der Cursor springt auf Zelle A2. Ist Target hier A2 - oder A1?
Überhaupt ist mir nicht klar, warum man von Target sprechen muß, wenn man doch schon von ActiveCell u. dgl. sprechen kann. Wozu? Ich frage mich z.B. auch, ob
Target.Value
dasselbe ist wie
Target.Text
Für Angaben hierzu wäre ich Euch sehr verbunden!
Viele Grüße, Ben.
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Target as Range ???
05.03.2004 15:49:08
Alex K.
Hallo Ben,
Target ist lediglich der Variablenname. Dieser ist frei wählbar und sollte ein Bezug zu dem Inhalt der Variable habe. Also MS könnte die Varible auch "Hans", "Ziel", "Zelle" oder sonstwie nennen.
Wichtiger ist die Anweisung "As Range". Diese Anweisung bestimmt den Datentyp der Variable. "Range" ist eine Klasse und diese Klasse besitzt Methoden z.B. Target.Address und Eigenschaften z.B. Target.Value
Über die Hilfe mal nach dem Begriff "Range" suchen und dort dann "Range Objekt" auswählen. Dann siehst du alle Methoden und Eigenschaften für dieses Objekt.
Der Unterschied zwischen .Value und .Text ist ganz einfach. In .Value steht der eigentlich Wert der Zelle, in Text steht der formatierte Wert der Zelle. Augenscheinlich wird dies z.B. bei einer Zelle mit einem Datum.
In .Value steht z.B. 37987 und in .Text steht "1.1.2004" bei einer Zellformatierung "T.M.JJJJ".
Probiere doch mal aus in der Ereignis-Prozedur "Worksheet_SelectionChange" die Anweisung
MsgBox Target.Address
einzufügen. Dann wechsle mal in deiner Tabelle zwischen beliebigen Zellen bzw. markiere mal eine Zelle / Zellbereiche. Dann siehst du, was passiert. Probieren geht über Studieren :-)
Anzeige
AW: Target as Range ???
05.03.2004 15:57:17
ANdreas
Hallo Ben,
diese beiden Ereignisse für ein Worksheet haben nun mal diesen Parameter der übergeben wird. Bei SelectionChange wird/werden die neu selektierte(n) Zelle(n) übergeben, also in Deinem Beispiel richtig A2.
Der Wert einer Zelle ist anders als der Text. Eine Zelle hat viele "Eigenschaften", die per VBA angesprochen werden können.
Dazu gib in A1 einfach die Zahl 100 ein.
Und in A2 die Formel =A1 und formatiere A2 als Währung.
Dann teste mal dieses Beispielmakro um ein paar verschiedene Eigenschaften der Zelle per SelectionChange anzuzeigen:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim s$, c As Range, i%
i = 1
For Each c In Target 'Kann auch Mehrfachselektion verarbeiten
With c
s = ".Address: " & .Address & vbCrLf & _
".Value: " & .Value & vbCrLf & _
".Text: " & .Text & vbCrLf & _
".Formula: " & .Formula & vbCrLf
MsgBox s, , i & ". Zelle von " & Target.Count & " (" & _
Target.Address(0, 0) & ")"
i = i + 1
End With
Next c
End Sub

Schnell wird Dir auffallen, das .Value den tatsächlichen Wert der Zelle anzeigt. Dagegen enthält .Text das in der Zelle angezeigte. Dann versuch das auch mit Mehrfachselektion, markiere also z.B. A1 und A2 gleichzeitig ;-)
Hoffe das hilft weiter,
Andreas
Anzeige
AW: Target as Range ???
05.03.2004 17:02:07
Ben
Hallo Alex und Andreas,
herzlichen Dank für Eure Auskünfte und Makros!
Das hat mir doch schon mal sehr weitergeholfen.
Weiterhin alles Gute und ein erholsames Wochenende!
Gruß, Ben.
Danke für die Rückmeldung oT
05.03.2004 17:12:16
Alex K.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Target as Range in Excel VBA verstehen


Schritt-für-Schritt-Anleitung

  1. Öffne das Excel-Dokument und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (deinWorkbookName)" > Einfügen > Modul.
  3. Erstelle die Sub-Prozedur für Worksheet_SelectionChange:
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       MsgBox "Du hast die Zelle " & Target.Address & " ausgewählt."
    End Sub
  4. Testen: Wechsle zwischen Zellen in Deinem Arbeitsblatt, um die Funktion zu überprüfen.
  5. Variationen ausprobieren: Ändere den Code, um unterschiedliche Eigenschaften von Target zu nutzen, wie .Value oder .Text.

Häufige Fehler und Lösungen

  • Fehler: "Typkonflikt" beim Zugriff auf Target.

    • Lösung: Stelle sicher, dass die Prozedur korrekt als ByVal Target As Range definiert ist.
  • Fehler: MsgBox zeigt nicht die erwarteten Werte.

    • Lösung: Überprüfe, ob Du die richtige Zelle ausgewählt hast und ob die Zellformate korrekt sind.

Alternative Methoden

  1. Verwendung von Worksheet_Change:

    Private Sub Worksheet_Change(ByVal Target As Range)
       MsgBox "Zelle " & Target.Address & " wurde geändert."
    End Sub
  2. Verwenden von ActiveCell: Anstelle von Target kannst Du auch ActiveCell verwenden, um die aktuell aktive Zelle zu referenzieren.


Praktische Beispiele

Beispiel 1: Eigenschaftsanzeige

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    MsgBox "Wert: " & Target.Value & vbCrLf & "Formatierter Text: " & Target.Text
End Sub

Beispiel 2: Mehrfachselektion

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim c As Range
    For Each c In Target
        MsgBox "Zelle: " & c.Address & " hat Wert: " & c.Value
    Next c
End Sub

Tipps für Profis

  • Kennzeichne Deine Variablen: Nutze sprechende Namen wie SelectedCell anstelle von Target, um den Code lesbarer zu machen.
  • Nutze Fehlerbehandlung: Füge On Error Resume Next hinzu, um Laufzeitfehler zu vermeiden, vor allem bei komplexen Berechnungen.
  • Dokumentiere Deinen Code: Verwende Kommentare, um wichtige Abschnitte Deines Codes zu erklären.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen .Value und .Text? .Value gibt den tatsächlichen Wert der Zelle zurück, während .Text den formatierten Text anzeigt, der in der Zelle dargestellt wird.

2. Warum verwende ich Target und nicht ActiveCell? Target ermöglicht es Dir, mehrere Zellen zu verarbeiten, die als Argument übergeben werden, während ActiveCell immer nur die aktuell ausgewählte Zelle berücksichtigt.

3. Wie kann ich auf mehrere Zellen gleichzeitig zugreifen? Du kannst die For Each-Schleife verwenden, um durch alle Zellen im Target-Bereich zu iterieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige