Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Stapelverarbeitung

Forumthread: Stapelverarbeitung

Stapelverarbeitung
19.01.2008 14:04:00
Kenjin
Hallo!
Ich habe unter Office 2007 ein Makro, mit dem ich Excel-Werte nach Word übergebe und die Word-Dateien dann als PDFs abspeichere. Die Excel- und Word / PDF-Dateien landen dabei immer in fest definierten Ordnern. Bisher wurde beim Aufruf des Makros immer ein Eingabefeld aufgerufen, in dem die zu konvertierende Excel-Datei eingegeben wurde.
Mein Problem ist nun, das ich das Makro so abändern muss, das alle Excel-Dateien nach Word übergeben werden sollen. Was muss ich einbauen, damit das Makro alle Exceldateien automatisch nacheinander einliest und verarbeitet? Wichtig wäre noch sowas wie eine Variable "Dateiname", da die Worddateien - mit leichter Abänderung - den selben Namen wie die Exceldatei haben muss.
Dankbar für jede Hilfe!

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Stapelverarbeitung
19.01.2008 16:19:48
Volti
Hallo kenjin,
wie wäre es hiermit als ersten Ansatz:

Sub AAA()
LW = "C:\meinedaten\"
Dateiname = Dir(LW & "*.xls")
While Dateiname  ""
Pos = InStr(UCase(Dateiname), ".XLS")
Worddateiname = Left(Dateiname, Pos) & "doc"
MsgBox Dateiname & "!" & Worddateiname
Dateiname = Dir
Wend
End Sub


Anstelle der MSGBOX dann dein Makro aufrufen oder deinen Makrocode einfügen.
Ggf. müsstest Du vor den zurückgegebenen Dateinamen wieder den Pfad setzen, falls benötigt.
viele Grüße
Karl-Heinz

Anzeige
AW: Stapelverarbeitung
21.01.2008 19:59:00
Kenjin
Irgendwas mache ich noch verkehrt.
Habe das Makro jetzt soweit eingebunden, das es die bereits gesetzten Variablen etc. nutzt.
Habe aber nun immer die Fehlermeldung:
Laufzeitfehler '1004'
'C:\Users\Kenjin\Desktop\Office 2007\Work\xlsx.xlsx' wurde nicht gefunden.
Meine Routine bis dahin sieht wie folgt aus:

Sub AAA()
sPath = ThisWorkbook.Path
LW = ThisWorkbook.Path & "\Work\"
Dateiname = Dir(LW & "*.xlsx")
While Dateiname  ""
Pos = InStr(UCase(Dateiname), ".XLSX")
X_Workbook= Left(Dateiname, Pos)
Workbooks.Open Filename:= sPath & "\Work\" & X_Workbook & "xlsx"


Wie gesagt, das "Original-Makro" ruft aus eine Exceldatei auf und übergibt die Werte an ein Word-dokument. Der Name des Worddokumentes ist gleich der Exceldatei plus 1 Zusatz (Sprachschlüssel).
Wo mache ich den Fehler, das ich xlsx.xlsx rauskriege?

Anzeige
AW: Stapelverarbeitung
21.01.2008 20:39:00
Volti
Hallo Kenjin,
finde von meinem Codevorschlag nicht allzuviel wieder.
Erstmal: Das Suffix (Erweiterung) ".xlsx" ist mir unbekannt. Zwar gibt es mittlerweile auch vierstellige Suffixe wie z.B. ".html" aber die Norm ist immer noch höchstens dreistellig ".xls". M.E. werden längere auch abgeschnitten, bin mir aber nicht sicher.
Und dann versuch es lieber so, um Dein Verzeichnis durchzuscannen:

Sub AAA()
sPath = ThisWorkbook.Path
LW = ThisWorkbook.Path & "\Work\"
Dateiname = Dir(LW & "*.xlsx")
While Dateiname  ""
Workbooks.Open Filename:= sPath & "\Work\" & Dateiname
Dateiname=DIR
WEND
End Sub


Zur Erklärung:
Die Schleife scannt das angegebene Verzeichnis durch und gibt einen gefundenen Dateinamen ohne Pfad zurück. Den kannst Du dann mit Workbooks.Open aufmachen usw.
Dann kommt die nächste Datei dran.
viel Erfolg
Karl-Heinz

Anzeige
AW: Stapelverarbeitung
21.01.2008 22:11:51
Kenjin
Vielen Dank für den Hinweis.
Die vierstelligen Suffixe sind mit Office 2007 und dem XML-Format von Microsoft eingeführt worden. Zumindest unter "VB 2007" werden 4stellige Suffixe erkannt und voll abgearbeitet.
Bis einschliesslich Office 2003:
XLS - Excel, DOC - Word, PPT - Powerpoint - Alles Binärformate
Seit Office 2007:
XLSX - Excel; DOCX - Word, PPTX - PowerPoint - Gezippte XML-Datei
XLSM - Excel 2007 mit Makro

Anzeige
AW: Stapelverarbeitung
21.01.2008 22:18:26
Kenjin
Das VBA in 2007 scheint Probleme mit der Anweisung "*.xlsx" zu haben. Bei mir erscheint wieder nur Fehler 1004; Die Datei "C:\users\Kenjin\Desktop\Office 2007\Work\" kann nicht gefunden werden.
Gibt es einen Workaround?

AW: Stapelverarbeitung
22.01.2008 03:28:20
Kenjin
OK, habe jetzt eine passende Lösung gefunden.
Code wie folgt:

sPath = ThisWorkbook.Path
LW = ThisWorkbook.Path & "\Work\"
Dateiname = Dir(LW & "*.xlsx")
While Dateiname ""
X_Workbook = Left(Dateiname, Len(Dateiname)-5)
'Dieser Schritt muss sein, da ansonsten die Worddatei 12345.xlsx.DOCX heissen würde.
'Daher nur Begrenzung auf den Prefix
Workbooks.Open Filename:=sPath & "\Work\" & X_Workbook & ".xlsx"
'Statt sPath & "\Work\" ginge auch LW
'Anhängen vom Suffix ".XLSX" um die Exceldatei sauber zu öffnen.
Dateiname = Dir
Wend
End Sub


Der Code mag nicht der sauberste sein, aber er funktioniert. ;-)
Nochmals vielen Dank für die Hilfe.

Anzeige
AW: Stapelverarbeitung
22.01.2008 20:39:56
Volti
Hallo Kenjin,
schön, dass es jetzt funktioniert.
Das mit den vierstelligen Suffixen war mir neu. Ich habe mich bislang nur mit Excel 4.0 (ja, so alt bin ich schon) bis Excel 2002 beschäftigt. Sollte vielleicht mein heimiges Excel97 endlich mal updaten. :-)
PS: "X_Workbook = Left(Dateiname, Len(Dateiname)-5)" funktioniert natürlich nur bei vierstelligen Erweiterungen, das weißt Du ja. Ansonsten mit Instr(.... arbeiten.
viele Grüße
KH
Anzeige
;
Anzeige

Infobox / Tutorial

Excel Stapelverarbeitung: Automatisches Konvertieren von Excel zu Word


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul hinzufügen: Klicke auf Einfügen > Modul.

  3. Code einfügen: Füge den folgenden Code in das Modul ein:

    Sub Stapelverarbeitung()
       Dim sPath As String
       Dim LW As String
       Dim Dateiname As String
       Dim Pos As Integer
    
       sPath = ThisWorkbook.Path
       LW = sPath & "\Work\"
       Dateiname = Dir(LW & "*.xlsx")
    
       While Dateiname <> ""
           Pos = InStr(UCase(Dateiname), ".XLSX")
           X_Workbook = Left(Dateiname, Len(Dateiname) - 5)
           Workbooks.Open Filename:=LW & Dateiname
           ' Hier kannst du deinen Code zur Übertragung nach Word hinzufügen
           Dateiname = Dir
       Wend
    End Sub
  4. Anpassen des Codes: Stelle sicher, dass der Pfad in LW korrekt ist und deine Excel-Dateien sich im angegebenen Ordner befinden.

  5. Makro ausführen: Zeige die Makros an (ALT + F8), wähle Stapelverarbeitung aus und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Laufzeitfehler '1004': Dieser Fehler tritt auf, wenn die Datei nicht gefunden wird. Überprüfe den Pfad in der Variable LW und stelle sicher, dass die Dateien im richtigen Format vorliegen.
  • Suffix-Probleme: Stelle sicher, dass du die korrekten Dateiendungen verwendest. Bei Office 2007 und neuer sind .xlsx-Dateien üblich. Verwende gegebenenfalls die Anpassung Left(Dateiname, Len(Dateiname) - 5) um Probleme mit überflüssigen Endungen zu vermeiden.

Alternative Methoden

Falls du eine andere Methode zur Excel Stapelverarbeitung bevorzugst, kannst du auch folgende Ansätze ausprobieren:

  • Power Query: Nutze Power Query, um Daten aus mehreren Excel-Dateien zu kombinieren und in dein gewünschtes Format zu exportieren.
  • Batch-Skripte: Verwende ein Windows-Batch-Skript, um Excel-Dateien in Word zu konvertieren. Dies kann über die Befehlszeile erfolgen, ist allerdings komplexer.

Praktische Beispiele

  • Beispiel 1: Wenn du 10 Excel-Dateien im Ordner Work hast, wird das Skript jede Datei öffnen, die Daten bearbeiten und die entsprechenden Word-Dokumente speichern.
  • Beispiel 2: Wenn jede Excel-Datei einen spezifischen Namen hat, kannst du den Code anpassen, um die Word-Dokumente nach einem bestimmten Muster zu benennen, indem du einfach den X_Workbook-Wert veränderst.

Tipps für Profis

  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung, um festzustellen, welche Dateien nicht verarbeitet werden konnten.
  • Optimierung: Reduziere die Anzahl der offenen Dateien, indem du sie nach der Bearbeitung schließt, um den Speicherverbrauch zu minimieren.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um mehrere Dateiformate zu verarbeiten?
Du kannst die Zeile Dateiname = Dir(LW & "*.xlsx") anpassen, um andere Formate wie .xls oder .csv zu berücksichtigen.

2. Was mache ich, wenn mein Excel nicht auf die Word-Dokumente zugreifen kann?
Überprüfe die Zugriffsrechte auf die Ordner und stelle sicher, dass die Word-Anwendung korrekt installiert ist.

3. Kann ich das Makro auf einer älteren Excel-Version verwenden?
Das oben angegebene Makro sollte auch in Excel 2003 und höher funktionieren, jedoch musst du sicherstellen, dass die Dateiendungen korrekt definiert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige