Thema
|
Datum
|
Von Nutzer
|
Rating
|
Antwort
|
|
11.12.2018 15:40:08 |
Anke |
|
|
|
11.12.2018 15:48:07 |
Werner |
|
|
|
11.12.2018 15:49:45 |
Gast96048 |
|
|
|
11.12.2018 15:51:18 |
Gast96048 |
|
|
|
12.12.2018 12:44:31 |
Gast72503 |
|
|
|
12.12.2018 12:54:04 |
Anke |
|
|
|
12.12.2018 16:40:01 |
Gast96048 |
|
|
|
17.12.2018 11:25:42 |
Anke |
|
|
Loop ohne Do |
17.12.2018 13:17:20 |
Gast96048 |
|
|
|
17.12.2018 16:26:44 |
Gast65833 |
|
|
|
17.12.2018 18:05:18 |
Gast96048 |
|
|
|
17.12.2018 18:17:06 |
Gast96048 |
|
|
|
17.12.2018 19:33:39 |
Gast96048 |
|
|
|
17.12.2018 19:39:46 |
Gast79011 |
|
|
|
18.12.2018 12:07:00 |
Anke |
|
|
|
18.12.2018 13:44:40 |
Gast96048 |
|
|
Von:
Gast96048 |
Datum:
17.12.2018 13:17:20 |
Views:
486 |
Rating:
|
Antwort:
|
Thema:
Loop ohne Do |
Von wegen Dauerschleife, da hat es was beim Terminus Technicus
ad1)
- war im Code nie die Rede von, dass sich eine einmal benutzte Mappe irgendwie verflüchtigen soll
- wird eben schlicht und ergreifend wieder geschlossen
ad2)
- sollten doch alle Mappen im Pfad durchlaufen werden, d.h. wird das Makro erneut ....., dann eben
- oder wozu sonst der Error - Code
3 Varianten:
- einmal benutze Datei ist Muster ohne Wert und wird gelöscht
- ditto, jedoch in ein Verzeichnis deiner Wahl verschoben (das bereits angelegt)
- der Code prüft zur Laufzeit ob das zitierte Arbeitsblatt(1) schon angelegt, dann
-- eben ignorieren
-- oder die vorhandenen Daten überschreiben
Ergo, entscheide dich bitte für eine Möglichkeit und dann kann man(n) deinen Code entsprechend ergänzen
Option Explicit
Sub Zusammenführen()
Dim oTargetBook As Object
Dim oSourceBook As Object
Dim sPfad As String
Dim sDatei As String
Application.ScreenUpdating = False 'Das "Flackern" ausstellen
Application.DisplayAlerts = False ' Keine Fehlermeldungen anzeigen
'Schritt 1: Arbeitsmappe festlegen, in die die neuen Sheets eingefügt werden...
Set oTargetBook = ActiveWorkbook
'Wichtiger Hinweis: Die Arbeitsblätter dürfen nicht vorhanden sein!
'Alternativer Umbau: Löschen evtl. bereits vorhandener Arbeitsblätter
'Schritt 2: Schleife über alle Excel Dateien in einem Verzeichnis
''sPfad = "\\dehgnt\dfs-hf\DE\Schiltach\dep_Controlling-WSA\07 Monatsabschluss\ILV Makros\Stundenerfassung"
'****************************************
''Pfad zum Test geändert
sPfad = ThisWorkbook.Path & "\MeinTest\"
'****************************************
'
sDatei = Dir(CStr(sPfad & "*.xl*")) 'Alle Excel Dateien
Do While sDatei <> ""
'Schritt 3: öffnen der Datei und Datenübertragung
Set oSourceBook = Workbooks.Open(sPfad & sDatei, False, True) 'nur lesend öffnen
'Es wird immer das erste Tabellenblatt Sheets (1) kopiert!
''oSourceBook.Sheets().Copy after:=oTargetBook.Sheets(oTargetBook.Sheets.Count)
'
'*****************************************************************************
'daher
oSourceBook.Sheets(1).Copy after:=oTargetBook.Sheets(oTargetBook.Sheets.Count)
'*****************************************************************************
'Es wird versucht den Dateinamen als Arbeitsblattnamen zu setzen.
'Ist dieser bereits vorhanden, wird der Fehler abgefangen und das neue Blatt
'bekommt keinen anderen Namen und behält den typischen Namen Tabelle x
On Error Resume Next
'Arbeitsblattname wird der Dateiname
oTargetBook.Sheets(oTargetBook.Sheets.Count).Name = sDatei
'Wenn ein Fahler aufgetreten ist, wird dieser resettet
If Err.Number <> 0 Then
Err.Numer = 0
Err.Clear
End If
On Error GoTo 0
'Schritt 4: Datei wieder zu machen und nächste Schleifenrunde
oSourceBook.Close False 'nicht speichern
'
'*********************************************
' es fehlte der Schritt zur nächsten Datei
sDatei = Dir
'
' es fehlte Loop
Loop
'************************************************
End Sub
|
- Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
- Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
- Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
- Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
- Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei
Antworten auf Ihren Beitrag zu benachrichtigen
Bitte geben Sie ein aussagekräftiges Thema an.
Bitte geben Sie eine gültige Email Adresse ein!
- Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
- Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
- Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
- Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
- Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei
Antworten auf Ihren Beitrag zu benachrichtigen
Thema
|
Datum
|
Von Nutzer
|
Rating
|
Antwort
|
|
11.12.2018 15:40:08 |
Anke |
|
|
|
11.12.2018 15:48:07 |
Werner |
|
|
|
11.12.2018 15:49:45 |
Gast96048 |
|
|
|
11.12.2018 15:51:18 |
Gast96048 |
|
|
|
12.12.2018 12:44:31 |
Gast72503 |
|
|
|
12.12.2018 12:54:04 |
Anke |
|
|
|
12.12.2018 16:40:01 |
Gast96048 |
|
|
|
17.12.2018 11:25:42 |
Anke |
|
|
Loop ohne Do |
17.12.2018 13:17:20 |
Gast96048 |
|
|
|
17.12.2018 16:26:44 |
Gast65833 |
|
|
|
17.12.2018 18:05:18 |
Gast96048 |
|
|
|
17.12.2018 18:17:06 |
Gast96048 |
|
|
|
17.12.2018 19:33:39 |
Gast96048 |
|
|
|
17.12.2018 19:39:46 |
Gast79011 |
|
|
|
18.12.2018 12:07:00 |
Anke |
|
|
|
18.12.2018 13:44:40 |
Gast96048 |
|
|