Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1472to1476
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 befüllen Makro

Daten befüllen Makro
01.02.2016 16:22:33
Bernd
Hallo liebe Forum-Gemeinde,
ich habe da ein Anliegen, bei dem ich nicht mehr weiterkomme.
Nachfolgend habe ich eine EXCEL-Datei vorbereitet und bitte um eure Mithilfe:
https://www.herber.de/bbs/user/103200.xlsx
Folgendes soll Ziel sein:
Ich habe mehrere Excel-Dateien, hier durch verschiedene Sheets dargestellt.
Aus diesen Dateien, soll per Makro die Daten ausgelesen werden und in eine neue Excel-Datei eingefügt werden, welche schon existiert, lückenlos und fortlaufend und bei Aktualisierung das zu befüllende Excel-Sheet in einem bestimmten Bereich vorher wieder gelöscht werden bzw. alle Daten mit den Einträgen wieder überschrieben werden, so dass die Daten immer den aktuellsten Stand haben.
Ich hoffe auf eure Hilfe.
LG
Bernd

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

Betreff
Datum
Anwender
Anzeige
AW: Daten befüllen Makro
01.02.2016 16:45:34
Michael
Hallo Bernd,
das Makro innerhalb der Testdatei ist ratzfatz erstellt, wird Dich mit Deinen Kenntnissen aber nicht weiterbringen, wenn Du nicht weißt, wie Du Datein der Reihe nach öffnest.
Weißt Du das?
Was soll denn eingelesen werden? Nur zwei bestimmte Datein, die immer den gleichen Namen haben? Oder alle Datein innerhalb eines Ordners? Konkretisiere das bitte mal.
Weiterhin habe ich bei derartigen Aktionen immer gern etwas mehr Informationen, also weitere Spalten, in denen z.B. die Herkunft der Infos (also z.B. Datei 1, 2) oder das Import-Datum stehen. Muß aber nicht zwingend sein, nur so als Anstoß.
P1 und P2 sind verschiedene Abteilungen? Die Namen sollen also immer neben- und nicht untereinander stehen?
Wenn Du sie nämlich untereinander schreiben würdest, könntest Du P1 oder P2 in einer weiteren Spalte unterbringen und über den kompletten Bestand sortieren: Namen alphabetisch über alles, Namen alphabetisch mit Abteilungen untereinander usw.
Schöne Grüße,
Michael

Anzeige
AW: Daten befüllen Makro
03.02.2016 09:22:50
Bernd
Ich habe hier mal die Entwurfdatei, welche als Übersicht benutzt wird und auch als zu befüllende Datei.
https://www.herber.de/bbs/user/103249.xlsm
Hier ist soweit erstmal der Code:
Private Sub kopierenAlleABC()
KopierenABC1Kp
KopierenABC2Kp
End Sub
Private Sub KopierenABC1Kp()
Windows("Entwurf DTK 1.Kp.xlsm").Activate
Dim ZeileABC, SpalteABC, ZelleABC, StartABC, EndeABC As String
Dim KZeileABC, KSpalteABC, KZelleABC
SpalteABC = "B"
SpalteEndeABC = "D"
ZeileABC = 14
StartABC = SpalteABC & ZeileABC
ZelleABC = SpalteABC & ZeileABC
Test = True: Zähler = 0    ' Variablen initialisieren.
Do    ' Äußere Schleife.
Do While Zähler 
Nun zur Konkretisierung:
Die Überischtsdatei ist leer und soll mit Daten befüllt werden, die Daten kommen aus 8 verschiedenen Abteilung, die selbst eine Übersichtdatei ihrer Abteilung haben. Diese soll als Quelle fungieren und in die Zieldatei kopiert werden. Dies aber mit unterschiedlcihen Hierarchien. Untereinander gleiche Hierarchieebene, aber verschiedene Abteilungen. Nebeneinander, die unterschiedlichen Hierarchiebenen auch aus den jeweiligen Abteilungen. Mit anderen Worten, ich habe vier Hierarchieebnenen pro Abteilung, daher vier nebeneiander zu befüllende Tabellenspalten einer Abteilung und direkt darunter, lückenlos, die nächste Abteilung, bis alle Abteilungen durch sind und das für insgesamt 18 Aufgabenbereiche, daher 18+2 Tabellenreiter. Der erste Tabellenreiter ist ein Inhaltsverzeichnis und auf dem 2. Reiter soll dann der Befüll-Button hin mit dem Makro.
Gewünscht ist, das alle Daten mit nur einem Mausklick vollzogen werden, aber ohne groß die Rechenleistung zu vermindern, daher der Wunsch, das die Quelldateien nacheinadner geöffnet werden, die Daten rüberkopiert werden, die Quelldatei wieder geschlossen und dann die nächsate Quelldatei geöffnet, Daten rübergezogen, Quelldatei wieder geschlossen und so weiter.
Ich hoffe, dass die Konkretisierung und der vorhandende Code verständlich sind und hoffe auf weitere mithilfe.
LG
Bernd

Anzeige
AW: Daten befüllen Makro
03.02.2016 09:41:48
Bernd
Häckchen vergessen

richtig interpretiert?
03.02.2016 12:45:39
Michael
Hallo Bernd,
mir ist nach wie vor nicht ganz klar, was Du wohin haben willst.
Aber schau Dir mal die Datein an, die Du bitte in einen neuen Ordner C:\blabla entpackst (oder Du änderst die Pfade entsprechend ab unter "Bedienung"): https://www.herber.de/bbs/user/103256.zip
Auf dem Tabellenblatt "Tabelle4" findest Du einen Button, der die Daten aus Tabelle1 und -2 kopiert; soweit Deine 1. Datei - teste mal.
Auf dem Tabellenblatt "Bedienung" findest Du einen Button, der die beiden externen Datein einliest und die dritte nicht findet - nur damit Du siehst, was dann passiert.
Eingelesen wird hier in das Blatt "ABC-Abwehr", und da sind wir schon bei einem anderen Thema:
Über Deinen Arbeitgeber bin ich nicht gerade begeistert: die haben uns in den 80ern weismachen wollen, daß man nur den ABC-Schutzponcho überwerfen & die Augen schließen muß, damit einem bei einer A-Bombe nix passiert...
Die verblasen so viel Kohle für Schwachsinn, daß ich nicht einsehe, hier für lau weiter zu arbeiten: die können und sollen dafür bezahlen!
Das nur grundsätzlich. Weil wir beide nette Menschen sind, habe ich Deine Fragestellung so weit ausgearbeitet, daß Du mit etwas Phantasie weiterkommen solltest.
Ach so: das Kernstück ist die
Sub kopieren(BlattVon As Worksheet, BlattNach As Worksheet)
Dim maxZeile&, maxZeile2&, s&
Const Spalten = "BEHK"
Const überschriftenzeile = 13
For s = 1 To Len(Spalten)
maxZeile = BlattVon.Range(Mid(Spalten, s, 1) & BlattVon.Rows.Count).End(xlUp).Row
If maxZeile > überschriftenzeile Then
maxZeile2 = BlattNach.Range(Mid(Spalten, s, 1) & _
BlattNach.Rows.Count).End(xlUp).Row
BlattVon.Range(Mid(Spalten, s, 1) & überschriftenzeile + 1). _
Resize(maxZeile - überschriftenzeile, 3).Copy
BlattNach.Range(Mid(Spalten, s, 1) & maxZeile2 + 1).PasteSpecial xlPasteValues
End If
Next
End Sub

die von *beiden* Buttons angestupst wird. Sie ist so variabel gehalten, daß Du das Drumherum nach Deinem Bedarf gestalten kannst: zwei Codeschnipsel hast Du ja jetzt zum Angucken...
Schöne Grüße also und happy exceling,
Michael

Anzeige
AW: richtig interpretiert?
03.02.2016 13:08:48
Bernd
Ich danke recht herzlich Michael,
ja das mit dem Arbeitgeber ist immer ein Thema für sich...
Mal schauen, ob wir damit jetzt mehr erreichen können.
Naja wo was hin soll?
also angenommen in der 1.Kompanie existiert diese Übersichtsdatei mit allen Nebenfunktionen gefüllt mit Daten, dann soll in die Übersichtsdatei des Bataillons, diese Daten 1:1 sozusagen übernommen werden.
In Bezug auf Abc-Abwehr würde das heißen, ich habe in der 1.Kompanie alle Daten von den jeweiligen Dienstgraden in den dafür vorgesehenen Zeilen, startend ab zeile 14. diese sollen dann in die Bataillonsübersicht 1:1 kopiert werden auch ab Zeile 14. Anschließend soll dies dann für alle anderen Nebentätigkeiten identisch passieren und dann darunter die nächste Kompanie, so dass man dann am Ende eine große Übersicht hat, wo alle Kompanien aufgeführt sind, wer welche Nebenfunktion bekleidet. Musterexemplarisch haben wir hier nur die Struktur von der Abc-Abwehr drin. Die anderen Registerblätter haben dann aber oben den gleichen Kopf nur mit einer anderen Nebenfunktion.
Hier mal zur Verdeutlichung die Bataillonsüberischtsdatei und die 1. und 2. Kompanie
https://www.herber.de/bbs/user/103257.xlsm
https://www.herber.de/bbs/user/103258.xlsm
https://www.herber.de/bbs/user/103259.xlsm
Insgesamt gibt es dann nachher 8 Kompanie-Datei die alle Quelle sind und 1 Bataillonsübersicht, wo die Daten dann hineinübertragen werden sollen, für die Gesamtübersicht
LG
Bernd

Anzeige
AW: richtig interpretiert?
03.02.2016 13:10:24
Bernd
wieder da häckchen vergessen

AW: richtig interpretiert?
04.02.2016 18:20:59
Michael
Hallo Bernd,
das sind ja im Prinzip genau die drei Datein, die ich Dir als ZIP hochgeladen habe, nur daß ich in den beiden Quelldatein die Zeilen 1-13 und die Formatierung leer gelassen habe.
Wie Du oben siehst, vergibt die Forumssoftware immer eigene Dateinamen, d.h. wenn man mit mehreren Datein hantiert, bei denen es auf die Namen ankommt, sollte man sie zippen.
Hat der Button auf "Bedienung" so funktioniert, wie er sollte?
Dann mußt Du hier eigentlich nur die zu importierenden Dateinamen eintragen (C4 runterwärts), E1 und E2 eintragen, welche Zellen in Spalte C ausgewertet werden sollen, und das Ding funktioniert, wie es ist.
Die Makros befinden sich im neu angelegten Modul "Michael":
- Sub Kopieren ist unverändert, heißt aber jetzt MichaelKopieren (weil Du in einem anderen Modul bereits den Namen Kopieren benutzt hast),
- und in das
Sub kopierenExterneDatei()
Dim sFile As String, sPath As String
Dim Quelle As Workbook, Ziel As Workbook
Dim Blatt As Worksheet, ZielBlatt As Worksheet
Dim von&, bis&, i&
Dim gehtnicht As Boolean
von = Sheets("Bedienung").Range("E1")
bis = Sheets("Bedienung").Range("E2")
Set Ziel = ActiveWorkbook
Application.ScreenUpdating = False
For i = von To bis
gehtnicht = False
sPath = Ziel.Sheets("Bedienung").Range("C" & i)
sFile = Mid(sPath, InStrRev(sPath, "\") + 1)
If WkbExists(sFile) = False Then
If Dir(sPath) = "" Then
'         MsgBox "Datei " & sPath & " wurde nicht gefunden!"
Ziel.Sheets("Bedienung").Range("D" & i) = "#n.v."
gehtnicht = True
Else
Workbooks.Open sPath
End If
Else
Workbooks(sFile).Activate
End If
If Not gehtnicht Then
Set Quelle = ActiveWorkbook
For Each Blatt In Quelle.Sheets
' hier müßte noch ne Fehlerroutine rein... *******
' falls ein Blatt nicht in *beiden* Datein vorh. ist
' UND man kann Blätter ausschließen, z.B.:
If Blatt.Name  "Bedienung" And Blatt.Name  "Übersicht" _
And Blatt.Name  "Tabelle1" Then
On Error Resume Next
Set ZielBlatt = Ziel.Sheets(Blatt.Name)
If Err.Number  0 Then
MsgBox Blatt.Name & " in Zieldatei nicht vorhanden."
Else
Call MichaelKopieren(Blatt, ZielBlatt)
End If
On Error GoTo 0
End If
Next
Ziel.Sheets("Bedienung").Range("D" & i) = "o.k."
Quelle.Close
End If
Next
Application.ScreenUpdating = True
End Sub

habe ich ein Errorhandling eingebaut und die Blätter "Bedienung", "Übersicht" und "Tabelle1" von der Bearbeitung ausgeschlossen.
Somit werden ALLE Tabellenblätter mit Daten (sofern vorhanden) importiert, sowohl aus den beiden bereits in der ersten ZIP enthaltenen Quelldatein als auch der von Dir hochgeladenen 103259.xlsm
Die Datein: https://www.herber.de/bbs/user/103293.zip
Schöne Grüße,
Michael
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige