Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1656to1660
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mehrere Zellen in Target ansprechen

mehrere Zellen in Target ansprechen
09.11.2018 13:23:21
Marvin
Hallo zusammen, ich bin neu im Forum und neu in VBA generell und hoffe, dass ihr mir helfen könnt.
Ich habe ein Tabellenblatt auf der in Spalte A ab Zeile 6 Ziffern eingetragen werden, welche per SVerweis Daten vom Tabellenblatt "Übersicht" in die Zelle nebendran Offset(,-1) geschrieben werden sollen. Beim Löschen der Ergebnisse aus Spalte A sollen diese auch gelöscht werden. Zusätzlich, soll in Spalte G der dort eingetragene Wert im Tabellenblatt "Übersicht" in der Zeile wo zuvor der SVerweis gefunden wurde eingetragen werden. Das alles funktioniere bereits nur konnte der Code nicht damit umgehen, wenn ich bsp. mehrere Ziffern in Spalte A löschen wollte.
Nach etwas probieren und Durchsuchen im Forum hab ich dann rausgefunden, dass man das wohl irgendwie mit einer For Schleife erledigen muss. Der unten stehende Code klappt aber noch nicht ganz, es gibt zwar keinen Fehler, aber wenn ich mehrere Ziffern in Spalte A löschen will, löscht er dennoch nur den Wert in Spalte B der ersten Zelle des Bereichs. Kann jemand helfen :) Danke vorab. Grüße Marvin
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Ziel, Quelle As Worksheet
Dim Zelle As Range
Dim i As Integer
Set Quelle = Worksheets("Übersicht")
For Each Zelle In Target
If Intersect(Zelle, ActiveSheet.Range("A6:A1000")) Is Nothing And Intersect(Zelle, ActiveSheet. _
Range("G6:G1000")) Is Nothing Then
Exit Sub
End If
With Zelle
If .Column = 1 Then
If .Value = "" Then
.Offset(, 1).Value = ""
Exit Sub
End If
.Offset(, 1).Value = WorksheetFunction.VLookup(Zelle, Quelle.Range("A6:C80"), 3_
, 1)
End If
If Zelle.Column = 7 Then
If Zelle.Value = "" Then
Exit Sub
End If
If Zelle.Offset(, -6).Value = "" Then
Exit Sub
End If
Quelle.Range("A:A").Find(what:=Zelle.Offset(, -6), LookIn:=xlValues, lookat:=xlWhole).Offset(,  _
8).Value = Zelle.Value
End If
End With
Next Zelle
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mehrere Zellen in Target ansprechen
09.11.2018 13:32:50
Bernd
Servus Marvin,
lade doch bitte eine Beispieldatei mit Fakedaten hoch. Die Struktur der Tabellen sollte jedoch erhalten bleiben.
Grüße, Bernd
AW: mehrere Zellen in Target ansprechen
13.11.2018 11:06:07
Marvin
Hallo Bernd und danke schonmal für die Rückmeldung. Das Sheet ist unter https://www.herber.de/bbs/user/125353.xlsm
hochgeladen. Nochmal zum Verständnis: Auf dem Sheet Übersicht, stehen neben den Ziffern, die Beschreibungen, die per S Verweis auf die anderen beiden Tabellenblätter turn. Prüfung und anlassbez. Prüfung bei Eingabe der Ziffer geschrieben werden sollen.
Der Code ist bei beiden Tabellenblättern identisch nur, dass bei Turn. Prüfungen noch am Ende das eingetragene Datum in Spalte 7 in das Tabellenblatt Übersicht übernommen werden soll.
Siehe:
If Zelle.Column = 7 Then
If Zelle.Value = "" Then
Exit Sub
End If
If Zelle.Offset(, -6).Value = "" Then
Exit Sub
End If
Quelle.Range("A:A").Find(what:=Zelle.Offset(, -6), LookIn:=xlValues, lookat:=xlWhole).Offset(, _
8).Value = Zelle.Value
End If
Wenn es noch allgemeine Verbesserungsvorschläge gibt gerne, nur so lerne ichs, aber Hauptproblem ist erst mal wie oben beschrieben, dass ich möchte, dass er die Zeileninhalte in den Tabellenblättern löscht auch wenn ich mehrere Werte gleichzeitig überschreibe.
Velen Dank :)
Anzeige
...Exit Sub (falsch)...If Then A Else B (richtig)
15.11.2018 09:09:30
EtoPHG
Hallo Marvin,
Deine Exit Sub stoppen jegliche weitere Verarbeitung, sobald die vorangestellte Bedingung zutrifft. D.h. nachfolgende Zellen im Bereich werden nicht mehr berücksichtigt.
Richtig wäre also ein Konstrukt wie:
If .Column = 1 Then
If .Value = "" Then
.Offset(, 1).Value = ""
Else
.Offset(, 1).Value = WorksheetFunc....
End If
End If

Im übrigen sollte vor dem Ändern von Zellen (also vor dem For Each Zelle...) und nach deinem Next Zelle folgendes stehen:
Application.EnableEvents = False
For Each
Next
Application.EnableEvents = True
Das schaltet die Ereignissteuerung aus und verhindert, dass der Code in eine rekursive Aufruf-Schleife läuft. Richtigerweise solltes du noch vor dem Wiedereinschalten eine Fehlerbehandlung einbauen, damit die Ereignissteuerung im Fehlerfall nicht ausgeschaltet bleibt. Anweisungen findest du in der Archiv-Recherche.
Gruess Hansueli
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige