Grösseres VBA-Problem (jedenfalls für mich *gg*)
09.06.2006 09:49:42
kb2stripe
Habe die Aufgabe für eine Datenbank die Metadaten einzelner Dateien in Excel einzutragen. Bei wenigen Dateien kein Problem; jedoch muss das jede Woche einmal erledigt werden, wobei jeweils ca. 300 Dokumente zu bearbeiten sind, was einem nicht gerade geringen Zeitaufwand entspricht wenn man es manuell eintippt ;)
Also habe ich mir überlegt dass es doch auch automatisch funktionieren müsste; da ich in VBA leider noch nicht so bewandelt bin, suchte ich Hilfe in einem Forum, wo mir jemand netterweise folgenden Code zur Verfügung stellte (habe noch paar Sachen selbst ergänzt:)
-----------------
Option Explicit
Sub VoI_Daten_holen()
Dim AppWd As Object
Dim DocWd As Object
Dim WordDatei As String
Dim WordDateiPfad As String
Dim TextWD As String
Dim DateiName As String
Dim aktZeile As Integer
'DateiName = Namer deiner ExcelDatei
DateiName = Application.ActiveWorkbook.Name
'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
DocWd.Range(0, 0).Select
TextWD = DocWd.Bookmarks("\Line").Range.Text
'In Excel schreiben
Workbooks(DateiName).Worksheets(1).Range("D" & aktZeile).Value = TextWD
Workbooks(DateiName).Worksheets(1).Range("J" & aktZeile).Value = WordDatei
Workbooks(DateiName).Worksheets(1).Range("A" & aktZeile).Value = "Wettbewerberinformationen"
Workbooks(DateiName).Worksheets(1).Range("B" & aktZeile).Value = "Presseauswertungen"
Workbooks(DateiName).Worksheets(1).Range("C" & aktZeile).Value = "Newsletter VoI"
Workbooks(DateiName).Worksheets(1).Range("G" & aktZeile).Value = "Verband Organisations- und Informationssysteme"
Workbooks(DateiName).Worksheets(1).Range("H" & aktZeile).Value = "Abt. XXX"
aktZeile = aktZeile + 1
'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
--------------------------
Dieses Modul funktioniert einwandfrei, jedoch geht es davon aus dass JEDE Datei im Ordner ein VoI Newsletter ist. Nun gibt es jedoch auch andere Newsletter, ich brauche also eine Möglichkeit dass das Modul unterscheiden kann.
Habe also für jeden Newsletter so ein Modul wie obiges erstellt und bräuchte jetzt quasi ein "Obermodul" das guckt wie der Dateiname der Worddatei aussieht; die heissen entweder alle:
Newsletter VoI_Datum_Nr
Newsletter EbPP_Datum_Nr
Newsletter BvDP_Datum_Nr
d.h. es müsste überprüft werden wie die Datei anfängt (bis zum ersten _ also) und dann z.B. für alle Newsletter VoI das Modul VoI_Daten_Holen und für alle Newsletter EbPP das Modul EbPP_Daten_Holen ausgeführt werden. Leider weiss ich nicht wie ich das mit VBA programmieren kann.
Vielleicht hat auch jemand ne einfachere Idee :-)
Der übernächste Schritt wäre dann dass man auch PPT und PDF Dateien in den Ordner schmeissen kann und er von diesen ebenfalls die Metadaten in die Exceldatei einfügt. Aber alles nach der Reihe *gg*
Da das Problem für mich nicht zu lösen ist, wurde mir geraten mich hier im Forum anzumelden, es wäre das beste für Excel und es gäbe kein Problem das ungelöst bleiben würde; ihr seid also quasi meine letzte Hoffnung ;-)
Viele Grüße und sorry für soviel Text,
Pat.