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

Worksheet_Change, aber mit relativem Feldbezug

Forumthread: Worksheet_Change, aber mit relativem Feldbezug

Worksheet_Change, aber mit relativem Feldbezug
21.05.2024 14:14:23
Jörn
Hallo Ihr

Ich habe hier schon viele gute Hinweise und Anregungen erhalten, aber in diesem konkreten Fall stehe ich schon seit Längerem auf dem sprichwörtlichen Schlauch...

Ich brauche eine Art Worksheet-Change-Befehl, der aber in seiner Arbeitsweise mit sich verschiebenden Zellen mitwandert - also quasi mit relativem Zellbezug.

Soll heißen, wenn ich z.B. das Feld F3 hinsichtlich einer Veränderung abfrage, so dass im Fall einer Änderung ein anderes Makro z.B das benachbarte Feld G3 ändert, klappt das einwandfrei

Wird jetzt aber darüber eine Zeile eingefügt, soll sich die aus F3 erfolgte Abfrage inkl. in G3 abgelegtem Ergebnis auf die Zeilen F4 bzw. G4 verlagern.

Kann mir jemand damit helfen?
Das würde mich wirklich weiterbringen :-)

Viele Grüße

Jörn
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worksheet_Change, aber mit relativem Feldbezug
21.05.2024 14:18:05
Kuwer
Hallo Jörn,

vergib für die Zelle F3 einen Namen. Diesen Namen verwendest Du dann im Code.

Gruß, Uwe
AW: Worksheet_Change, aber mit relativem Feldbezug
21.05.2024 16:02:39
Jörn
Hmmm...

Wenn man sich jetzt mal so den Standard-Baustein

Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$F$3" Then
IrgendwastollesmitG3machen
End If
End Sub

anguckt, wie müsste ich dann den absoluten Bezug "$F$3" in eine benannte Variable umbauen, damit sich das Feld beim Verschieben z.B. durch Einfügen mit einer Prüf-Funktion mit verschiebt?

Das Ergebnis soll nachher irgendwann so aussehen, dass in einem zu prüfenden Feld eingetragen wird, ob ein Gegenstand gerade von seinem Standard-Lagerplatz ausgegeben/umgeräumt worden ist, oder sich eben an diesem befindet.
Und wenn er als "ausgegeben" markiert ist, dann soll in ein benachbartes Feld eine Benutzerkennung eingetragen werden.
Bis auf das Verschieben dieses Zellenpaares, z.B. beim Einfügen eines neuen Gegenstandes in die Auflistung oder beim Sortieren, also quasi "statisch", klappt alles....
Anzeige
Beispiel
21.05.2024 16:16:48
Kuwer
Hallo Jörn,

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("_DerName")) Is Nothing Then
Target.Offset(, 1).Value = Target.Address(0, 0)
End If
End Sub


Gruß, Uwe
Du weißt offensichtlich nicht, ....
21.05.2024 22:26:42
{Boris}
Hi,

...wie man einer Zelle (einem Bereich) einen Namen vergibt und wie man diesen dann im VBA-Code verwendet. Oder?

VG, Boris
Anzeige
Jörn, guckst du auch hier
22.05.2024 08:54:19
Oberschlumpf
Hi Jörn,

Zelle oder Zellbereich benennen geht so:

1. Klick die Zelle an, der du einen Namen geben willst, nehmen wir mal F4
2. Oberhalb der excelinternen Spaltennamen (A,B,C,usw) steht jetzt F4, weil du die Zelle F4 angeklickt hattest
3. Klick nun in das in 2. beschriebene Feld, so dass F4 blau unterlegt ist
4. Schreib anstelle von F2 "_DerName" rein (aber ohne die Anführungszeichen!) UND drück die Enter-Taste

alles müsste so aussehen:

Userbild

Und nun verwende den Code von Uwe...änder in Zelle F4 etwas..oder füg oberhalb von Zeile 4 eine/mehrere Zeilen hinzu und änder danach wieder den Wert in F4

Wenn du bis hierhin alles richtig gemacht hast, dann hast du....Ziel erreicht

Hilfts?

Ciao
Thorsten
Anzeige
AW: Jörn, guckst du auch hier
22.05.2024 14:52:34
Jörn
Stück für Stück komme ich langsam weiter :-) Aber ich glaube, da fehlt noch etwas ganz Grundsätzliches in meinem Hirn...

Ich habe aktuell zwei Bausteine (und gleichzeitig Baustellen):

Im eigentlichen Arbeitsblatt:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("K20")) Is Nothing Then ' Fragt K20 hinsichtlich Änderung ab
Target.Offset(, 2).Value = Environ("UserName") ' schreibt bei Änderung von K20 in M20 den Benutzernamen
End If
End Sub

Danke an dieser Stelle nochmal an Uwe für den Baustein!

Das klappt für das Feld K20 prima, dass dann bei Änderung von K20 in M20 der aktuelle Benutzer eingetragen wird.
Und wenn ich dann darüber eine Zeile einfüge, verschiebt sich natürlich Beides ganz brav und K20 steht erneut als Abfragefeld zur Verfügung und beschreibt ggf. M20 erneut.
Aber nun habe ich noch das Problem, dass das neue Feld K21, das durch Verschiebung von K20 entstanden ist, bei Änderung nichts mehr auslöst, weil es ja auch nicht "abgefragt" wird.

Ich habe außerdem versucht, durch den zusammengebastelten Baustein:

Sub Feld_benennen()

Rows("8:8").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 'Zeile neu einfügen

On Error Resume Next
Range("K8").Name.Delete 'Benennung der Zelle löschen
Range("K8").Select
ActiveWorkbook.Names.Add Name:=Range("I3").Value & Range("J3").Value, RefersToR1C1:="=Tabelle1!R8C11" 'Schreibt Namen, der aus dem Inhalt der Zellen I3 und J3 besteht
Zähler_erhöhen 'setzt den Inhalt von J3 für den nächsten Zyklus "+1)
On Error GoTo 0
End Sub

einzelne Felder bei Einfügen einer Zeile automatisiert umzubenennen.
Das klappt auch erstmal ganz gut, und bei jedem Einfügen einer Zeile wird die Bezeichnung "Variable_#" um eine Zahl höher gesetzt und neu in K8 geschrieben.
Versuche ich aber, das im oberen Block abgefragte Feld K20 automatisiert umzubenennen, kommt eine Fehlermeldung.

Ganz grob nochmal:
Ziel soll es sein, das in einer Tabelle mit verschiedenen Gegenständen (Aufbau der Tabelle pro Zeile: Gegenstand/Zuordnung1/Zuordnung2/Status/Benutzername/Ausgabedatum) ein bestimmtes Feld (Status) hinsichtlich Änderung abgefragt wird, und bei erfolgter Änderung im Nachbarfeld der Benutzername eingetragen wird.
Wird jetzt aufgrund Neuanlage eines Gegenstandes eine neue Zeile eingefügt, soll sich das ganze Gebilde verschieben, soll aber (und hier kommt der Knackpunkt für mich) auch nach Verschieben (und auch in der verschobenen Zeile!) noch bei Änderung des Status den Benutzernamen ändern....


Habt ihr da noch eine Idee für mich?

Danke für eure Mithilfe!!!!!


Anzeige
AW: Du weißt offensichtlich nicht, ....
22.05.2024 08:39:49
Jörn
Hi Boris

Ja, das ist leider tatsächlich so...
Grundsätzlich ist mir die Nutzung von Variablen natürlich bekannt, aber wie genau die Einbindung in einen VBA-Code funktioniert, da bin ich dann leider "raus".
Dafür beschäftige ich mich auch erst zu kurz mit VBA.
Das hat dann natürlich zur Folge, dass ich sehr ineffiziente Codes erstelle und mir an der einen oder anderen Stelle (viel) unnötige Arbeit mache.
Aber gut, ich mache das halt nebenbei, und vielleicht fällt ja der "Groschen", wenn ich mich mit dem hier geposteten Baustein beschäftige und die Systematik verinnerliche.
Anzeige
AW: Du weißt offensichtlich nicht, ....
22.05.2024 09:02:56
{Boris}
Hi,

ergänzend zu Thorstens Erklärung: Die Zelle mit dem Namen spricht man in VBA mit Range("DerName ") an.

VG Boris
AW: Beispiel
21.05.2024 17:38:40
Jörn
Danke Uwe für die Unterstützung!

Ich werde den von dir geschriebenen Baustein mal versuchen in mein Projekt zu integrieren.
Intersect habe ich bislang noch nie angewendet. Vielleicht auch daher mein Problem :-)
Gebe ich dann bei der Target.Adress Zeile und Spalte als Zahl ein?

Viele Grüße

Jörn

Anzeige
AW: Beispiel
21.05.2024 17:53:51
Kuwer
Hallo Jörn,

Target.Address ist nur die Ausgabe der Zelladresse, was ich nur zur Demo genommen habe. Für Dich wichtig ist Target.Offset. Damit sprichst Du dann die umliegenden Zellen von Target ausgehend an. Offset(Anzahl Zeilen, Anzahl Spalten).

Gruß, Uwe
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige