Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1816to1820
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

Kopieren bestimmter Zelle aus ListObject

Kopieren bestimmter Zelle aus ListObject
10.03.2021 10:19:00
Dietmar
Hallo liebe Experten,
zuerst stelle ich mich vor. Mein Name ist Dietmar.
Ich habe ein Problem mit den Listen Objekten an einer Stelle.
Vorab, die Module laufen wunderbar bis auf eine Stelle, an der ich immer wieder scheitere.
Es geht hierbei um eine If-Abfrage, die nachträglich einfügen musste, um einen bestimmten Fall abzudecken.
Im Anhang senden ich den gesamten Code. Ja, ich weiß, etliche Zeilen kann man in Sub-Routinen zusammenfassen, aber ich bin erst einmal froh, dass es soweit läuft. Die Feinarbeit kommt noch. Ich bitte auch um Veständnis, dass ich nicht das original Worksheet senden kann, da hier sehr viele personebezogene Daten (Datenschutz) vorhanden sind. Ich lege aber ein Bild bei, dass das Problem verdeutlichen sollte.
Hier da Problem:
Ich habe eine intelligente, gefilterte Tabelle. jetzt brauch ich eine IF-Abfrage in dieser Tabelle. Wenn die Bedingung in Feld "K13" erfüllt ist, also "11.11.1911" (Dummydatum), dann soll das Datum aus Zelle Zelle "H13" nach "H14" kopiert werden. Anschließend wir die Zeile "13" herausgefiltert.
Soweit die Erklärung, nur passiert nichts. Schon bei der IF-Abfrage überspringt er den folgenden Code. Die Adressierung der Spalten mit den Header-Überschriften brauche ich, da es immer wieder mal passieren kann, dass sich die Sortierreihenfolge der Datenbankabfrage ändert, die Namen der Spalten aber bleiben.
Hier die Stelle, an der es klemmt:
With LOTerm
.Range.AutoFilter Field:=1, Criteria1:=strFKZ
.Range.AutoFilter Field:=5, Criteria1:="Zwischenbericht"
'MsgBox LOTerm.ListColumns("Nachweis/Bericht vom").DataBodyRange(3)
If LOTerm.ListColumns("Nachweis/Bericht vom").DataBodyRange(2) = DateValue("11.11.1911") Then
strZwB = LOTerm.ListColumns("Beginn des Berichtszeitraumes").DataBodyRange(2)
LOTerm.ListColumns("Beginn des Berichtszeitraumes").DataBodyRange(3) = strZwB
End If

.Range.AutoFilter Field:=12, Criteria1:=""
On Error Resume Next
Set rngLOTerm = .DataBodyRange.Columns(1).SpecialCells(xlVisible)
' On Error GoTo 0
If Not rngLOTerm Is Nothing Then
wrkShtTerm.Range("E2:E" & wrkShtTerm.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible).Copy Destination:=wrkShtUeber.Range("A15")
wrkShtTerm.Range("H2:J" & wrkShtTerm.UsedRange.Rows.Count).SpecialCells(xlCellTypeVisible).Copy Destination:=wrkShtUeber.Range("B15")
End If
On Error GoTo 0
End With
Im Vorraus vielen Dank
Dietmar

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren bestimmter Zelle aus ListObject
10.03.2021 13:32:33
ChrisL
Hi Dietmar
Vielleicht hast du vergessen die Links zu deinen erwähnten Anhängen in den Beitrag zu kopieren.
Als "Trockenübung" funktioniert folgender Schnipsel ohne Probleme:
Sub t()
Dim strZwB As String
With ActiveSheet.ListObjects.Item(1)
If .ListColumns("Nachweis/Bericht vom").DataBodyRange(2) = DateValue("11.11.1911") Then
strZwB = .ListColumns("Beginn des Berichtszeitraumes").DataBodyRange(2)
.ListColumns("Beginn des Berichtszeitraumes").DataBodyRange(3) = strZwB
End If
End With
End Sub
Dass bei dir die If-Bedingung gar nicht erst erfüllt wird, könnte daran liegen, dass in Zeile 3 (Titel wird nicht mitgezählt) kein echtes Datum/Zahl sondern Text steht. Lässt sich einfach prüfen:
=ISTZAHL(B3)
Da du von einer Datenbankabfrage sprichst, könnte dir Power-Query (PQ) als Alternative zu VBA helfen. PQ ist für Abfragen (=Query) bestens geeignet und die Typenkonvertierung (Text in Datum) lässt sich leicht realisieren.
https://excelhero.de/power-query/power-query-ganz-einfach-erklaert/
Bei Bedarf kannst du mal ein vereinfachtes, anonymisiertes Beispiel deiner Rohdaten (gerne als XLSX, da ich keine Makrodateien downloaden kann) ins Forum stellen und dein Ziel erläutern (nach welchem Kriterium soll konkret gefiltert werden und wie soll das Ergebnis aussehen).
cu
Chris

Anzeige
AW: Kopieren bestimmter Zelle aus ListObject
10.03.2021 14:22:13
Dietmar
Hallo Chris,
vielen Dank für Deine Antwort. Ich werde Deinen Lösungsvorschlag ausprobieren.
Tja, mit dem Upload hat wohl nicht geklappt, ich vesuche es nochmal.
PowerQuery hilft mir nicht, auch wenn ich sonst gerne damit arbeite, aber es handelt sich um eine externe Datenbank, auf die wir lediglich Zugrich über eine Excel-Schnittstelle haben, mit weitgehend vordefinierten Querys. Deswegen muss man das beste daraus machen.
Verzeih mir, aber eine DummyDatei zuerstellen ist in dieser Situation recht aufwendig. Allein das eine Tabellenblatt, das ich zu Filterung des 2. brauche hat, ca. 180 Spalten! Aber vielleicht hilt das Bild.
Also: wenn die Bedingung in K13 (A) erfüllt ist, soll den Wert aus H13 (B) nach H14 (C) kopieren. Manuell bekomme ich das ja auch hin, aber bei rund 2000 Datensäten? :-)
Userbild
hier noch die Codedatei: https://www.herber.de/bbs/user/144624.txt
Vielen Dank
Dietmar

Anzeige
AW: Kopieren bestimmter Zelle aus ListObject
10.03.2021 15:41:03
ChrisL
Hi Dietmar
Ein stark vereinfachtes Beispiel, so dass man das Problem nachvollziehen und den relevanten Codeteil testen/entwickeln kann, würde bereits reichen. Die wenigsten können Freiluft programmieren und der Aufwand zur Erstellung eines Beispiels ist beim Antworter nicht weniger gering wie beim Frager.
Ich denke das Problem könnte sein, dass DataBodyRange(2) die Zeile 3 darstellt. Der Filter wird nicht berücksichtigt. Gleiche WENN-Abfrage mit DataBodyRange(12) würde wahrscheinlich funktionieren.
Ein Detail: strZwB hast du korrekt als Date deklariert. Zur Vermeidung allgemeiner Verwirrung wäre es sinnvoll die Variable nicht als "str" (Text-String) zu bezeichnen.
Die Power-Query liesse sich leicht auf der bereits vorhandenen Abfrage aufbauen. Ich dachte zwar daran die bestehende Query zu erweitern, aber wenn es nicht geht, kannst du auch eine zweite individuelle Query darauf aufbauen.
cu
Chris

Anzeige
AW: Kopieren bestimmter Zelle aus ListObject
10.03.2021 16:01:46
Dietmar
Hallo Chris,
vielen Dank erst mal für Deine Hilfe.
Ich werde mit Deinen Tipps erst einmal weiterarbeiten. Notfalls meld ich mich noch einemal.
Viele Grüße
Dietmar

AW: Kopieren bestimmter Zelle aus ListObject
10.03.2021 18:18:26
Dietmar
Hallo Chris,
Heureka!
Dein Hinweis mit den Adressen war Gold wert!
Tatsächlich war es so, dass er die Zeile 3 aus der GESAMTEN Tabelle genommen hat.
Jetzt habe ich die Zelle mit der FIND-Methode im gefilterten Bereich und nur im gefilterten Bereich gesucht. Das brachte mit die Adresse $K$13! Damit hatte ich alles was ich brauchte.
Der Rest war ein Kinderspiel (na ja, stark übertrieben, aber dafür sehr anschaulich :-)).
Falls es für Dich von Interesse ist, hier der Code:
Private c As Range
Private adrErste As String
Private adrZweite As Integer
With LOTerm
.Range.AutoFilter Field:=1, Criteria1:=strFKZ
.Range.AutoFilter Field:=5, Criteria1:="Zwischenbericht"
With LOTerm.DataBodyRange.SpecialCells(xlCellTypeVisible)
Set c = .Find(DateValue("11.11.1911"), LookIn:=xlValues)
If Not c Is Nothing Then
adrErste = c.Address
adrZweite = Range(adrErste).Row
LOTerm.Range(adrZweite, 8).Copy Destination:=LOTerm.Range(adrZweite + 1, 8)
End If
End With
End With
Dabei ist die Spalte 8 in meinem Fall immer fix. Will mal schauen, ob es auch mit dem Spaltennamen geht. Das wäre dann, glaube ich, die Kür.
Vielleicht kann das ja mal jemand gebrauchen.
Viele Grüße
Dietmar
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige