Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1764to1768
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

Daten in aktuelles Tabellenblatt kopieren basierend auf kritieren

Daten in aktuelles Tabellenblatt kopieren basierend auf kritieren
17.06.2020 12:59:23
Ulf
Liebes Forum,
ich habe eine eurer Lösungen zum Kopieren von Daten aus einem Tabellenblatt basierend auf einem Kriterium in einer anderen Zelle erflogreich angewandt:
https://www.herber.de/forum/archiv/1008to1012/1009092_Wenn_Wert_in_Zelle_groesser_0_dann_kopiere.html
Nun möchte ich das Makro aber dahingehenn ausbauen, dass als Quelldatei eine anderes Excelfile verwendet wird und die geöffnete Arbeitsmappe kopiert werden soll.
Ausserdem möchte ich vermeiden, dass beim erneuten Ausführen des Makros (ich verwende dieses, welches beim Klicken ausgeführt wird) alte Einträge überschrieben werden, sonder nur unten an die Liste angehängt wird.
Kann mir jemand damit helfen?
Hier nochmal der Code welchen ich aktuell verwende

Sub Schaltfläche1_Klicken()
Application.ScreenUpdating = False
Dim intWert As Integer, intSpalte As Integer, intZeile As Integer, intAnz As Integer
ActiveWorkbook.Worksheets("Tabelle2").Range("a1:A60000").ClearContents
intSpalte = 11 'auf Spalte K gesetzt
intZeile = 1
intAnz = WorksheetFunction.CountA(ActiveWorkbook.Worksheets("Tabelle1").Range("A2:A10000"))
Zae2 = 0
For Zae1 = 1 To intAnz
intWert = ActiveWorkbook.Worksheets("Tabelle1").Cells(intZeile + Zae1, intSpalte) 'Anzahl    _
_
_
zeilen in Variable geschrieben
If intWert >= 4 Then 'wenn Wert in Spalte K größer-gleich 4
ActiveWorkbook.Worksheets("Tabelle1").Range(Cells(intZeile + Zae1, 1), Cells(intZeile +  _
_
_
Zae1, 8)).Copy
ActiveWorkbook.Worksheets("Tabelle2").Cells(intZeile + Zae2, 1).PasteSpecial
Application.CutCopyMode = False
Zae2 = Zae2 + 1
End If
Next Zae1
Application.ScreenUpdating = True
End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten in aktuelles Tabellenblatt kopieren basierend auf kritieren
17.06.2020 17:31:21
ralf_b
für unten anfügen wäre es hilfreich wenn du deine Anfangszeile aus dem Zielbereich vor Beginn des Einfügens ermittelst. Suche mal nach z.b. "letzte belegte zeile". da gibt es verschiedene Varianten.
um deinen code etwas lesbare zu machen schlage ich vor du läßt das eine oder anderer Activesheet weg.
Excel weis das du im Activesheet oder ActiveWorkbook unterwegs bist. Es sei denn du sagt ausdrücklich das du eine Anderes nutzt.
Also
intWert = ActiveWorkbook.Worksheets("Tabelle1").Cells(intZeile + Zae1, intSpalte)
ist das gleiche wie
intWert = Cells(intZeile + Zae1, intSpalte)
counta zählt die Anzahl der Zellen ,die nicht leer sind. Wenn du sicherstellen kannst das wirklich keine leere Zelle in der Spalte ist ,dann kannst du counta nehmen. Alternativ wäre eine Lösung zum ermitteln der letzten belegten Zeile angeraten.
Anzeige
AW: Daten in aktuelles Tabellenblatt kopieren basierend auf kritieren
18.06.2020 07:35:01
Ulf
Hallo ralf_b
danke für deine Rückmeldung und deine Tipps zum Code.
Was mir für meine Anwendung essentiell ist, ist das Auslesen aller befüllten Zeilen in einem anderen Excel File, damit ich diese abhängig von der Bedingung, dass die Werte in Spalte K größer-gleich 4 sind, in ein bestehendes Tabellenblatt kopieren kann.
Ich habe aber bisher nicht verstanden wie ich auf ein anderes Tabellenblatt in einem anderen File zugreifen kann. ActiveWorkbook. greift ja nur auf die Informationen im aktuell offenen File zu.
Danke!
BG Ulf
AW: Daten in aktuelles Tabellenblatt kopieren basierend auf kritieren
18.06.2020 18:14:11
ralf_b
wenn die andere Exceldatei offen ist, dann sollte sie in der Workbooksauflistung enthalten sein.
dim AndereDatei as Workbook, wks as Worksheet
set AndereDatei = Workbooks("Name der anderen Datei")
set wks = AndereDatei.Worksheets("Tabelle1")
AndereDatei.Worksheets("Tabelle1").Range("A1) 'wäre ein Zugriff auf den Zellwert in A1
oder
wks.Range("A1")
oder
wks.Cells(1,1)
Anzeige
AW: Daten in aktuelles Tabellenblatt kopieren basierend auf kritieren
19.06.2020 11:03:14
Ulf
Danke!
Ich habe meinen Code jetzt adaptiert:
Sub Schaltfläche1_Klicken()
Application.ScreenUpdating = False
Dim intWert, intSpalte, intZeile, intAnz As Integer
Dim wbkDatenursprung As Workbook, wksDatenursprung As Worksheet
Workbooks.Open ("C:\Local\MappeUrsprung.xlsx")
Set wbkDatenursprung = Workbooks("MappeUrsprung.xlsx")
Set wksDatenursprung = wbkDatenursprung.Worksheets("Tabelle1")
intSpalte = 11
intZeile = 2
intAnz2 = WorksheetFunction.CountA(wksDatenursprung.Range("A1:A60000"))
Zae3 = 0
For Zae4 = 1 To intAnz2
' intWert001 = wksDatenursprung.Cells(2, 11)
intWert2 = wksDatenursprung.Cells(intZeile + Zae4, intSpalte)
If intWert2 >= 4 Then
wksDatenursprung.Range(Cells(intZeile + Zae4, 1), Cells(intZeile + Zae4, 11)).Copy
. Rest der Argumente spar ich mir
End Sub

nur in dieser Zeile wo ich auf den Range aus dem DAtenursprung zugreifen möchte bekomme ich folgenden Error:
die methode range für das objekt _worksheet ist fehlgeschlagen
Ich kann aber weiter oben der Variable wksDatenursprung korrekt die Anzahl der Zeilen zuweisen. Was übersehe ich da?
danke! Ulf
Anzeige
AW: Daten in aktuelles Tabellenblatt kopieren basierend auf kritieren
19.06.2020 11:15:29
Gerd
Moin Ulf!
wksDatenursprung.Range(wksDatenursprung.Cells(intZeile + Zae4, 1), _
wksDatenursprung.Cells(intZeile + Zae4, 11)).Copy
Gruß Gerd
AW: Daten in aktuelles Tabellenblatt kopieren basierend auf kritieren
22.06.2020 08:16:31
Ulf
danke! Das funktioniert jetzt!
zusatzfrage: kann ich den Dateipfad für WorbooksOpen auch auf OneDrive setzen, oder muss ich dazu anderes berücksichtigen?
vielen Dank! Ulf
AW: Daten in aktuelles Tabellenblatt kopieren basierend auf kritieren
23.06.2020 12:56:23
Gerd
Hallo Ulf,
das sollte machbar sein. Dies ist aber nicht "meine Baustelle".
Ich empfehle dir, diese weitere Frage mit einem neuen Betrag ins Forum zu stellen.
Dann steigt normalerweise deine Chance auf eine verwertbare Antwort.
Gruß Gerd
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige