Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
768to772
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
768to772
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Grösseres VBA-Problem (jedenfalls für mich *gg*)

Grösseres VBA-Problem (jedenfalls für mich *gg*)
09.06.2006 09:49:42
kb2stripe
Also der Post wird ein wenig länger, das schon mal vorweg ^^ Ich beschreibe erstmal die Situation und dann mein Ziel bzw die Probleme ans Ziel zu gelangen.
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.

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

Betreff
Datum
Anwender
Anzeige
AW: Grösseres VBA-Problem (jedenfalls für mich *gg
09.06.2006 10:17:20
Reinhard
Hi Pat,
vielleicht so:
Option Explicit
Sub VoI_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. XXX"
aktZeile = aktZeile + 1
End If
If InStr(WordDatei, "EbPP") > 0 Then
End If
If InStr(WordDatei, "BvDP") > 0 Then
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

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: Grösseres VBA-Problem (jedenfalls für mich *gg
09.06.2006 11:04:00
kb2stripe
Hallo Reinhard,
vielen vielen Dank!!! Das funktioniert ausgezeichnet. Habe noch ein paar Fragen:
- 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 Dateien fällt damit weg (macht das auch das Programmieren von so einer Methode einfacher?)
2) Bei diesen Dateien müsste dann unterschieden werden jenachdem ob sie im Dateinamen 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.
Viele Grüße und nochmal danke,
Pat.
Anzeige
Frage noch offen o.w.T.
09.06.2006 11:12:28
Reinhard


AW: Frage noch offen o.w.T.
09.06.2006 11:23:59
kb2stripe
Hallo Reinhard,
wofür steht das o.w.T.?
Gruß,
Pat.
AW: Frage noch offen o.w.T.
09.06.2006 11:30:09
Reinhard
Hi Pat,
ohne weiteren Text, es lohnt sich also nicht das Posting zu öffnen=Zeitersparnis für Mitleser.
Gibt noch O.T.= Off Topic= Posting bezieht sich auf was anderes.
Gruß
Reinhard
AW: Frage noch offen o.w.T.
09.06.2006 11:35:36
kb2stripe
Hm, irgendwie versteh ich das grad nicht *gg*
Da stand doch was drin in meiner Antwort auf deine Lösung. Oder was Posting bei dir leer?
O.T. Was bedeutet o.w.T
09.06.2006 11:39:01
Reinhard
Hi Pat,
ich finde in
https://www.herber.de/forum/messages/771635.html
steht nicht allzuviel :-)
Und lass mal in deinem Interesse die Frage auf noch offen stehen, Kästchen oberhalb des Antwortfensters dann kommt sie in die Liste Offene Fragen".
Gruß
Reinhard
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige