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

Immer erste Mappe ansprechen und bestimmten Bereich kopieren

Forumthread: Immer erste Mappe ansprechen und bestimmten Bereich kopieren

Immer erste Mappe ansprechen und bestimmten Bereich kopieren
02.05.2024 22:04:57
KamKam
Hallo zusammen,

ich bin neu im Forum und freue mich auf eine interessante Mitgliedschaft. Vor allem freue ich mich auf mein Wissen, dass ich mir hier zusätzlich aufbauen und mit euch Erfahrungen rund um VBA austauschen kann.

Ich komme gleich mit einem ersten Thema, das mich seit gut zwei Tagen beschäftigt.

Ich habe eine Datei, in dieser immer zum Monatsende das aktuelle Tabellenblatt (Beispiel: 04_2024) für den Mai auf 05_2024 kopiert wird.
Im Blatt 04_2024 werden alle Werte kopiert und hart eingesetzt, sodass keine Formeln und Verweise mehr vorhanden sind (dient der Nachweiszwecke).

Das nun neue Blatt 05_2024 wird mit aktuellen Daten aus Mai befüllt. Sobald alle Daten vorhanden sind, möchte ich per Code drei unterschiedliche Bereiche kopieren und in eine andere Datei zum Upload einfügen.

Hierzu habe ich folgenden Code (teilweise mit dem Makrorekorder aufgenommen und angepasst).

Sub HB_I_AUSB()
'
' HB_I_AUSB Makro

ActiveSheet.ListObjects("Tabelle3").Range.AutoFilter Field:=1, Criteria1:= _
">"
ActiveSheet.Range("Tabelle3").SpecialCells(xlCellTypeVisible).Copy
Windows("RSBG_Tagetik_Upload-Template_incl. Category only FULLv2.6 .xlsm"). _
Activate
' Range("A3").Select
Range("a" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1).Select
ActiveSheet.Paste
End Sub

Sub HB_1_EINB()

ActiveSheet.ListObjects("Tabelle2").Range.AutoFilter Field:=1, Criteria1:= _
">"
ActiveSheet.Range("Tabelle2").SpecialCells(xlCellTypeVisible).Copy
Windows("RSBG_Tagetik_Upload-Template_incl. Category only FULLv2.6 .xlsm"). _
Activate
' Range("A3").Select
Range("a" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1).Select
ActiveSheet.Paste
' Windows("Mapping_HI USA_Test.xlsm").Activate

End Sub
Sub HB_II_EINB()
'
' HB_II_EINB Makro

ActiveSheet.ListObjects("Tabelle4").Range.AutoFilter Field:=1, Criteria1:= _
">"
ActiveSheet.Range("Tabelle4").SpecialCells(xlCellTypeVisible).Copy
Windows("RSBG_Tagetik_Upload-Template_incl. Category only FULLv2.6 .xlsm"). _
Activate
' Range("A3").Select
Range("a" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1).Select
ActiveSheet.Paste
End Sub

Aktuell werden drei Tabellen angesprochen. In der ersten Spalte werden alle Leerstellen herausgefiltert und in die andere Datei kopiert. Der Code funktioniert also (müsste ich nur noch als schleife anlegen).

Jetzt aber möchte ich nicht mehr die Tabellen ansprechen, da es keine Tabellenformatierung mehr geben soll, sondern ich möchte per Code die drei Bereiche ansprechen und wie gehabt kopieren und einfügen.

Beispiel: Tabelle3 befindet sich in den Spalten AP:BC.


Problem ist, dass es mehrere Dateien gibt und die Spalten bzw. Bereiche, in denen Daten enthalten sind immer unterschiedlich ausfallen. Aber jeder Bereich hat eine eindeutige Kennzeichnung wie die Überschrift: Einbuchung HB1.
Wie müsste ich den obigen Code anpassen, dass der Code die Überschrift ausliest, dann den gesamten Bereich filtert (Leerzeilen müssen ausgeblendet werden), und mir in die andere Datei kopiert?

Würde mich über support tierisch freuen. Hoffe den Sachverhalt einigermaßen verständlich dargestellt zu haben.

Im Voraus vielen Dank für euren Support!

Grüße
KamKam
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
02.05.2024 23:06:10
Onur
Und WO ist die Datei dazu?
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
03.05.2024 21:56:15
daniel
Hi
ohne formatierte Tabelle kannst du eine Tabelle vielleicht so referenzieren:
hier mal als Beispiel für die Tabelle2
dim Zelle0 as Range, Zelle1 as range, Zelle2 as Range, Zelle3 as range

dim Kopierbereich as range
Set Zelle0 = Rows(4).find(what:"Eintrag in Account Mapping Datei - HB I", lookat:=xlwhole) '--- Zelle mit Tabellenname
Set Zelle1 = Zelle1.Offset(3, 0) '--- erste Datenzeile erste Spalte
Set Zelle2 = Zelle1.Offset(2, 0).End(xltoright).Offset(1, 0) ' --- erste Datenzeile letzte Spalte
Set Zelle3 = Zelle1.offset(rows.count - Zelle1.row).end(xlup) '--- letzte Datenzeile erste Spalte

Set Bereich = Intersect(Range(Zelle1, Zelle2).entireColumn, Range(Zelle1, Zelle3).SpecialCells(xlcelltypeconstants).EntireRow)
Bereich.Copy


gruß Daniel
Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
06.05.2024 16:46:30
KamKam
Hi Daniel,

das klappt nicht. Bekomme beim ausführen im in der Zeile

Set Zelle0 = Rows(4).find(what:"Eintrag in Account Mapping Datei - HB I", lookat:=xlwhole) '--- Zelle mit Tabellenname


Einen Syntaxfehler.

VG
KamKam
Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
06.05.2024 22:23:55
daniel
naja, dann korrigier halt die Syntax
ich sehe mich hier nicht als unbezahlter Codeschreiber, sondern als Ideengeber.

ansonsten kannst du auch deinen Code verwenden und die Startadressen fest vorgeben (sollte sich ja nicht ändern).
wenn du keine formatierten Tabellen mehr hast dann hast du nur noch einen Autofilter für die ganze Tabelle (es sollte dir aufgefallen sein, dass die DropDowns jetzt lückenlos auch in den zwischenspalten stehen).
dh deine Filterspalte um die Leerzellen auszublenden ist jetzt nicht mehr für jede Tabelle die 1, sondern die echte Spaltennummer, daher:

.AutoFilter Field:=Range(sfirstCellAddress).Column, Criteria1:=">"


gruß Daniel
Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
07.05.2024 08:04:39
KamKam
Hallo Daniel,

vielen Dank und ich sehe deine/eure Unterstützung als sehr wertvoll an und möchte sie nicht unermesslich ausnutzen.

Viele Grüße und vielen Dank nochmal
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
03.05.2024 08:32:37
KamKam
Hallo Onur,

natürlich, hier ist die Datei.
https://www.herber.de/bbs/user/169226.xlsm

Viele Grüße
Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
03.05.2024 09:19:21
ralf_b
Viel Spass beim Testen

Sub HB_I_AUSB()

copybereich "BE7", "Upload-Template_incl. Category only FULLv2.6.xlsm"
End Sub

Sub HB_1_EINB()
copybereich "AP7", "Upload-Template_incl. Category only FULLv2.6.xlsm"
End Sub

Sub HB_II_EINB()
copybereich "BT7", "Upload-Template_incl. Category only FULLv2.6.xlsm"
End Sub

Sub copybereich(sfirstCellAddress$, aTargetname$)

Dim rng As Range
Dim lColNr&, lRowNr&

On Error GoTo Fehler

With ThisWorkbook.ActiveSheet
lRowNr = .Cells(.Rows.Count, .Range(sfirstCellAddress$).Column).End(xlUp).Row
lColNr = 14 'feste Tabellenbreite
Set rng = .Range(sfirstCellAddress).Resize(lRowNr - .Range(sfirstCellAddress).Row + 1, 14)
End With


With rng
.AutoFilter Field:=1, Criteria1:=">"
.SpecialCells(xlCellTypeVisible).Copy
Workbooks(aTargetname).ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial (xlPasteAll)
.AutoFilter Field:=1
End With
Exit Sub
Fehler:
MsgBox "Fehler beim Kopieren" & vbCrLf & Err.Number & vbCrLf & Err.Description, vbCritical, "Fehler"
End Sub

Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
03.05.2024 17:08:42
KamKam
Hallo ralf_b

Das funktioniert herrlich!!!!! Herzlichen Dank dafür :)

Schönes Wochenende und Grüße
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
03.05.2024 17:18:31
KamKam
Hi ralf_b,

wie kann ich deinen Code anpassen, dass nur die harten Werte in die andere Datei kopiert werden? Aktuell werden die Formeln mitkopiert, ich brauche aber nur harte Werte.

VG + Danke
KamKam
Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
03.05.2024 18:05:12
KamKam
Hi ralf_b,

Ich habe (xlPaseAll) durch (xlPaste.Values) getauscht und es werden nun nur harte Werte kopiert.

Workbooks(aTargetname).ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial (xlPasteValues)


Jetzt aber habe ich den Code in eine andere Datei übernommen und hier filtert er mir die Leerzeilen nicht aus. Wo liegt das Problem?
Die drei Bereiche, die nun ausgelesen werden, befinden sich in anderen Spalten. Hier habe ich jeweils die erste Spalte abgeändert. Da 14 Spalten ausgelesen werden funktioniert das, aber eben nicht vollständig, da die Leerstellen nun auch übernommen werden.

Kannst du hier nochmal unterstützen?

Vielen Dank und viele Grüße

Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
03.05.2024 19:23:33
ralf_b
nein ,ich kann dir nicht helfen weil ich deine "neue" Datei nicht kenne.
die Lösung ist für die eine Datei geschrieben. VBA wird auf die spezielle Datei zugeschnitten.
an der Filterung habe ich nichts geändert. Evtl mußt du den Field parameter anpassen.
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
05.05.2024 06:50:47
KamKam
Hallo ralf_b,

also es gibt insgesamt mehrere Dateien und ich müsste den Code kopieren können.
Die Dateien sind vom Aufbau identisch.

Was muss ich am Code anpassen, damit ich diesen in die anderen Mapping Dateien kopieren kann?

Viele Grüße und vielen Dank.

Gruß
Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
05.05.2024 09:48:57
ralf_b
du siehst doch den Code und wie man die Sub mit der Copyfunktion aufruft. Die beiden Parameter sind die variablen Teile. Und die müsstest du anpassen. Mehr nicht.
in der Copyfunktion werden die Zell-Bereiche im Activesheet verwendet. Also sollte auch das Blatt aktiv sein wo die Daten kopiert werden sollen.

Wenn es keine Fehlermeldung gibt, dann liegts nicht am Code.

Wenn du den Code für unterschiedliche Dateien nutzen möchtest und ihn aber nicht in jede dieser Dateien kopieren und evtl auch noch pflegen möchtest ,dann würde es Sinn machen den Code in deine Persönliche Arbeitsmappe "Personal.xlsb" zu verschieben und dort zentral zu verwalten. Dafür sollte man aber den Dateibezug Von Thisworkbook auf ActiveWorkbook umstellen. Dann arbeitet der Code auf der gerade aktiven Datei und nicht auf der Datei in der der Code steht.

Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
06.05.2024 08:51:05
KamKam
Hallo ralf_b,

könntest du mir nochmal erklären, wie der Code in der Reihenfolge funktioniert?
Ich verstehe, dass die oberen drei Subs den Beginn des zu kopierenden Bereichs definieren. Also habe ich, wie du schon sagst, den Code kopiert und den copybereich jeweils angepasst, hier zB. auf "S7".

Sub HB_I_AUSB()

copybereich "S7", "Upload-Template_incl. Category only FULLv2.6.xlsm"
End Sub


Im unteren Sub copybereich(sfirstCellAddress$, aTagrgetname$) verstehe ich so, dass dieser auf den Referenzwert der oberen Subs geht und ab da 14 Spalten ausliest und diese kopiert.
Welchen Parameter sollte ich hier genau anpassen?

Vielen Dank nochmal für deinen unermüdlichen support :)

Viele Grüße
KamKam
Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
06.05.2024 13:24:12
KamKam
Nachtrag:
Hier wollte ich nochmal hinzufügen, dass mir die Werte aus den Zeilen kopiert und in der Zieldatei eingefügt werden, allerdings werden die Leerzeilen nicht herausgefiltert. Daher mein Problem zu verstehen, wo ich was anpassen soll.

Mag es vielleicht daran liegen, dass der Code die Zelle nicht als "leer" ansieht? Denn in den Zellen sind Formeln und Verweise die das Kriterium haben, entweder relevanter Wert, oder nicht relevanter Wert zum Upload, daher leer.

Viele Grüße
KamKam
Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
06.05.2024 19:11:20
ralf_b
dazu kann ich nur Eines sagen. wenn die Datei nicht die selbe Datenstruktur aufweist, dann ist der Code nur bedingt dafür geeignet.
Das Herumgerate ist sinnlos. Zeige eine Beispieldatei mit der identischen Struktur, in der dein Code nicht läuft.
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
06.05.2024 21:51:23
KamKam
Hallo ralf_b,

hier die Datei, in die ich den Code kopiert und an die Spalten angepasst habe. Kopiert werden aktuell alle Werte. Es sollen aber alle Leerzeile ausgefiltert und nicht in die Upload Datei übernommen werden.


Quelldatei - Mapping
https://www.herber.de/bbs/user/169299.xlsm

Upload Datei - Zieldatei
https://www.herber.de/bbs/user/169300.xlsm

Viele Grüße und herzlichen Dank nochmal.

Gruß KamKam
Anzeige
AW: Immer erste Mappe ansprechen und bestimmten Bereich kopieren
06.05.2024 23:06:28
ralf_b
zwei Sachen.
1. ändere die Bezugszelle auf Zeile 6 zb. "AS6" Grundsätzlich findet Excel die Kopfzeile selbst. Aber wenn man diese mehrzeilig gestaltet, klappt das automatische nicht wie gewünscht.

2. ergänze den Copycode wie folgt. Das setzt den Filtermodus zurück.



With rng
.AutoFilter Field:=1, Criteria1:=">"
.SpecialCells(xlCellTypeVisible).Copy
Workbooks(aTargetname).ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial (xlPasteValues)
Application.CutCopyMode = False
.Parent.ShowAllData
.AutoFilter
Set rng = Nothing
End With
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige