Hallo Barti,
damit solltest Du weiter kommen, wenn ich es richtig verstanden habe. Wie das mit dem Datei öffnen auf der NextCloud ist kann ich allerdings nicht sagen, da ich die nicht kenne. Ich lese nur öfter Fragen, weil Dateien in der OneCloud usw. nicht richtig angesprochen werden. Probiere es einfach aus:
Sub Chronik_Aktualisieren()
'Variablen werden bei Verwendung ausführlich erklärt
Dim pfadKollegenDateien As String
Dim chronikTabelle As Worksheet
Dim letzteZeileHauptChronik As Long
Dim kollegenDateien(4) As Variant
Dim aktuelleKollegenDatei As Variant
Dim letzteZeileKollegenDatei As Long
'Da es nur 5 Dateien sind, schreib die Pfade inklusive Namen einfach alle in ein Array
kollegenDateien(0) = "PfadZuDatei1\Dateiname1.xls"
kollegenDateien(1) = "PfadZuDatei2\Dateiname2.xls"
kollegenDateien(2) = "PfadZuDatei3\Dateiname3.xls"
kollegenDateien(3) = "PfadZuDatei4\Dateiname4.xls"
kollegenDateien(4) = "PfadZuDatei5\Dateiname5.xls"
'Bei der Arbeit mit mehreren Dateien immer vollständig referenzieren
'Also auf die Excel-Datei und die gewünschte Tabelle darin
'
'Ein Grund ist, dass Activate und Select komplett weggelassen werden
'können: Das macht das Programmieren wesentlich übersichtlicher und die
'Qualität des Quellcodes wesentlich besser, weil weniger Code nötig ist
'
'Ein weiterer Grund ist, man kann sich sonst sehr schnell sehr blöde
'Fehler einhandeln, weil in der falschen Tabelle der falschen Datei
'gearbeitet wird oder ein angegebener Tabellenname nicht gefunden wird,
'weil er in der falschen Datei gesucht wird
'
'Braucht man nur eine Tabelle, die in in einer Excel-Datei liegt,
'kann man das machen, indem die Referenz auf die Arbeitsmappe einfach
'vorangestellt wird
'(Beachte: Workbooks und Sheets sind Objekte. Deshalb muss die
' Variablen-Zuweisung mit Set erfolgen)
Set chronikTabelle = Workbooks("Projektauswertung.xls").Sheets("Chronik")
'Rausfinden der letzten belegten Zeile in der Arbeits-Tabelle
'Die letzte belgte Zelle wird in Spalte A nachgesehen
'Für z.B. Spalte D würde man statt (Rows.Count, 1),
'(Rows.Count, 4) schreiben
'Mehr infos und andere Möglichkeiten zum feststellen der letzten belegten Zeile oder Spalte:
'https://www.excel-inside.de/vba-loesungen/zellen-a-bereiche/337-letzte-zeile-letzte-spalte-und-letzte-zelle-per-vba-ermitteln
letzteZeileHauptChronik = chronikTabelle.Cells(Rows.Count, 1).End(xlUp).Row
'Löschen von alten Daten
'Nie pauschal alle möglichen Zeilen einer Tabelle bearbeiten
'Es ist besser, genau den gewünschten Bereich zu definieren
'Beachte, dass hier die oben angelegte Referenz auf die Tabelle
'verwendet wird
'Der Zusatz shift:=xlUp "zieht" den unter dem Löschbereich liegenden
'Bereich nach oben. Die andere Möglichkeit ist von rechts nach links
'Ich weiß aber nicht was default ist
chronikTabelle.Range("A2", "K" & letzteZeileHauptChronik).Delete shift:=xlUp
'Chroniken der Kollegen kopieren
'Da gehen wir die oben im Array abgelegten Dateien in einer Schleife durch
'In Schleifen werden Aufgaben programmiert, die immer gleich sind
For Each aktuelleKollegenDatei In kollegenDateien
'Kollegendatei öffnen, aus dem oben definierten Pfad
'(Diese Datei hat jetzt den Fokus, ist also die eigentlich aktive Datei
' Da wir aber mit vollständigen Referenzen auf alle Tabellen arbeiten,
' brauchen wir uns darum keine Gedanken machen)
Workbooks.Open aktuelleKollegenDatei
'Der Übersicht halber und um den Code zu verkürzen, beziehen
'wir alles was im Folgenden mit Punkt (.) beginnt, auf die
'Kollegen-Datei und die Chronik-Tabelle darin
With Workbooks(aktuelleKollegenDatei).Sheets("Chronik")
'Die letzte Zeile in der Kollegen-Tabelle feststellen
letzteZeileKollegenDatei = .Cells(Rows.Count, 1).End(xlUp).Row
'Erste freie Zeile in der Sammel-Tabelle feststellen
'Dazu auf das + 1 am Ende achten
letzteZeileHauptChronik = chronikTabelle.Cells(Rows.Count, 1).End(xlUp).Row + 1
'Daten kopieren
.Range(Cells(2, 1), Cells(letzteZeileKollegenDatei, 11)).Copy
'Nur Werte in die Sammel-Datei einfügen
chronikTabelle.Range(Cells(letzteZeileHauptChronik, 1), _
Cells(letzteZeileHauptChronik + letzteZeileKollegenDatei - 1, 11)).PasteSpecial Paste:=xlValues
'Nur Formate einfügen
chronikTabelle.Range(Cells(letzteZeileHauptChronik, 1), _
Cells(letzteZeileHauptChronik + letzteZeileKollegenDatei - 1, 11)).PasteSpecial Paste:=xlPasteFormats
'Den Bezug auf die Tabelle Chronik in der Kollegen-Datei beenden
End With
'Geöffnete Kollegen-Datei schließen ohne zu speichern
Workbooks(aktuelleKollegenDatei).Close SaveChanges:=False
'Nächste Datei
Next aktuelleKollegenDatei
End Sub
Viele Grüße,
Zwenn
|