VBA Target.Cell - Verständnisfrage
Mahlzeit,
bei meinen weiteren Basteleien habe ich heute mit Target.Cells(n,m) bei dem Worksheet_SelectionChange hantiert.
Und da verstehe ich Target.Cells nicht bzw. hoffe das sich das richtig interpretiere.
Also:
Wenn ich in Spalte 5 bin und von dem markierten Feld 1 nach unten ziehe und die Felder auffülle soll der in Target.Cells(Zeile,2).Value = "irgendwas sein.
Spalte = 5, Zeile = 3
Nach unten gezogen auf Spalte =5, Zeile =4 dann wird in Spalte 6 des Tabellenblatts ein Wert eingetragen.
Ist also Target.Cells(1,1) die aktuelle Zelle, also Cells(3,5) und dann Target.Cells(1,2) die Zelle daneben Cells(3,6), ähnlich wie bei der Offset-Funktion.
Das verwirrt mich ein bissel. Stehe ich nämlich in Zelle (3,5) also "Spalte E" und möchte etwas in "Spalte H" einfügen lassen, dann wäre "Cells nicht 3,8", sondern Target.Cells(1,3), also gleiche Zeile 1 und 3 Spalten weiter rechts?
Ist die Denkweise richtig?
bei meinen weiteren Basteleien habe ich heute mit Target.Cells(n,m) bei dem Worksheet_SelectionChange hantiert.
Und da verstehe ich Target.Cells nicht bzw. hoffe das sich das richtig interpretiere.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Zeile As Long
Dim Spalte As Long
Zeile = Target.Row 'einfach so
Spalte = Target.Column 'einfach so
For Zeile = 1 To Target.Rows.Count
If Target.Column = 5 then
Target.Cells (Zeile,2).Value = "Irgendwas"
next Zeile
End if
Also:
Wenn ich in Spalte 5 bin und von dem markierten Feld 1 nach unten ziehe und die Felder auffülle soll der in Target.Cells(Zeile,2).Value = "irgendwas sein.
Spalte = 5, Zeile = 3
Nach unten gezogen auf Spalte =5, Zeile =4 dann wird in Spalte 6 des Tabellenblatts ein Wert eingetragen.
Ist also Target.Cells(1,1) die aktuelle Zelle, also Cells(3,5) und dann Target.Cells(1,2) die Zelle daneben Cells(3,6), ähnlich wie bei der Offset-Funktion.
Das verwirrt mich ein bissel. Stehe ich nämlich in Zelle (3,5) also "Spalte E" und möchte etwas in "Spalte H" einfügen lassen, dann wäre "Cells nicht 3,8", sondern Target.Cells(1,3), also gleiche Zeile 1 und 3 Spalten weiter rechts?
Ist die Denkweise richtig?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 569493
Url: https://administrator.de/contentid/569493
Ausgedruckt am: 25.11.2024 um 10:11 Uhr
12 Kommentare
Neuester Kommentar
Hi,
ich verstehe jetzt Dein Problem nicht. Bei dieser Funktion sind Selection und Target identisch.
Wenn Du von E3 nach E4 "mit dem Kreuz ziehst", dann sind Selection und Target $E$3:$E$4. Target.Row ist dann aber immer noch 3, weil Target ein Bereich ist und in einem ausgewählten Bereich immer eine Zelle den Fokus hat. Target.Column und Target.Row beziehen sich also auf die Zelle mit dem Focus, also jene, welche "mit dem Kreuz gezogen" wurde.
E.
ich verstehe jetzt Dein Problem nicht. Bei dieser Funktion sind Selection und Target identisch.
Wenn Du von E3 nach E4 "mit dem Kreuz ziehst", dann sind Selection und Target $E$3:$E$4. Target.Row ist dann aber immer noch 3, weil Target ein Bereich ist und in einem ausgewählten Bereich immer eine Zelle den Fokus hat. Target.Column und Target.Row beziehen sich also auf die Zelle mit dem Focus, also jene, welche "mit dem Kreuz gezogen" wurde.
E.
Zum einen:
Spalte E oder B? "Sascha" steht im Screenshot in E.
Wenn Du eine Zelle innerhalb der Spalte mit dem + ziehst, dann hat "Target" nur eine Range von 1 Spalte. Wenn Du dann aber die Range mit Spalte 3 ansprichst, dann macht er einen Offset, ja, falls Du das meinst. Und weil das 1-basiert ist, ist also innerhalb der Range Spalte 3 zwei Spalten daneben.
Aber Du erreichst damit keine Reaktion auf "Wert mit dem + runterziehen" sondern einfach nur eine Reaktion auf die Auswahl einer Zelle in der Spalte E.
Ich vermute, Du willst eher auf die Änderung eines Zellwerts reagieren. Dabei ist es ja dann egal, ob der Wert manuell oder programmatisch hineingeschrieben oder kopiert wird, z.B. durch "mit + ziehen". Und da frage ich mich, warum Du das dann nicht über das Event abfängst, was Du in einer Deiner letzten Fragen schon benutzt hast:
Excel Worksheet Change - Wertänderung nicht wie gewünscht
Worksheet_Change
Übrigens:
Antwortest Du auch mal auf die Kommentare in diesen anderen Fragen und/oder schließt diese auch?
Spalte E oder B? "Sascha" steht im Screenshot in E.
Wenn Du eine Zelle innerhalb der Spalte mit dem + ziehst, dann hat "Target" nur eine Range von 1 Spalte. Wenn Du dann aber die Range mit Spalte 3 ansprichst, dann macht er einen Offset, ja, falls Du das meinst. Und weil das 1-basiert ist, ist also innerhalb der Range Spalte 3 zwei Spalten daneben.
Aber Du erreichst damit keine Reaktion auf "Wert mit dem + runterziehen" sondern einfach nur eine Reaktion auf die Auswahl einer Zelle in der Spalte E.
Ich vermute, Du willst eher auf die Änderung eines Zellwerts reagieren. Dabei ist es ja dann egal, ob der Wert manuell oder programmatisch hineingeschrieben oder kopiert wird, z.B. durch "mit + ziehen". Und da frage ich mich, warum Du das dann nicht über das Event abfängst, was Du in einer Deiner letzten Fragen schon benutzt hast:
Excel Worksheet Change - Wertänderung nicht wie gewünscht
Worksheet_Change
Übrigens:
Antwortest Du auch mal auf die Kommentare in diesen anderen Fragen und/oder schließt diese auch?
Papperlapapp, hättest du Code (Link s unten) den ich hier gepostet habe genommen wäre das schon damit alles abgefackelt und berücksichtigt, du durchläufst zwar jede Zeile aber in der Foreach Schleife sprichst aber nämlich immer Target falsch an, denn das ist ein Range-Objekt, das eben bei einem Event-Trigger aus mehreren Areas und Zellen bestehen kann, du aber sprichst immer nur die gleiche Zelle mit Target.Value an!: Also z.B. SO
Guck es dir hier ab
Excel Worksheet Change - Wertänderung nicht wie gewünscht
Dim cell as Range
for each cell in Target
' tu was mit dem cell object
MsgBox cell.Address
Next
Excel Worksheet Change - Wertänderung nicht wie gewünscht
Mal am Rande: Schau Dir mal "Select Case" an. Damit kann man solche Abfragen übersichtlicher gestalten, z.B.
Wobei "Target.Value" hier schon ungut gewählt ist. Du meinst sicher "Target.Cells(1,1).Value".
Select Case Left(Target.Value, 3)
Case "200"
Target.Offset(0, 45).Value = "A"
Case "700"
Target.Offset(0, 45).Value = "E"
Case "100", "300"
Target.Offset(0, 45).Value = "K"
Case Else
Zitat von @Aximand:
Mir war bis zu dem Zeitpunkt nicht klar, dass ich dich das "mit + ziehen" auch darin abarbeiten lassen kann.
Mir war bis zu dem Zeitpunkt nicht klar, dass ich dich das "mit + ziehen" auch darin abarbeiten lassen kann.
Aber über das SelectionChange ist auch keine Lösung, weil das ja auch dann schon eintritt, wenn Du nur in die Zelle klickst.
Zitat von @emeriks:
Ich habe das mal getestet. Das Ausfüllen über "+ ziehen" löst tatsächlich kein Worksheet_Change aus.
Doch das tut es einwandfrei, hier nochmal mehrfach getestet (Office 2010-2019)!Ich habe das mal getestet. Das Ausfüllen über "+ ziehen" löst tatsächlich kein Worksheet_Change aus.
Damit werden auch alle Zellen entsprechend berücksichtigt:
Excel Worksheet Change - Wertänderung nicht wie gewünscht
Screencast / Drag Event