Bestehendes Makro um Funktionen erweitern
16.06.2006 09:36:28
kb2stripe
mit sehr viel Hilfe arbeite ich momentan mit folgendem "Programm" für Excel:
Option Explicit
Sub Daten_holen()
Dim AppWd As Object, DocWd As Object, WordDateiPfad As String, aktZeile As Integer
Dim WordDatei As String, TextWD As String
'der Pfad in dem die Word Dateien liegen, muss mit "\" enden
WordDateiPfad = "C:\Test\"
'Startzeile in der Excel-Datei
aktZeile = 2
'Word-Object erzeugen und öffnen
Set AppWd = CreateObject("Word.Application")
'Schleife für alle Word-Dateien im Verzeichnis
WordDatei = Dir(WordDateiPfad & "*.doc")
Do While WordDatei <> ""
'Datei Öffnen (unsichtbar)
AppWd.Visible = False
Set DocWd = AppWd.Documents.Open(WordDateiPfad & WordDatei)
'Erste Zeile der Word-Datei auslesen
If InStr(WordDatei, "VoI") > 0 Then
DocWd.Range(0, 0).Select
TextWD = DocWd.Bookmarks("\Line").Range.Text
'In Excel schreiben
ThisWorkbook.Worksheets(1).Range("D" & aktZeile).Value = TextWD
ThisWorkbook.Worksheets(1).Range("J" & aktZeile).Value = WordDatei
ThisWorkbook.Worksheets(1).Range("A" & aktZeile).Value = "Wettbewerberinformationen"
ThisWorkbook.Worksheets(1).Range("B" & aktZeile).Value = "Presseauswertungen"
ThisWorkbook.Worksheets(1).Range("C" & aktZeile).Value = "Newsletter VoI"
ThisWorkbook.Worksheets(1).Range("G" & aktZeile).Value = "Verband Organisations- und Informationssysteme"
ThisWorkbook.Worksheets(1).Range("H" & aktZeile).Value = "Abt. 1"
aktZeile = aktZeile + 1
End If
If InStr(WordDatei, "EbPP") > 0 Then
DocWd.Range(0, 0).Select
TextWD = DocWd.Bookmarks("\Line").Range.Text
'In Excel schreiben
ThisWorkbook.Worksheets(1).Range("D" & aktZeile).Value = TextWD
ThisWorkbook.Worksheets(1).Range("J" & aktZeile).Value = WordDatei
ThisWorkbook.Worksheets(1).Range("A" & aktZeile).Value = "Wettbewerberinformationen"
ThisWorkbook.Worksheets(1).Range("B" & aktZeile).Value = "Presseauswertungen"
ThisWorkbook.Worksheets(1).Range("C" & aktZeile).Value = "Newsletter EbPP"
ThisWorkbook.Worksheets(1).Range("G" & aktZeile).Value = "Electronic Bill Presentment and Payment"
ThisWorkbook.Worksheets(1).Range("H" & aktZeile).Value = "Abt. 1"
aktZeile = aktZeile + 1
End If
If InStr(WordDatei, "BvDP") > 0 Then
DocWd.Range(0, 0).Select
TextWD = DocWd.Bookmarks("\Line").Range.Text
'In Excel schreiben
ThisWorkbook.Worksheets(1).Range("D" & aktZeile).Value = TextWD
ThisWorkbook.Worksheets(1).Range("J" & aktZeile).Value = WordDatei
ThisWorkbook.Worksheets(1).Range("A" & aktZeile).Value = "Wettbewerberinformationen"
ThisWorkbook.Worksheets(1).Range("B" & aktZeile).Value = "Presseauswertungen"
ThisWorkbook.Worksheets(1).Range("C" & aktZeile).Value = "Newsletter BvDP"
ThisWorkbook.Worksheets(1).Range("G" & aktZeile).Value = "Bundesverband deutscher Postdienstleister e.V."
ThisWorkbook.Worksheets(1).Range("H" & aktZeile).Value = "Abt. 1"
aktZeile = aktZeile + 1
End If
'aktuelle Worddatei schließen
DocWd.Close savechanges:=False
'nächste Word Datei
WordDatei = Dir()
Loop
'Word schließen und Objekt beenden
AppWd.Quit
Set DocWd = Nothing
End Sub
-----------------------------------------------
Liest die Worddateien eines Ordners aus und schreibt je nach Dateiname die jeweiligen Informationen in ein Exceltabellenblatt. Bei Word-Dateien wird die erste Zeile der Datei ausgelesen und als Beschreibung der Datei eingefügt.
Funktioniert einwandfrei, soll aber um etwas erweitert werden:
in Spalte L soll der Dateiname stehen, aber mit der Endung .pdf! Bisher hab ich das in Excel mit der Funktion =LINKS(Jx;LÄNGE(Jx)-4) & ".pdf" gemacht, was jedoch nicht gerade die beste Lösung darstellt, da man es im Falle eines Leerens der Datei immer wieder neu eingeben müsste. Kann man diese Funktion irgendwie in VBA übertragen, so dass dies ebenfalls automatisch erledigt wird?
1) Wenn ich das ganze jetzt auch mit PDF, PPT und XLS Dateien machen will, was muss ich zu diesem Modul hinzufügen? Bei diesen 3 Dateitypen muss in Spalte D ebenfalls der Dateiname geschrieben werden, das Auslesen der ersten Zeile der Dateien fällt damit weg (macht das auch das Programmieren von so einer Methode einfacher?)
2) Bei diesen Dateien müsste dann unterschieden werden je nachdem ob sie im Dateinamen Folgendes stehen haben:
- Studie
- Vortag
- Presse Clipping
- Präsentation
Das Ziel wäre es am Ende einfach alle Word, Powerpoint, Excel und PDF-Dateien in einen Ordner reinzuschmeissen, das Makro zu starten und dann die Datei mit den Metadaten ausgegeben zu bekommen. Weiss jedoch nicht wieviel Arbeit das ganze ist.
Wenn ihr Fragen habt, dann fragt ruhig, ich werde alles beantworten was ich beantworten kann. Hoffe ihr könnt mir weiterhelfen, wäre wirklich klasse,
Vielen Dank,
Patrick