Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1260to1264
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
Inhaltsverzeichnis

Dateiname aus Excel auslesen und als txt spechern

Dateiname aus Excel auslesen und als txt spechern
Sandy
Hallo vielleicht kann mir irgendjemand helfen. Ich habe eine Worddatei mit 610 Seiten die getrennt werden sollen. Dazu habe ich schon ein nützliches Makro:
Public Sub JedeSeiteInNeuesDokument()
Dim wdDoc As Document
Dim wdDocNeu As Document
Dim wdBereich As Range
Dim sPfad As String
Dim optAnsicht As Long
Dim iSeitenAnz As Integer
Dim i As Integer
Dim iDocNum As Integer
'Verweis auf Dokument setzen:
Set wdDoc = ActiveDocument
'Speicher-Pfad für neue Dokumente:
'Es wird vorausgesetzt, dass das aktive Dokument gespeichert ist
sPfad = wdDoc.Path & "\" & "Test_"
'Bildschirmaktualisierung deaktivieren (Flackern wird zumindest vermindert)
Application.ScreenUpdating = False
'Einstellung Seiten-Ansicht sichern:
'optAnsicht = wdDoc.ActiveWindow.View.Type
optAnsicht = Windows(wdDoc).View.Type
'Seiten-Ansicht SeitenLayout einstellen:
Windows(wdDoc).View.Type = wdPageView
'Cursor zum Anfang des Dokuments:
wdDoc.Range(0, 0).Select
'Browser-Eigenschaft einstellen, hier: "Nach Seite durchsuchen"
'Gibt ein Browser-Objekt zurück, das die Schaltfläche "Objekt für
'Durchsuchen markieren" auf der vertikalen Bildlaufleiste darstellt
Application.Browser.Target = wdBrowsePage
'Dokument-Nr. zum Speichern - Startwert setzen
iDocNum = 0
'Anzahl Seiten im Dokument ermitteln
iSeitenAnz = wdDoc.ComputeStatistics(wdStatisticPages)
For i = 1 To iSeitenAnz
'Verweis auf den zu kopierenden Bereich setzen
Set wdBereich = wdDoc.Bookmarks("\Page").Range
'Den zu kopierenden Bereich überprüfen, ob Seitenwechsel dabei ist;
'ggf. den Bereich verkleinern
If Right(wdBereich.Text, 1) = Chr(12) Then
wdBereich.SetRange Start:=wdBereich.Start, End:=wdBereich.End - 1
End If
'Neues Dokument öffnen, auf Basis derselben Dokumentvorlage
'wie das Original-Dokument
Set wdDocNeu = Documents.Add _
(Template:=wdDoc.AttachedTemplate.FullName)
'oder auf Basis der Normal.dot:
'Set wdDocNeu = Documents.Add
'Formatierten Text -> neue Datei
wdDocNeu.Content.FormattedText = wdBereich.FormattedText
'Dokument-Nr. zum Speichern erhöhen
iDocNum = iDocNum + 1
'Neues Dokument speichern:
wdDocNeu.SaveAs FileName:=sPfad & Format(iDocNum, "000")
'Neues Dokument schließen
wdDocNeu.Close
'Dokument aktivieren
wdDoc.Activate
'Zur nächsten Seite im Original-Dokument wechseln
Application.Browser.Next
Next i
'Ursprüngliche Seiten-Ansicht wieder einstellen
Windows(wdDoc).View.Type = optAnsicht
'Cursor zum Anfang des Dokuments
wdDoc.Range(0, 0).Select
'Bildschirmaktualisierung aktivieren
Application.ScreenUpdating = True
'Verweise freigeben
Set wdBereich = Nothing
Set wdDocNeu = Nothing
Set wdDoc = Nothing
End Sub
Leider habe ich dann eine fortlaufende Nummerierung und ich möchte die Spalte "B" die "Name" heißt als Deteinamen einfügen und zusätzlich noch das Suffix .txt oder oder direkt dateiname.html.txt damit ich nur das txt entfernen muss. Das müsste per Array funktionieren. Am Anfang müssen irgendwie die ganzen Dateinamen aus der Excel-Datei in ein Array einlesen werden und beim Namen für das Speichern den Array Index parallel zu den Seiten hoch zählen und so den gesamten Dateinamen zusammenbasteln. Also bei Seite 1 array(1)+".txt" bei der zweiten Seite dann array(2)+"txt" und so weiter. als Array Index natürlich eine Variable nehmen. Aber ich bin mir nicht sicher wo das in meinen Code reingehört. Kann mir irgendjemand helfen. Vielen Dank
Hier ist eventuell der Code der die Lösung enthält. Bin mir jedoch nicht sicher.
Option Explicit
Sub DateienNamenLesen()
Dim DateiPath As String
Dim DateiEndung As String
Dim DateiName As String
Dim DateiNamen() As String
Dim ArrIndex As Integer
DateiPath = "C:\temp\"
DateiEndung = "*.xls"
ArrIndex = 1
ReDim Preserve DateiNamen(ArrIndex)
DateiName = Dir(DateiPath & DateiEndung)
Do While DateiName ""
ArrIndex = ArrIndex + 1
ReDim Preserve DateiNamen(ArrIndex)
DateiNamen(ArrIndex) = DateiName
DateiName = Dir
Loop
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Dateiname aus Excel auslesen und als txt spechern
19.04.2012 21:31:35
Oberschlumpf
Hallo Sandy
Vielleicht zeigst du uns mal deine Word-Datei mit 2 oder 3 (Bsp)Seiten per Upload.
Und zeig uns den Code doch auch gleich innerhalb einer Excel-Datei.
Du hast doch alles schon. Wieso zeigst du uns von der Word-Datei gar nix und den Code nur in Textform?
Ciao
Thorsten
AW: Dateiname aus Excel auslesen und als txt spechern
19.04.2012 23:55:21
Sandy
Hallo Thorsten,
weil ich nicht genau weiß wie ich das Worddokument hier hochladen soll. Das Worddokument an sich ist ja nicht mehr das Problem sondern die automatisierten durchnummerierten Dateinamen. Jetzt möchte ich die Dateinamen durch die Excelspalte "B" bestimmen. In der Worddatei befindet sich ein HTML-Code und später sich daraus die 610 HTML-Seiten ergeben, deswegen benötige entweder .txt oder .html, damit ich das nicht alles mit der Hand umändern muss. Ich denke mal am bestern wär der Pfad zu der Exceldatei und zu der Spalte. Deswegen habe ich den zweiten Code eingefügt weil ich denke das er vielleicht in meinen anderen Code eingebunden werden kann.
Vielen Dank
Lg Sandy
Anzeige
klick doch mal auf Hier gehts zum File-Upload-owT
20.04.2012 14:18:22
Sheldon
Gruß
Sheldon
AW: Dateiname aus Excel auslesen und als txt spechern
20.04.2012 14:19:27
Dieter
Hallo Sandy,
wenn ich dein Problem richtig verstehe, dann müsste dir der folgende Code weiterhelfen.
Aus dem Word-VBA-Programm heraus wird Excel gestartet und es wird die Arbeitsmappe mit den Namen für die einzelnen Textdateien geöffnet. Ich bin davon ausgegangen, dass die Namen in Spalte B des ersten Tabellenblattes ab Zeile 2 stehen.
Du musst in deinem Word-VBA-Programm einen Verweis auf die Bibliothek "Microsoft Excel 11.0 Object Library" (Nr. 11 für Excel 2003, bei anderer Office-Version entsprechend zu wählen). Der Verweis wird auf der VBA-Oberfläche unter Extras > Verweise... gesetzt.
Public Sub JedeSeiteInNeuesDokument()
Dim wdDoc As Document
Dim wdDocNeu As Document
Dim wdBereich As Range
Dim sPfad As String
Dim optAnsicht As Long
Dim iSeitenAnz As Integer
Dim i As Integer
Dim iDocNum As Integer
Dim neuDatei As String
Dim wb As Excel.workbook
Dim ws As Excel.worksheet
Dim xlDatei As String
Dim xlPfad As String
Dim xlApp As Excel.Application
Dim zeile As Long
' Hier Excel-Arbeitsmappe angeben und öffnen
xlDatei = "Namenliste.xls"
xlPfad = ThisDocument.Path & "\"
' Excel unsichtbar starten
Set xlApp = New Excel.Application
' Excel sichtbar machen (muss nicht sein)
xlApp.Visible = True
' Arbeitsmappe öffnen
Set wb = xlApp.Workbooks.Open(FileName:=xlPfad & xlDatei)
Set ws = wb.Worksheets(1)
zeile = 2 ' Der erste Name wird aus Zeile 2 gelesen
'Verweis auf Dokument setzen:
Set wdDoc = ActiveDocument
'Speicher-Pfad für neue Dokumente:
'Es wird vorausgesetzt, dass das aktive Dokument gespeichert ist
sPfad = wdDoc.Path & "\" & "Test_"
'Bildschirmaktualisierung deaktivieren (Flackern wird zumindest vermindert)
Application.ScreenUpdating = False
'Einstellung Seiten-Ansicht sichern:
'optAnsicht = wdDoc.ActiveWindow.View.Type
optAnsicht = Windows(wdDoc).View.Type
'Seiten-Ansicht SeitenLayout einstellen:
Windows(wdDoc).View.Type = wdPageView
'Cursor zum Anfang des Dokuments:
wdDoc.Range(0, 0).Select
'Browser-Eigenschaft einstellen, hier: "Nach Seite durchsuchen"
'Gibt ein Browser-Objekt zurück, das die Schaltfläche "Objekt für
'Durchsuchen markieren" auf der vertikalen Bildlaufleiste darstellt
Application.Browser.Target = wdBrowsePage
'Dokument-Nr. zum Speichern - Startwert setzen
iDocNum = 0
'Anzahl Seiten im Dokument ermitteln
iSeitenAnz = wdDoc.ComputeStatistics(wdStatisticPages)
For i = 1 To iSeitenAnz
'Verweis auf den zu kopierenden Bereich setzen
Set wdBereich = wdDoc.Bookmarks("\Page").Range
'Den zu kopierenden Bereich überprüfen, ob Seitenwechsel dabei ist;
'ggf. den Bereich verkleinern
If Right(wdBereich.Text, 1) = Chr(12) Then
wdBereich.SetRange Start:=wdBereich.Start, End:=wdBereich.End - 1
End If
'Neues Dokument öffnen, auf Basis derselben Dokumentvorlage
'wie das Original-Dokument
Set wdDocNeu = Documents.Add _
(Template:=wdDoc.AttachedTemplate.FullName)
'oder auf Basis der Normal.dot:
'Set wdDocNeu = Documents.Add
'Formatierten Text -> neue Datei
wdDocNeu.Content.FormattedText = wdBereich.FormattedText
'Dokument-Nr. zum Speichern erhöhen
iDocNum = iDocNum + 1
'Neues Dokument speichern:
' Dateinamen aus Zeile zeile von Spalte B entnehmen
neuDatei = wdDoc.Path & "\" & ws.Cells(zeile, "B") & ".txt"
wdDocNeu.SaveAs FileName:=neuDatei, _
FileFormat:=wdFormatText
'      wdDocNeu.SaveAs FileName:=sPfad & Format(iDocNum, "000")
zeile = zeile + 1
'Neues Dokument schließen
wdDocNeu.Close
'Dokument aktivieren
wdDoc.Activate
'Zur nächsten Seite im Original-Dokument wechseln
Application.Browser.Next
Next i
'Ursprüngliche Seiten-Ansicht wieder einstellen
Windows(wdDoc).View.Type = optAnsicht
'Cursor zum Anfang des Dokuments
wdDoc.Range(0, 0).Select
'Bildschirmaktualisierung aktivieren
Application.ScreenUpdating = True
'Verweise freigeben
Set wdBereich = Nothing
Set wdDocNeu = Nothing
Set wdDoc = Nothing
' Arbeitsmappe schließen
wb.Close
' Excel schließen
xlApp.Quit
Set xlApp = Nothing
End Sub
Viele Grüße
Dieter
Anzeige

309 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige