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

Bestehendes Makro um Funktionen erweitern

Bestehendes Makro um Funktionen erweitern
16.06.2006 09:36:28
kb2stripe
Hallo zusammen,
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

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestehendes Makro um Funktionen erweitern
16.06.2006 10:06:41
yogi
Tach Patrick
hab mal den Code etwas gekürzt.
Auslesen von PDF-Dateien: diese musst du erst wieder in Text umwandeln oder ein extrem kompliziertes Makro basteln.
PPT: nicht sehr einfach, da nicht Zeilenorientiert.
XLS: sollte kein Problem sein
der Code

Sub Daten_holen()
Dim AppWd As Object, DocWd As Object, WordDateiPfad As String, aktZeile As Integer
Dim WordDatei As String, TextWD As String
Dim twb As Worksheet
Set twb = ThisWorkbook.Worksheets(1)
'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")
With twb
Do While WordDatei <> ""
'Datei Öffnen (unsichtbar)
AppWd.Visible = False
Set DocWd = AppWd.Documents.Open(WordDateiPfad & WordDatei)
' nichts gelesen
TextWD = ""
'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
.Cells(aktZeile, "C") = "Newsletter VoI"
.Cells(aktZeile, "G") = "Verband Organisations- und Informationssysteme"
End If
If InStr(WordDatei, "EbPP") > 0 Then
DocWd.Range(0, 0).Select
TextWD = DocWd.Bookmarks("\Line").Range.Text
'In Excel schreiben
.Cells(aktZeile, "C") = "Newsletter EbPP"
.Cells(aktZeile, "G") = "Electronic Bill Presentment and Payment"
End If
If InStr(WordDatei, "BvDP") > 0 Then
DocWd.Range(0, 0).Select
TextWD = DocWd.Bookmarks("\Line").Range.Text
'In Excel schreiben
.Cells(aktZeile, "C") = "Newsletter BvDP"
.Cells(aktZeile, "G") = "Bundesverband deutscher Postdienstleister e.V."
End If
If TextWD <> "" Then
.Cells(aktZeile, "D") = TextWD
.Cells(aktZeile, "J") = WordDatei
.Cells(aktZeile, "A") = "Wettbewerberinformationen"
.Cells(aktZeile, "B") = "Presseauswertungen"
.Cells(aktZeile, "H") = "Abt. 1"
aktZeile = aktZeile + 1
End If
'aktuelle Worddatei schließen
DocWd.Close savechanges:=False
'nächste Word Datei
WordDatei = Dir()
Loop
End With
'Word schließen und Objekt beenden
AppWd.Quit
Set DocWd = Nothing
End Sub

Gruss yogi
Anzeige
AW: Bestehendes Makro um Funktionen erweitern
16.06.2006 10:27:22
kb2stripe
Hi yogi,
vielen Dank für die Code-Kürzung. Also die Dateien selbst will ich gar nicht auslesen (bzw nur die Word-Dateien, das funktioniert auch schon)
bei den PPTs, XLS und PDFs brauch ich nur ne Methode die im Ordner nach diesen Dateitypen sucht und sie mir auflistet. Am Dateinamen sollte die Kategorie ablesbar sei, sprich die Dateien heissen alle z.B. Studie_NameDerStudie_Datum.ppt oder Vortrag_NameDesVotrages_Datum.pdf
Das Programm sollte dann durchlaufen und alle Dateien auflisten im Excel. Die Word-Dateien so wie oben beschrieben, beim Rest soll der Dateiname = die Beschreibung sein oder muss man dafür auch etwas auslesen in der Datein selbst? Kenn mich da nicht wirklich aus.
Aus der Datei selbst soll nichts ausgelesen werden solange sie kein Word-Dokument ist.
Hoffe ich habs verständlich ausgedrückt, hab paar Mal umgeschrieben *gg*
gruß
Pat
Anzeige
AW: Bestehendes Makro um Funktionen erweitern
16.06.2006 10:39:02
yogi
Hi Patrick
mit einer Schleife mit Dir bekommst du alle Dateien eines Ordners

Sub get_datei()
Dim datei_name
Dim datei_typ As String
Dim x As Integer
x = 1
datei_name = Dir("D:\Test\*.*")
Do Until datei_name = ""
datei_typ = UCase(Right(datei_name, 3))
If datei_typ = "PDF" Or datei_typ = "PPT" Then
Cells(x, 1) = datei_name
x = x + 1
End If
datei_name = Dir
Loop
End Sub

Gruss yogi
AW: Bestehendes Makro um Funktionen erweitern
16.06.2006 12:14:14
kb2stripe
Hi yogi,
das ist natürlich super :)
wie kann ich diese beiden Methoden nun verknüpfen? Also dass er quasi den Ordner durchgeht und dann halt so nach der Regel:
IF Dateiendung = word
Methode Word ausführen
ELSE
Methode get_Datei( ) ausführen.
und kann ich bei deiner Methode noch hinzufügen dass er dann z.B. automatisch in Spalte L oder so immer den Text "Abt. 1" einträgt?
Und mit diesem UCase(Right(datei_name, 3))da kann man doch bestimmt auch hinbekommen dass er
IF
UCase(Left(datei_name, 6)) = Studie
ins Feld XYZ "Studie" schreibt oder geht das nicht so einfach?
gruß
Pat
Anzeige
AW: Bestehendes Makro um Funktionen erweitern
16.06.2006 14:07:11
yogi
Hi Patrick
hänge die beiden Dinge hintereinander in die gleiche Sub. Du musst dann bei
Cells(x, 1) statt 1 eine andere Kolonne eingeben, damit das andere nicht überschrieben wird.
Gruss yogi
P.S. Ich gehe jetzt in den wohlverdienten Urlaub, OHNE LAPTOP PC uä !!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige