VBA (Word 2003) - Problemchen beim Ersetzen von Zeichen in allen Dateien eines Ordners
Hallo,
ich muss bei etlichen Dateien in einem Ordner mehrere Zeichenketten ersetzen. Da ich es in sehr vielen Ordnern machen muss (immer andere zu ersetzende Zeichenketten) möchte ich dies möglichst per Makro pro Ordner machen.
Folgendes Makro läuft ja schon halbwegs:
Wie man sieht sind es verschiedene Dateitypen. Ích denke mal, dass diese Lösung noch nicht optimal ist.
1. Wenn ich den Pfad leer lasse (weil ich die makrobestückte Datei mit in den zu bearbeitenden Ordner gesteckt habe) versucht er auch gleich noch alle möglichen anderen Dateien zu durchforsten ("Eigene Dateien"). Seltsam. Mit kompletten Pfad gehts dann aber.
2. Den Code zweimal zu machen, nur weil es zwei Dateitypen sind (könnten ja auch mal mehr sein) ist auch sehr unschön. Könnte man das nicht irgendwie eleganter lösen?
3. In diesem Fall muss ich das Makro 4 Mal laufen lassen, da 4 Zeichenketten ersetzt werden müssten. Wäre es da nicht effektiver alle Dialog-Abfragen gleich in einer Maske zu machen (incl. Pfad)? Da komme ich aber mit der InputBox nicht weiter, oder?
4. Eigentlich sind auch noch txt-Dateien dabei. Ich hatte als Dateityp einfach *.* genommen. Allerdings hat Word aus den Zeichen in den Textdateien nur noch Hyroglyphen gemacht.
Oder wäre es günstiger das Ganze gleich mit vbs zu machen? Aber würden dann die ursprünglichen Textformatierungen erhalten bleiben?
Vielleicht kann mir da jemand Tipps geben?
Torsten
ich muss bei etlichen Dateien in einem Ordner mehrere Zeichenketten ersetzen. Da ich es in sehr vielen Ordnern machen muss (immer andere zu ersetzende Zeichenketten) möchte ich dies möglichst per Makro pro Ordner machen.
Folgendes Makro läuft ja schon halbwegs:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
Sub ZeichenErsetzen()
Dim Verz As String
Dim DName1 As String
Dim DName2 As String
Dim Alt As String
Dim Neu As String
Verz = InputBox("Bitte den kompletten Pfad zu dem zu durchsuchenden Ordner eingeben." & Chr(13) & Chr(10) & Chr(10) & "z.B.: C:\Test\", "Pfadangabe...")
Alt = InputBox(Chr(10) & "Bitte die zu ersetzende Zeichenkette eingeben...", "Alte Zeichenkette...")
Neu = InputBox(Chr(10) & "Bitte die neue Zeichenkette eingeben...", "Neue Zeichenkette...")
DName1 = Dir(Verz & "*.htm")
If DName1 <> "" Then
Ersetzen1 Verz, DName1, Alt, Neu
End If
Do While (DName1 <> "")
DName1 = Dir()
If DName1 <> "" Then
Ersetzen1 Verz, DName1, Alt, Neu
End If
Loop
DName2 = Dir(Verz & "*.rtf")
If DName2 <> "" Then
Ersetzen2 Verz, DName2, Alt, Neu
End If
Do While (DName2 <> "")
DName2 = Dir()
If DName2 <> "" Then
Ersetzen2 Verz, DName2, Alt, Neu
End If
Loop
End Sub
Sub Ersetzen1(Verz As String, DName1 As String, Alt As String, Neu As String)
Documents.Open (Verz & DName1)
With Documents(DName1)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = Alt
.Replacement.Text = Neu
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
ActiveDocument.Save
ActiveDocument.Close
End With
End Sub
Sub Ersetzen2(Verz As String, DName2 As String, Alt As String, Neu As String)
Documents.Open (Verz & DName2)
With Documents(DName2)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = Alt
.Replacement.Text = Neu
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
ActiveDocument.Save
ActiveDocument.Close
End With
End Sub
1. Wenn ich den Pfad leer lasse (weil ich die makrobestückte Datei mit in den zu bearbeitenden Ordner gesteckt habe) versucht er auch gleich noch alle möglichen anderen Dateien zu durchforsten ("Eigene Dateien"). Seltsam. Mit kompletten Pfad gehts dann aber.
2. Den Code zweimal zu machen, nur weil es zwei Dateitypen sind (könnten ja auch mal mehr sein) ist auch sehr unschön. Könnte man das nicht irgendwie eleganter lösen?
3. In diesem Fall muss ich das Makro 4 Mal laufen lassen, da 4 Zeichenketten ersetzt werden müssten. Wäre es da nicht effektiver alle Dialog-Abfragen gleich in einer Maske zu machen (incl. Pfad)? Da komme ich aber mit der InputBox nicht weiter, oder?
4. Eigentlich sind auch noch txt-Dateien dabei. Ich hatte als Dateityp einfach *.* genommen. Allerdings hat Word aus den Zeichen in den Textdateien nur noch Hyroglyphen gemacht.
Oder wäre es günstiger das Ganze gleich mit vbs zu machen? Aber würden dann die ursprünglichen Textformatierungen erhalten bleiben?
Vielleicht kann mir da jemand Tipps geben?
Torsten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 123995
Url: https://administrator.de/forum/vba-word-2003-problemchen-beim-ersetzen-von-zeichen-in-allen-dateien-eines-ordners-123995.html
Ausgedruckt am: 15.04.2025 um 15:04 Uhr
39 Kommentare
Neuester Kommentar
Hallo TorstenB,
ich denke mit vbs bekommen wir das hin. Mit VBA sicher auch, aber da mache ich zu wenig mit.
in VBS könnte es - rein als Gedanke! - grob so aussehen:
[Edit] Habe mal den Code noch so geändert, daß die gleichen Dateien mit dem Anhang ".bak" abgespeichert werden, damit du testen kannst, was passiert. Bitte posten, was es noch zu beachten gibt/was nicht funktioniert!
Danke!
[Edit]
Hier nutzen wir Word dazu, um nach Dateien zu suchen. Mit der "Replace"-Methode erstzen wir ALT gegen NEU.
Was jetzt noch geschrieben werden muss ist, daß die einzelnen (NEUEN) Zeilen gespeichert werden und anschließend wieder in deine Datei kommen. Wir hatten gestern einen ähnlichen Beitrag (Ersetzen/neu erstellen von Werten in einer INI-Datei mittels VBS), aber der hilft bei dir nur bedingt.
Soweit erst mal von mir. Muss schon wieder..... hetz
Gruß
Tsuki
ich denke mit vbs bekommen wir das hin. Mit VBA sicher auch, aber da mache ich zu wenig mit.
in VBS könnte es - rein als Gedanke! - grob so aussehen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Dim FilterStr , PfadStr
Dim Alt, Neu
FilterStr = "*.*"
Dim MyText(1000), X
X = 0
Set objWord = CreateObject("Word.Application")
PfadStr = inputbox("Bitte den kompletten Pfad zu dem zu durchsuchenden Ordner eingeben.","Pfadangabe...","C:\Test\")
Alt = inputbox("Bitte die zu ersetzende Zeichenkette eingeben...", "Alte Zeichenkette...", "altes")
Neu = inputbox("Bitte die neue Zeichenkette eingeben...", "Neue Zeichenkette...", "neues")
msgbox "Befehl wird ausgeführt! Bitte warten!",,"Mit Word...."
objWord.FileSearch.FileName = FilterStr
objWord.FileSearch.LookIn = PfadStr
objWord.FileSearch.SearchSubfolders = False
objWord.FileSearch.Execute
objWord.Visible = False
For Each objFile in objWord.FileSearch.FoundFiles
Msgbox objFile
Set FSO = CreateObject("Scripting.FileSystemObject")
Set MyDatei = FSO.OpenTextFile(objFile, 1)
Do Until MyDatei.AtEndOfStream
MyText(X) = MyDatei.ReadLine
MyText(X) = Replace(MyText(X), Alt, Neu)
Loop
MyDatei.close
PfadNeu = objFile & ".bak"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set MyDatei1 = FSO.CreateTextFile(PfadNeu, TRUE)
MyDatei1.Close
Set MyDatei1 = FSO.OpenTextFile(PfadNeu, 8)
for I = 0 to X
if not MyText(I) = "" then MyDatei1.WriteLine (MyText(I))
next
MyDatei1.Close
X = 0
Next
msgbox "Ferddich..."
Set objword = nothing
Set MyDatei = nothing
Set FSO = nothing
[Edit] Habe mal den Code noch so geändert, daß die gleichen Dateien mit dem Anhang ".bak" abgespeichert werden, damit du testen kannst, was passiert. Bitte posten, was es noch zu beachten gibt/was nicht funktioniert!
Danke!
[Edit]
Hier nutzen wir Word dazu, um nach Dateien zu suchen. Mit der "Replace"-Methode erstzen wir ALT gegen NEU.
Was jetzt noch geschrieben werden muss ist, daß die einzelnen (NEUEN) Zeilen gespeichert werden und anschließend wieder in deine Datei kommen. Wir hatten gestern einen ähnlichen Beitrag (Ersetzen/neu erstellen von Werten in einer INI-Datei mittels VBS), aber der hilft bei dir nur bedingt.
Soweit erst mal von mir. Muss schon wieder..... hetz
Gruß
Tsuki
Hallo TorstenB
Sorry, habe jetzt mal etwas getestet und
folgende Sachen müssen in meinem Script
erst mal geändert werden, damit es prinzipiell
funktioniert:
1) In Zeile 04 bitte die "1000" auf "100000" erhöhen
2)Nach Zeile 34 muss eingefügt werden
3)In Zeile 45 anstelle von "If Not...." das ganze
so schreiben, damit auch Leerzeilen einfach
mit übernommen werden
4) vor Zeile 56 noch folgendes einfügen
So, jetzt hätten wir das ganze mit 3
"Hauptschönheitsfehlern" laufen
Schönheit 1)
- es geht nur mit reinen Textdateien!
Bei Dateien wie WORD, EXCEL, MP3, EXE etc.
wird auf diese Art und Weise was (zumindest)
am Header "reduziert" und die neue Datei ist
nicht mehr lesbar
Schönheit 2)
- Das ganze ist begrenzt auf eine maximale
Zeilenanzahl (original Datei) von 100001
Schönheit 3)
- Wird das Script "langsam" genug ausgeführt,
werden die neu erstellten ".bak"- Dateien
mitverarbeitet und das ganze entwickelt sich
zu einer "never-ending-story"
Also müssen wir mal weiterüberlegen, was zu
machen ist.
Gegenfrage: Sind deine zu ändernden Dateien reine
Textdateien?
Bis später
Gruß
Sorry, habe jetzt mal etwas getestet und
folgende Sachen müssen in meinem Script
erst mal geändert werden, damit es prinzipiell
funktioniert:
1) In Zeile 04 bitte die "1000" auf "100000" erhöhen
2)Nach Zeile 34 muss eingefügt werden
1
X = X + 1
3)In Zeile 45 anstelle von "If Not...." das ganze
so schreiben, damit auch Leerzeilen einfach
mit übernommen werden
1
MyDatei1.WriteLine (MyText(I))
4) vor Zeile 56 noch folgendes einfügen
1
objword.quit
So, jetzt hätten wir das ganze mit 3
"Hauptschönheitsfehlern" laufen
Schönheit 1)
- es geht nur mit reinen Textdateien!
Bei Dateien wie WORD, EXCEL, MP3, EXE etc.
wird auf diese Art und Weise was (zumindest)
am Header "reduziert" und die neue Datei ist
nicht mehr lesbar
Schönheit 2)
- Das ganze ist begrenzt auf eine maximale
Zeilenanzahl (original Datei) von 100001
Schönheit 3)
- Wird das Script "langsam" genug ausgeführt,
werden die neu erstellten ".bak"- Dateien
mitverarbeitet und das ganze entwickelt sich
zu einer "never-ending-story"
Also müssen wir mal weiterüberlegen, was zu
machen ist.
Gegenfrage: Sind deine zu ändernden Dateien reine
Textdateien?
Bis später
Gruß
So, da bin ich kurz wieder,
Habe mal den Script soweit geschrieben (in VBS), daß er zumindest bei Dateien funktioniert, welche reinen Text beinhalten.
Binär-Dateien, etc. funktionieren damit nicht. Da stimmen die Zeilenumbrüche etc. nicht!!!!
Hinweis: diesen Code-Schnipsel in eine Textdatei einfügen und als "Test.vbs" umbennen. Dann am besten aus der Kommandozeile ausführen, damit es nicht so viele "Klicks" gibt
Wenn die neue Test.vbs also unter C:\ abliegt dann
Eingabe Kommandozeile :
CScript C:\Test.vbs
Bitte posten, was man verbessern/ändern kann (Gibt immer was!)
Gruß
Tsuki
Habe mal den Script soweit geschrieben (in VBS), daß er zumindest bei Dateien funktioniert, welche reinen Text beinhalten.
Binär-Dateien, etc. funktionieren damit nicht. Da stimmen die Zeilenumbrüche etc. nicht!!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
Dim FilterStr , PfadStr
Dim PfadStrNeu, DateiNameNeu
Dim Alt, Neu
Dim MyText()
Dim X
Dim ZMAx
FilterStr = "*.*"
X = 0
ZMax = 0
Set objWord = CreateObject("Word.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
PfadStr = inputbox("Bitte den kompletten Pfad zu dem zu durchsuchenden Ordner eingeben.","Pfadangabe...","C:\Test\")
PfadStrNeu = PfadStr & "Test\"
on error resume next
FSO.CreateFolder(PfadStrNeu)
Alt = inputbox("Bitte die zu ersetzende Zeichenkette eingeben...", "Alte Zeichenkette...", "altes")
Neu = inputbox("Bitte die neue Zeichenkette eingeben...", "Neue Zeichenkette...", "neues")
msgbox "Befehl wird ausgeführt! Bitte warten!",,"Mit Word...."
objWord.FileSearch.FileName = FilterStr
objWord.FileSearch.LookIn = PfadStr
objWord.FileSearch.SearchSubfolders = False
objWord.FileSearch.Execute
objWord.Visible = False
FN = ""
FNR = ""
For Each objFile in objWord.FileSearch.FoundFiles
WScript.Echo "Oeffne Datei: " & ObjFile
'Jetzt holen wir uns nur den Dateinamen raus
FN = ""
FNR = ""
IFN = ""
IFNR = ""
for IFN = len(Objfile) to 0 Step -1
FNTemp = mid (Objfile,IFN,1)
If Not FNTemp = "\" then FN = FN & FNTemp
If FNTemp = "\" Then IFN = 0
next
'Hier wieder richtig rum drehen ;-)
for IFNR = len(FN) to 1 Step -1
FNTempR = mid (FN,IFNR,1)
FNR = FNR & FNTempR
next
ZMAx = 0
Set MyDatei = FSO.OpenTextFile(objFile, 1)
'Zum bestimmen der maximalen Zeilenzahl in der einzulesenden Datei
Do Until MyDatei.AtEndOfStream
TempText = MyDatei.ReadLine
ZMAx = Zmax + 1
Loop
MyDatei.close
WScript.Echo "Anzahl Zeilen: " & ZMAx
ReDim MyText(ZMax)
Set MyDatei = FSO.OpenTextFile(objFile, 1)
Do Until MyDatei.AtEndOfStream
MyText(X) = MyDatei.ReadLine
'WScript.Echo "Zeile " & X & ": Suche nach:'" & Alt & "' und ersetze durch:'" & Neu
MyText(X) = Replace(MyText(X), Alt, Neu)
X = X + 1
Loop
MyDatei.close
PfadNeu = PfadStrNeu & FNR ' & ".bak"
WScript.Echo "Daten werden nach " & PfadNeu & " geschrieben."
Set MyDatei1 = FSO.CreateTextFile(PfadNeu, TRUE)
MyDatei1.Close
Set MyDatei1 = FSO.OpenTextFile(PfadNeu, 8)
for I = 0 to X
MyDatei1.WriteLine (MyText(I))
next
MyDatei1.Close
X = 0
Next
msgbox "Ferddich..."
objword.quit
Set objword = nothing
Set MyDatei = nothing
Set FSO = nothing
Hinweis: diesen Code-Schnipsel in eine Textdatei einfügen und als "Test.vbs" umbennen. Dann am besten aus der Kommandozeile ausführen, damit es nicht so viele "Klicks" gibt
Wenn die neue Test.vbs also unter C:\ abliegt dann
Eingabe Kommandozeile :
CScript C:\Test.vbs
Bitte posten, was man verbessern/ändern kann (Gibt immer was!)
Gruß
Tsuki

Hallo zusammen!
Hier eine Alternative mit Dateitypen-Auswahl (*.vbs)
Auch dieses VB-Script gilt nur für Textdateien und es werden keine Sicherungskopien angelegt.
Das Script kann direkt z.B. per Doppelklick gestartet werden.
Eingaben:
1. InpuBox: Ordner-Pfad - z.B. C:\Test
2. InpuBox: Datei-Typen - z.B. txt, rtf, htm, ... oder * (alle Dateien)
3. InpuBox: Text Suchen - z.B. Das ist ein Suchtext
4. InpuBox: Text Ersetzen - z.B. Das ist der neue Text
Ausgaben:
1. MsgBox: Fehlermeldung bei Eingabefehler
2. MsgBox: Frage ob der Vorgang ausgeführt werden soll? (OK/Abbrechen) und Anzeige der Eingaben zur Kontrolle
3. MsgBox: Meldung das der Vorgang abgeschlossen ist.
Probiers mal aus.
Gruß Dieter
[edit] Änderung bei Dateitypen "*" nur *.txt und *.rtf und *.html [\edit]
Hier eine Alternative mit Dateitypen-Auswahl (*.vbs)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Option Explicit
Const TitelOrdner = "Ordner-Pfadangabe"
Const TitelTypen = "Datei-Typen"
Const TitelSuchen = "Suchen"
Const TitelErsetzen = "Ersetzen"
Const TitelAktion = "Suchen und Ersetzen"
Const MsgOrdner = "Bitte den Ordner-Pfad angeben: z.B. C:\Test"
Const MsgTypen = "Bitte Dateitypen angeben: z.B. * oder rtf,html,..."
Const MsgSuchen = "Bitte Zeichenkette angeben: Suchen nach..."
Const MsgErsetzen = "Bitte Zeichenkette angeben: Ersetzen durch..."
Const MsgAktion = "Soll der Ersetzenvorgang jetzt gestartet werden? "
Const MsgFertig = "Der Ersetzenvorgang ist abgeschlossen!."
Const MsgFehler = "Die Eingaben sind unvollständig!"
Dim Ordner, Typen, Suchen, Ersetzen, Fso, File, xFile, Extension, Text, i
Ordner = InputBox(MsgOrdner, TitelOrdner): Typen = InputBox(MsgTypen, TitelTypen)
Suchen = InputBox(MsgSuchen, TitelSuchen): Ersetzen = InputBox(MsgErsetzen, TitelErsetzen)
Set Fso = CreateObject("Scripting.FileSystemObject")
If Fso.FolderExists(Ordner) = False Or Typen = "" Or Suchen = "" Then
MsgBox MsgFehler, vbExclamation, "Fehler": WScript.Quit (1)
End If
If MsgBox(MsgAktion & vbCr & vbCr & "Ordner:" & vbTab & " " & Ordner & vbCr & vbCr & _
"Typen:" & vbTab & " " & Typen & vbCr & vbCr & "Suchen:" & vbTab & " " & Suchen & vbCr & vbCr & _
"Ersetzen:" & vbTab & " " & Ersetzen, vbInformation Or vbOKCancel, TitelAktion) <> vbOK Then WScript.Quit (0)
Typen = Split(Typen, ",")
For Each File In Fso.GetFolder(Ordner).Files
Extension = LCase(Fso.GetExtensionName(File.Name))
For i = 0 To UBound(Typen)
If Trim(Typen(0)) = "*" Then
If Extension = "txt" Or Extension = "rtf" Or Extension = "html" Then i = True: Exit For
Else
If LCase(Trim(Typen(i))) = Extension Then i = True: Exit For
End If
Next
If i = True Then
Set xFile = Fso.OpenTextFile(File.Path)
Text = Replace(xFile.ReadAll, Suchen, Ersetzen, 1, -1, vbTextCompare)
Fso.CreateTextFile(File.Path).Write Text: xFile.Close
End If
Next
MsgBox MsgFertig, vbInformation, "Meldung": WScript.Quit (0)
Auch dieses VB-Script gilt nur für Textdateien und es werden keine Sicherungskopien angelegt.
Das Script kann direkt z.B. per Doppelklick gestartet werden.
Eingaben:
1. InpuBox: Ordner-Pfad - z.B. C:\Test
2. InpuBox: Datei-Typen - z.B. txt, rtf, htm, ... oder * (alle Dateien)
3. InpuBox: Text Suchen - z.B. Das ist ein Suchtext
4. InpuBox: Text Ersetzen - z.B. Das ist der neue Text
Ausgaben:
1. MsgBox: Fehlermeldung bei Eingabefehler
2. MsgBox: Frage ob der Vorgang ausgeführt werden soll? (OK/Abbrechen) und Anzeige der Eingaben zur Kontrolle
3. MsgBox: Meldung das der Vorgang abgeschlossen ist.
Probiers mal aus.
Gruß Dieter
[edit] Änderung bei Dateitypen "*" nur *.txt und *.rtf und *.html [\edit]

Hallo TorstenB!
Sorry, bei mir funktionierts, daher kann ich das nicht ganz nachvollziehen.
Das die Txt-Datei die Größe Null hat, heißt das der Schreibbefehl "Write Text" nicht ausgeführt wird, wieso auch immer?
In welcher Größenordnung bewegen sich Deine Dateien?
Funktionieren die RTF-Dateien mit dem Script von TsukiSan?
Hast Du das Script direkt gestartet?
Gruß Dieter
Sorry, bei mir funktionierts, daher kann ich das nicht ganz nachvollziehen.
Das die Txt-Datei die Größe Null hat, heißt das der Schreibbefehl "Write Text" nicht ausgeführt wird, wieso auch immer?
In welcher Größenordnung bewegen sich Deine Dateien?
Funktionieren die RTF-Dateien mit dem Script von TsukiSan?
Hast Du das Script direkt gestartet?
Gruß Dieter

Hallo TorstenB!
Wohl doch nicht so einfach, wie ich mir das vorgestellt hatte
Die Textdateien, die Du mit meinem Script getestet hast, wurden die auch mit Word
erstellt bzw. werden die Text-Dateien im Notepad korrekt dargestellt?
Ich teste mal in Word (2002) und schau mal, was dabei rauskommt.
Gruß Dieter
Wohl doch nicht so einfach, wie ich mir das vorgestellt hatte
Die Textdateien, die Du mit meinem Script getestet hast, wurden die auch mit Word
erstellt bzw. werden die Text-Dateien im Notepad korrekt dargestellt?
Ich teste mal in Word (2002) und schau mal, was dabei rauskommt.
Gruß Dieter
Hi @ all
ja, bei mir funktioniert es mit Textdateien (auch wenn diese im HTML-Format vorliegen) und mit nur jeweils einem Such-/Erstzenwort. Warum ich Word benutzt habe ist einfach zu erklären:
Damit kann man unter anderem nach Dateien suchen. Ich denke mal, dass man so eventuell auch auf eine VBA-Lösung kommen kann. Allerdings habe ich mit VBA nicht viel am Hut. Aber die Befehle und die "umstände" sollten ähnlich vbs sein. War so meine Idee. Sorry!
Falls ihr beiden was neues habt/rausfindet, dann bitte posten!
Ich lerne gern mit.
Gruß
Tsuki!
Ps.: Bei mir hatte es funktioniert mit WinXP Prof_ENG und Office2000Prof. Ich hatte/habe immer mal wieder Scripte, bei denen das eine ausgeklammerte Wort in einen "KNOW_HOW"-Schutz umgewandelt werden müssen. Da funktioniert es
ja, bei mir funktioniert es mit Textdateien (auch wenn diese im HTML-Format vorliegen) und mit nur jeweils einem Such-/Erstzenwort. Warum ich Word benutzt habe ist einfach zu erklären:
Damit kann man unter anderem nach Dateien suchen. Ich denke mal, dass man so eventuell auch auf eine VBA-Lösung kommen kann. Allerdings habe ich mit VBA nicht viel am Hut. Aber die Befehle und die "umstände" sollten ähnlich vbs sein. War so meine Idee. Sorry!
Falls ihr beiden was neues habt/rausfindet, dann bitte posten!
Ich lerne gern mit.
Gruß
Tsuki!
Ps.: Bei mir hatte es funktioniert mit WinXP Prof_ENG und Office2000Prof. Ich hatte/habe immer mal wieder Scripte, bei denen das eine ausgeklammerte Wort in einen "KNOW_HOW"-Schutz umgewandelt werden müssen. Da funktioniert es

@TsukiSan
Welche Suchfunktion letztendlich verwendet wird, ist eigentlich wurscht. Beide funktionieren in VBS und VBA.
Mein Script kann z.B. in ein VBA-Modul kopiert werden, wobei allerdings in der Zeile 19 ein "Sub Irgendwas" und in der Zeile nach 49 ein "End Sub" stehen muss. Ausserdem müssten dann noch "WScript.Quit (1)" durch "Exit Sub" ersetzt werden und "WScript.Quit (0)" am Ende ganz entfallen. Im Anschluss wird der Debugger gestartet <Menu Debugger><Kompilern von Projekt> und solange kein Fehler angezeigt wird, ist alles gut. WScript.Quit (0) wäre z.B. ein Fehler (nicht kompatibel).
In VBA können die DIM-Variablen explizit definiert werden z.B. Dim i As Integer, Fso As Object usw.
Es ist also relativ einfach in VBA einen Code zu entwerfen und mit dem Debugger Schrittweise zu testen und dann in eine Textdatei zu kopieren und diverse kleine Änderungen vorzunehmen.
@torstenb
Hmh, ich stehe ein wenig auf dem Schlauch
. Wenn ich in Word (2002) eine RTF- oder TXT-Datei erstelle und mit meinem Script bearbeite, dann funktioniert das Leider. Besitzt Du einen Hex-Editor? Wenn nicht kannst Du Dir hier einen runterladen (Freeware):
http://www.chip.de/downloads/Hex-Editor-MX_30351843.html
Dann schau mal in den Dateien ob z.B. das Wort "Das" im Format: 44 61 73 oder 00 44 00 61 00 73 vorhanden ist
Gruß Dieter
Welche Suchfunktion letztendlich verwendet wird, ist eigentlich wurscht. Beide funktionieren in VBS und VBA.
Mein Script kann z.B. in ein VBA-Modul kopiert werden, wobei allerdings in der Zeile 19 ein "Sub Irgendwas" und in der Zeile nach 49 ein "End Sub" stehen muss. Ausserdem müssten dann noch "WScript.Quit (1)" durch "Exit Sub" ersetzt werden und "WScript.Quit (0)" am Ende ganz entfallen. Im Anschluss wird der Debugger gestartet <Menu Debugger><Kompilern von Projekt> und solange kein Fehler angezeigt wird, ist alles gut. WScript.Quit (0) wäre z.B. ein Fehler (nicht kompatibel).
In VBA können die DIM-Variablen explizit definiert werden z.B. Dim i As Integer, Fso As Object usw.
Es ist also relativ einfach in VBA einen Code zu entwerfen und mit dem Debugger Schrittweise zu testen und dann in eine Textdatei zu kopieren und diverse kleine Änderungen vorzunehmen.
@torstenb
Hmh, ich stehe ein wenig auf dem Schlauch
http://www.chip.de/downloads/Hex-Editor-MX_30351843.html
Dann schau mal in den Dateien ob z.B. das Wort "Das" im Format: 44 61 73 oder 00 44 00 61 00 73 vorhanden ist
Gruß Dieter

Hallo zusammen!

Es sei denn, es gibt eventuell ein Missverständnis mit der Eingabe der Dateitypen?
Bisher:
Im Code jetzt geändert:
Gruß Dieter
Zitat von @goodbytes:
Wenn ich nun alle Dateitypen behandeln möchte (also mit *) bekomme ich
wieder den oben angegebenen Laufzeitfehler und die txt-Datei ist wieder leer (die rtf
und html unberührt).
Das ist aber seltsamWenn ich nun alle Dateitypen behandeln möchte (also mit *) bekomme ich
wieder den oben angegebenen Laufzeitfehler und die txt-Datei ist wieder leer (die rtf
und html unberührt).
Es sei denn, es gibt eventuell ein Missverständnis mit der Eingabe der Dateitypen?
Bisher:
"*" | = *.* (alle Dateitypen) |
"txt" | = *.txt |
"txt, rtf" | = *.txt und *.rtf |
"txt, rtf, html" | = *.txt und *.rtf und *.html |
Im Code jetzt geändert:
"*" | = *.txt und *.rtf und *.html |
"txt" | = *.txt |
"txt, rtf" | = *.txt und *.rtf |
"txt, rtf, html" | = *.txt und *.rtf und *.html |
Gruß Dieter

Hallo Torsten!
Es wird auf Gleich getestet D.h. Wenn(Input = "*";Dann *.txt und *.rtf und *.html akzeptieren;Sonst überspringen). Alle Dateien bei denen die Dateierweiterung (nach dem Punkt) übereinstimmt wird bearbeitet. Siehe Code Zeile 37 <Variable Extension = Dateierweiterung.
Dein Html-Kopieren wäre auch einfach zu realisieren, aber scheinbar funktioniert ja schon ein einfaches Ersetzen mit den vorherigen Dateien nicht.Und ich habe keine Ahnung wieso? Bei mir funktionierts problemlos. Du könntest mal ein Stück Text aus einer Textdatei in code-Tags setzen.
In Code-Zeile 48 habe ich die Replace-Anweisung erweitert. D.h. Textvergleich ohne Unterscheidung zwischen Groß/Kleinschreibung.
Gruß Dieter
Es wird auf Gleich getestet D.h. Wenn(Input = "*";Dann *.txt und *.rtf und *.html akzeptieren;Sonst überspringen). Alle Dateien bei denen die Dateierweiterung (nach dem Punkt) übereinstimmt wird bearbeitet. Siehe Code Zeile 37 <Variable Extension = Dateierweiterung.
Dein Html-Kopieren wäre auch einfach zu realisieren, aber scheinbar funktioniert ja schon ein einfaches Ersetzen mit den vorherigen Dateien nicht.Und ich habe keine Ahnung wieso? Bei mir funktionierts problemlos. Du könntest mal ein Stück Text aus einer Textdatei in code-Tags setzen.
In Code-Zeile 48 habe ich die Replace-Anweisung erweitert. D.h. Textvergleich ohne Unterscheidung zwischen Groß/Kleinschreibung.
Gruß Dieter

Hallo TorstenB!
Sorry, Im Moment habe ich wenig Zeit
Das mit den Leerzeichen habe ich nicht so ganz verstanden. Gib mal ein Beispiel.
Die HTML-Dateien müssen leider noch ein paar Tage warten
Gruß Dieter
Sorry, Im Moment habe ich wenig Zeit
Das mit den Leerzeichen habe ich nicht so ganz verstanden. Gib mal ein Beispiel.
Die HTML-Dateien müssen leider noch ein paar Tage warten
Gruß Dieter

Hallo TorstenB!
Sorry, aber das kann ich absolut nicht nachvollziehen. Bei mir funktioniert's und vom Script her müsste es auch funktionieren. Bleibt die Frage, ob die Leerzeichen auch wirklich Leerzeichen (20h) sind. Ich denke, irgendetwas stimmt mit Deinen Dateien nicht.
Gruß Dieter
Sorry, aber das kann ich absolut nicht nachvollziehen. Bei mir funktioniert's und vom Script her müsste es auch funktionieren. Bleibt die Frage, ob die Leerzeichen auch wirklich Leerzeichen (20h) sind. Ich denke, irgendetwas stimmt mit Deinen Dateien nicht.
Gruß Dieter

Hallo Torsten!
Die Variante, die Bilder aus einem Verzeichnis einzulesen erscheint mir sinnvoller. Was mir aber noch nicht so ganz klar ist, wie die Bilder in dem Verzeichnis vorliegen. D.h. wenn, wie in Deinem Beispiel schon 3 Bilder definiert sind, befinden sich diese Bilder auch in diesem Verzeichnis und die neuen Bilder haben schon eine fortlaufender Nummer oder haben sie noch keine Nummer und sollen automatisch in eine fortlaufende Nummer erhalten, wobei das erste eingelesene Bild, dass noch noch keine Nummer hat eine fortlaufende Nummer erhalten soll?
Gruß Dieter
Die Variante, die Bilder aus einem Verzeichnis einzulesen erscheint mir sinnvoller. Was mir aber noch nicht so ganz klar ist, wie die Bilder in dem Verzeichnis vorliegen. D.h. wenn, wie in Deinem Beispiel schon 3 Bilder definiert sind, befinden sich diese Bilder auch in diesem Verzeichnis und die neuen Bilder haben schon eine fortlaufender Nummer oder haben sie noch keine Nummer und sollen automatisch in eine fortlaufende Nummer erhalten, wobei das erste eingelesene Bild, dass noch noch keine Nummer hat eine fortlaufende Nummer erhalten soll?
Gruß Dieter

Hallo Torsten!
Erstmal Danke für die umfangreiche Info
Ob und wie man die Bildergröße in VBS ermitteln kann, muss ich erst mal austesten.
Gruß Dieter
Erstmal Danke für die umfangreiche Info
Ob und wie man die Bildergröße in VBS ermitteln kann, muss ich erst mal austesten.
Gruß Dieter

Hallo Torsten!
Nö, zaubern kann ich beim besten Willen nicht
Frage: Was passiert, wenn keine Größenangaben gemacht werden?
Wird das Bild dann nicht in seiner Originalgröße angezeigt?
Gruß Dieter
Nö, zaubern kann ich beim besten Willen nicht
Frage: Was passiert, wenn keine Größenangaben gemacht werden?
Wird das Bild dann nicht in seiner Originalgröße angezeigt?
Gruß Dieter

Hallo Torsten!
Also, über Windows Bildaten auszulesen ist recht komplex und sehr aufwendig, aber ich habe gerade eine einfachere Möglichkeitkeit gefunden, die Bildgröße direkt aus der Bild-Datei in Pixel auszulesen. Unabhängig davon ob Du das jetzt noch benötigst oder nicht, werde ich es trotzdem mal als Funktion zusammenbasteln, damit sich die googelei auch gelohnt hat
Gruß Dieter
PS. Den Link kannst Du auch per Nachricht im Admin-Postfach hinterlegen.
Also, über Windows Bildaten auszulesen ist recht komplex und sehr aufwendig, aber ich habe gerade eine einfachere Möglichkeitkeit gefunden, die Bildgröße direkt aus der Bild-Datei in Pixel auszulesen. Unabhängig davon ob Du das jetzt noch benötigst oder nicht, werde ich es trotzdem mal als Funktion zusammenbasteln, damit sich die googelei auch gelohnt hat
Gruß Dieter
PS. Den Link kannst Du auch per Nachricht im Admin-Postfach hinterlegen.

Hallo Torsten!
Eine Funktion zum auslesen der Pixelgrößen habe ich hingekriegt. Der Code hat bei zahlreichen Tests einwandfrei funktioniert. Von daher werde ich den Code dann auch so mit einbinden, das er jederzeit mit minimalem Aufwand aktiviert werden kann. Seperat dazu geht auch ein Script, das ganze Ordner ausliest und die Pixelgrößen in eine Log schreibt. Oder wie auch immer?
Deinen Link werde ich mir jetzt im Anschluß noch anschauen, damit ich mal ein besseres Bild von dem ganzen bekomme
Gruß Dieter
Eine Funktion zum auslesen der Pixelgrößen habe ich hingekriegt. Der Code hat bei zahlreichen Tests einwandfrei funktioniert. Von daher werde ich den Code dann auch so mit einbinden, das er jederzeit mit minimalem Aufwand aktiviert werden kann. Seperat dazu geht auch ein Script, das ganze Ordner ausliest und die Pixelgrößen in eine Log schreibt. Oder wie auch immer?
Deinen Link werde ich mir jetzt im Anschluß noch anschauen, damit ich mal ein besseres Bild von dem ganzen bekomme
Gruß Dieter

Hallo Torsten!
Wußt ich's doch, dass Deine Dateien Schrott sind
Den Vorschlag, die Dateien mal im normalen Text- und Hex-Editor anzusehen, hatte ich aber auch schon mal vorgeschlagen?
Das andere ist in Arbeit.
Ein schönes WE
Gruß Dieter
Wußt ich's doch, dass Deine Dateien Schrott sind
Den Vorschlag, die Dateien mal im normalen Text- und Hex-Editor anzusehen, hatte ich aber auch schon mal vorgeschlagen?
Das andere ist in Arbeit.
Ein schönes WE
Gruß Dieter

Hallo Torsten!
Wenn ich richtig liege, dann müsste die Ordnerstruktur so aussehen:
..\Home\Left- und Right.Htm und andere
..\Home\Pages\Name
..\Home\Thumbnails\Name
..\Home\Images\Name
Ist das so richtig?
Gruß Dieter
Wenn ich richtig liege, dann müsste die Ordnerstruktur so aussehen:
..\Home\Left- und Right.Htm und andere
..\Home\Pages\Name
..\Home\Thumbnails\Name
..\Home\Images\Name
Ist das so richtig?
Gruß Dieter

Hallo Torsten!
Mhm, was machst Du eigentlich mit der vielen Zeit, die Du durch das Script einsparst
. Mit ca 260 Bilder pro Name, also insgesamt 1040 Thumbnails- und Image-Bilder ), hat's bei mir knapp 5 Sekunden gedauert, die Pages-, Left- und Right.Htm's zu erstellen?
Die Vorlage-Dateien müsstest Du per Mail an Deine Web-Mail-Adresse bereits erhalten haben
Funktion des Scripts "CreateHtmFiles.vbs"
- Als Ausgangsbasis werden die Bilder in dem Ordner <Thumbnails> herangezogen
- Die Reihenfolge ist auf die Bildnummer gerichtet.
- Die Bild-Nummern müssen nicht fortlaufend sein. Fehlt z.B. 002.jpg, dann wird eben 1,3,4.. gezählt
- Die Bildnummern können auch 4 oder 5-stellig sein oder sonst eine beliebige sortierbare Bezeichnung haben
- Anhand der Bilder werden die Htm-Dateien Pages Nummer.htm, die Left.htm und Right.htm erstellt/überschrieben
- Zusätzlich zu allen Pfadangaben werden in den Htm's auch die Bildgrößen mit eingefügt (Images u. Thumbnails)
Der Ablauf:
- Kopiere Deinen Home-Ordner in einen Test-Ordner
- Füge im Home-Ordner das Script "CreateHtmFiles.vbs" und die Vorlage-Dateien (*.ht) ein.
- Starte das Script
- Siehe und staune, sofern alles rundläuft?
Kopiere den Quelltext und speichere ihn z.B. unter CreateHtmFiles.vbs im Home-Ordner ab:
Noch eine Anmerkung zu den Vorlage-Dateien (*.ht):
Das sind normale Htm-Dateien, in denen an verschiedenen Stellen eine Variable steht. In diesem Fall sind es die Variablen "$1", "$2", "$3" und "$4" und werden durch einen Namen, eine Bildnummer und der Bildgröße Width und Height ersetzt.
Gruß Dieter
[edit] Letzte Änderung 21.10.2009 13:30 Die GetJpgInfo-Funktion optimiert [/edit]
Mhm, was machst Du eigentlich mit der vielen Zeit, die Du durch das Script einsparst
Die Vorlage-Dateien müsstest Du per Mail an Deine Web-Mail-Adresse bereits erhalten haben
- Als Ausgangsbasis werden die Bilder in dem Ordner <Thumbnails> herangezogen
- Die Reihenfolge ist auf die Bildnummer gerichtet.
- Die Bild-Nummern müssen nicht fortlaufend sein. Fehlt z.B. 002.jpg, dann wird eben 1,3,4.. gezählt
- Die Bildnummern können auch 4 oder 5-stellig sein oder sonst eine beliebige sortierbare Bezeichnung haben
- Anhand der Bilder werden die Htm-Dateien Pages Nummer.htm, die Left.htm und Right.htm erstellt/überschrieben
- Zusätzlich zu allen Pfadangaben werden in den Htm's auch die Bildgrößen mit eingefügt (Images u. Thumbnails)
- Kopiere Deinen Home-Ordner in einen Test-Ordner
- Füge im Home-Ordner das Script "CreateHtmFiles.vbs" und die Vorlage-Dateien (*.ht) ein.
- Starte das Script
- Siehe und staune, sofern alles rundläuft?
Kopiere den Quelltext und speichere ihn z.B. unter CreateHtmFiles.vbs im Home-Ordner ab:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
Option Explicit
Const Name1 = "andreas" 'Left
Const Name2 = "linus" 'Right
Const HtmLeft = "left.Ht"
Const HtmRight = "right.Ht"
Const HtmPages = "pages.Ht"
Const FdPages = "pages\" 'Unterordner
Const FdImages = "images\"
Const FdThumbnails = "thumbnails\"
Const adVarChar = 200 'Konstanten für ADO-Recordset
Const adFldIsNullable = 32
Const Msg1 = "Die Erstellung der Htm-Dateien ist abgeschlossen."
Const Err1 = "Die Ordnerstruktur ist fehlerhaft!"
Const Err2 = "Htm-Vorlage (*.ht) nicht gefunden!"
Const Err3 = "Die Image-Datei existiert nicht: "
'*.ht = [Var $1 = Bild-Nr] [Var $2 = Name] [Var $3 = Width] [Var $4 = Height]
Dim Fso, JpgRec, P0, P1, P2, P3, TP, F1, F2, F3, TF, i
'Main Beg
Set Fso = CreateObject("Scripting.FileSystemObject")
P0 = Fso.GetParentFolderName(WScript.ScriptFullName) & "\"
P1 = P0 & FdPages: P2 = P0 & FdImages: P3 = P0 & FdThumbnails
TP = Array(P1, Name1, P1, Name2, P2, Name1, P2, Name2, P3, Name1, P3, Name2)
For i = 0 To UBound(TP) Step 2
If Fso.FolderExists(TP(i) & TP(i + 1)) = False Then MsgBox Err1, vbExclamation, "Fehler": WScript.Quit
Next
TF = Array(HtmLeft, HtmRight, HtmPages)
For i = 0 To UBound(TF)
If Fso.FileExists(P0 & TF(i)) = False Then MsgBox Err2, vbExclamation, "Fehler": WScript.Quit
Next
Call InitHtmFiles(Name1): Call InitHtmFiles(Name2)
MsgBox Msg1, vbInformation, "Meldung": WScript.Quit
'Main End
Private Sub InitHtmFiles(ByRef User)
Dim File, Text, Jpg, jpgNum, jpgInf
On Error Resume Next
Fso.DeleteFile (P1 & User & "\*.htm")
On Error GoTo 0
Set File = Fso.OpenTextFile(P0 & HtmPages): Text = File.ReadAll: File.Close
Call OpenJpgRec
For Each Jpg In Fso.GetFolder(P3 & User).Files
If LCase(Right(Jpg.Name, 4)) = ".jpg" Then
jpgNum = Fso.GetBaseName(Jpg.Name)
jpgInf = GetJpgInfo(Jpg.Path)
Call WriteJpgRec(jpgNum, User, jpgInf(0), jpgInf(1))
Call CreatePagesFile(jpgNum, User, Text)
End If
Next
If User = Name1 Then
Call CreateControlFile(P0 & HtmLeft)
ElseIf User = Name2 Then
Call CreateControlFile(P0 & HtmRight)
End If
End Sub
Private Sub CreatePagesFile(ByRef jpgNum, ByRef User, ByRef Text)
Dim File, PathP, PathI, TextP, jpgInf
PathP = P1 & User & "\" & jpgNum & ".htm"
PathI = P2 & User & "\" & jpgNum & ".jpg"
If Fso.FileExists(PathI) = False Then MsgBox Err3 & PathI, vbExclamation, "Fehler": WScript.Quit
jpgInf = GetJpgInfo(PathI)
TextP = GetVarText(Text, jpgNum, User, jpgInf(0), jpgInf(1))
Set File = Fso.CreateTextFile(PathP): File.Write TextP: File.Close
End Sub
Private Sub CreateControlFile(ByRef Path)
Dim File, Text, Line
Set File = Fso.OpenTextFile(Path): Text = Split(File.ReadAll, "#?#"): File.Close
If UBound(Text) = 2 Then
Set File = Fso.CreateTextFile(Path & "m"): File.Write Text(0)
With JpgRec
.Sort = "Num"
.MoveFirst
Do Until .EOF
Line = GetVarText(Text(1), .Fields(0), .Fields(1), .Fields(2), .Fields(3))
File.WriteLine Line
.MoveNext
Loop
End With
File.Write Text(2)
End If
JpgRec.Close: File.Close
End Sub
Private Sub OpenJpgRec()
Set JpgRec = CreateObject("ADOR.Recordset")
With JpgRec.Fields
.Append "Num", adVarChar, 32, adFldIsNullable
.Append "User", adVarChar, 32, adFldIsNullable
.Append "Width", adVarChar, 16, adFldIsNullable
.Append "Height", adVarChar, 16, adFldIsNullable
JpgRec.Open
End With
End Sub
Private Sub WriteJpgRec(ByRef jpgNum, ByRef User, ByVal jpgWidth, ByVal jpgHeight)
With JpgRec
.AddNew
.Fields("Num") = jpgNum
.Fields("User") = User
.Fields("Width") = jpgWidth
.Fields("Height") = jpgHeight
.Update
End With
End Sub
Private Function GetJpgInfo(ByRef Path)
Dim File, c, s, jpgWidth, jpgHeight
Set File = Fso.OpenTextFile(Path)
GetJpgInfo = Array("", "")
If File.Read(2) = Chr(&HFF) & Chr(&HD8) Then
Do While File.Read(1) = Chr(&HFF)
c = Asc(File.Read(1))
s = File.Read(Asc(File.Read(1)) * 256 + Asc(File.Read(1)) - 2)
If c = &HC0 Or c = &HC2 Then
jpgWidth = Asc(Mid(s, 4, 1)) * 256 + Asc(Mid(s, 5, 1))
jpgHeight = Asc(Mid(s, 2, 1)) * 256 + Asc(Mid(s, 3, 1))
GetJpgInfo = Array(jpgWidth, jpgHeight): Exit Do
End If
Loop
End If
File.Close
End Function
Private Function GetVarText(ByRef Text, ByVal s1, ByVal s2, ByVal s3, ByVal s4)
Dim Arg, i
GetVarText = Text: Arg = Array(0, s1, s2, s3, s4)
For i = 1 To UBound(Arg)
GetVarText = Replace(GetVarText, "$" & (i), Arg(i))
Next
End Function
Das sind normale Htm-Dateien, in denen an verschiedenen Stellen eine Variable steht. In diesem Fall sind es die Variablen "$1", "$2", "$3" und "$4" und werden durch einen Namen, eine Bildnummer und der Bildgröße Width und Height ersetzt.
Gruß Dieter
[edit] Letzte Änderung 21.10.2009 13:30 Die GetJpgInfo-Funktion optimiert [/edit]

Hallo!
Die Bildgröße auszulesen, würde auch so gehen. Allerdings ist diese Methode um ein vielfaches langsamer.
Die Prozedur ab Zeile 54 würde dann so aussehen:
Und die Funktion <GetJpgInfo> würde ganz entfallen
Gruß Dieter
Die Bildgröße auszulesen, würde auch so gehen. Allerdings ist diese Methode um ein vielfaches langsamer.
1
Set Shell = CreateObject("Shell.Application")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Private Sub InitHtmFiles(ByRef User)
Dim File, Path, Text, Jpg, JpgNum, jpgWidth, jpgHeight
On Error Resume Next
Fso.DeleteFile (P1 & User & "\*.htm")
On Error GoTo 0
Set File = Fso.OpenTextFile(P0 & HtmPages): Text = File.ReadAll: File.Close
Call OpenJpgRec
Path = P3 & User
For Each Jpg In Shell.Namespace(Path).Items
If LCase(Right(Jpg.Name, 4)) = ".jpg" Then
JpgNum = Fso.GetBaseName(Jpg.Name)
jpgWidth = Split(Shell.Namespace(Path).GetDetailsOf(Jpg, 27))(0)
jpgHeight = Split(Shell.Namespace(Path).GetDetailsOf(Jpg, 28))(0)
Call WriteJpgRec(JpgNum, User, jpgWidth, jpgHeight)
Call CreatePagesFile(JpgNum, User, Text)
End If
Next
If User = Name1 Then
Call CreateControlFile(P0 & HtmLeft)
ElseIf User = Name2 Then
Call CreateControlFile(P0 & HtmRight)
End If
End Sub
Gruß Dieter

Hallo TorstenB!
Yep, habe ich doch gern getan - aber nur - damit Du mehr Zeit für Deine Kinder und Deine Frau aufbringst.
Den letzten Code-Schnipsel würde ich NICHT einfügen. Er ist zwar kürzer und vielleicht auch hübscher, aber er ist viel viel viel langsamer, als der im Hauptscript.
Den Code habe ich eigentlich nur der Vollständigkeit halber gepostet, um zu zeigen, wie es auch geht.
Na, dann noch viel Spaß
Gruß Dieter
PS Das Hauptscript wurde geändert. GetJpgInfo-Funktion optimiert
Yep, habe ich doch gern getan - aber nur - damit Du mehr Zeit für Deine Kinder und Deine Frau aufbringst.
Den letzten Code-Schnipsel würde ich NICHT einfügen. Er ist zwar kürzer und vielleicht auch hübscher, aber er ist viel viel viel langsamer, als der im Hauptscript.
Den Code habe ich eigentlich nur der Vollständigkeit halber gepostet, um zu zeigen, wie es auch geht.
Na, dann noch viel Spaß
Gruß Dieter
PS Das Hauptscript wurde geändert. GetJpgInfo-Funktion optimiert

Hallo Torsten!

Freut mich, dass Du zufrieden bist
Gruß Dieter
Zitat von @goodbytes:
Vor allem kann ich jetzt auch in der Nummerierung dazwischen schnell mal Bilder einfügen, da die htm`s ja ohnehin neu erzeugt werden.
Ja, da kann man mal sehen, dass ich ein weinig mitgedacht habeVor allem kann ich jetzt auch in der Nummerierung dazwischen schnell mal Bilder einfügen, da die htm`s ja ohnehin neu erzeugt werden.
Freut mich, dass Du zufrieden bist
Gruß Dieter