Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1076to1080
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

Dateien umbenennen

Dateien umbenennen
22.05.2009 02:43:46
Dirk
Hallo Excelgemeinde,
ich habe vor einiger Zeit schon mal eine ähnliche Frage ins Forum gestellt, aber leider auf diesen Beitrag keine Antwort bekommen.
Ich versuche seitdem die Lösung selbst zu finden, aber ich scheitere daran. :o(
Hier mein Problem:
Ich habe folgenden code (ein Auszug) aus diesem Forum etwas auf meine Bedürfnisse abgeändert:

Sub Test()
'### START Bilder Auslesen
On Error Resume Next
'### Test Bilder umwandeln
For Each S In .Documents(1).InlineShapes
If S.Type = msoLine Then S.Delete
'If S.Type = msoPicture Then
S.ConvertToShapes
'End If
Next S
If .Documents(1).Shapes.Count > 0 Then
For lngPic = 1 To .Documents(1).Shapes.Count
'Bilder zurüchsetzen auf Originalabmessungen
With .Documents(1).Shapes(lngPic)
.LockAspectRatio = msoFalse
.Reset
.ScaleHeight 1, True
.ScaleWidth 1, True
End With
Next
'Worddatei als HTM speichern
.Documents(1).SaveAs FileName:=strTmpFile, FileFormat:=10, _
LockComments:=False, Password:="", AddToRecentFiles:=False, _
WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, _
SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:=False
strPic = Dir(Environ("Temp") & "\dummy-Dateien\*.*")
lngCnt = 0
Do While strPic  ""
Zeichen = IIf(InStr(objFiles(lngIndex).Name, "b") > 0, "b", ".")
Name Environ("Temp") & "\dummy-Dateien\" & strPic As strPicPath & _
Replace(Replace(Replace(Replace(Left(objFiles(lngIndex).Name, InStrRev(objFiles( _
lngIndex).Name, Zeichen) + 1) _
, " ", ""), ".b", "b"), "b", "-ZF") & _
IIf(lngCnt > 0, "[" & lngCnt + 1 & "]", "") & Mid(strPic, InStrRev(strPic, "." _
)), "..", ".")
Sleep 500
Kill strPic
strPic = Dir
lngCnt = lngCnt + 1
Loop
End If
.Documents(1).Close saveChanges:=False
Kill strTmpFile
Err.Clear
On Error GoTo ErrExit
'### ENDE Bilder Auslesen
End Sub


Es werden nacheinander Worddocumente geöffnet und als htm gespeichert.
Die enstandenen Bilder werden nun beannant in in einen Ordner kopiert. Ein b wird durch -ZF ersetzt usw.
Wenn die Worddateien so aussehen:
KO-1.1.1.b.doc oder KO-1.1.1.doc
funzt das perfekt auch überflüssige Punkte und Leerzeichen werden gelöscht.
In diesem Beispiel sehen die Bilddateien dann so aus:
KO-1.1.1-ZF.jpg und KO-1.1.1.jpg
Im Falle, dass die Datei so aussieht:
KO-1.1.1b irgendwas.doc habe ich durch:
Zeichen = IIf(InStr(objFiles(lngIndex).Name, "b") > 0, "b", ".")
folgendes Ergebnis:
KO-1.1.1-ZF.jpg
Soweit funzt das auch wirklich prima, aber....
Es sollte so auch bei folgendem Beispielen funktionieren:
KO-1.1.1 2 Test.doc oder KO-1.1.1 test.doc
In diesen Fällen sollten die Bilddateien so aussehen:
KO-1.1.1.jpg
Leider ist das Ergebnis bisher folgendes:
KO-1.1.12Test.jpg und KO-1.1.1test.doc
Ich hoffe ich habe mich nicht zu umständlich ausgedrückt?
Ich hoffe auf eure Hilfe!!!!!!!
Gruß
Dirk R.

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
...u.warum fragst du dann nicht in einem Word-...
22.05.2009 05:11:52
Luc:-?
...Forum, Dirk?
VBA für Wd unterscheidet sich doch etwas von VBA für Xl... Bei Office-Loesung ist bspw Lisa ausgesprochen kompetent für so etwas... ;-)
Moin-Moin!
Luc :-?
AW: ...u.warum fragst du dann nicht in einem Word-...
22.05.2009 15:02:46
Dirk
Hallo Luc,
der gesamt Code ist in einer Exceldatei.
Ursprünglich hatte ich mit einer Exceldatei zum auslesen von Daten aus Word in Excel angefangen.
Seinerzeit habe ich einen Code aus diesem Forum von Sepp dankbar erhalten. Die Datei läuft auch super.
Nun mussten auch noch die vorhanden Bilder exportiert werden.
Mit Hilfe von Sepp, aus diesem Forum, wurde der Code nun erneut angepasst, so dass die Bilder erstellt werden konnten.
Nun arbeite ich mit 2 Exceldateien. Die 1. zum Auslesen der Daten aus den Worddateien, die 2. zum Erstellen der Bilddateien aus Word.
Im Code wird Word als Object gestartet
Set AppWD = CreateObject("Word.Application") 'Word als Object starten
Der Ausschnitt, um den es bei der Bennung der Bilddateien geht ist folgender:

Sub kleiner Ausschnitt()
Zeichen = IIf(InStr(objFiles(lngIndex).Name, "b") > 0, "b", ".")
Name Environ("Temp") & "\dummy-Dateien\" & strPic As strPicPath & _
Replace(Replace(Replace(Replace(Left(objFiles(lngIndex).Name, InStrRev(objFiles( _
_
lngIndex).Name, Zeichen) + 1) _
, " ", ""), ".b", "b"), "b", "-ZF") & _
IIf(lngCnt > 0, "[" & lngCnt + 1 & "]", "") & Mid(strPic, InStrRev(strPic, "." _
_
)), "..", ".")
End Sub


Ist dieser Teil des Codes nicht identisch mit Excel VBA?
Aber vielleicht hast du ja recht. Sollte ich auf diesen Beitrag keine Antwort erhalten,
werde ich es bei Office-Loesung versuchen.
Gruß
Dirk R.

Anzeige
String-Operationen
22.05.2009 07:28:23
Christian
Hallo,
zum einen gebe ich Luc recht, zum anderen geht's dir hier wohl nur um String-Operationen. Da _ unterscheidet sich Word und Excel nicht. In deinem Code hast du versucht alles auf einmal zu erschlagen, mach's doch Schritt für Schritt. Bsp:

Option Explicit
Sub ExtractName()
Dim strN As String
'Bsp-String zum Testen
strN = "KO-1.1.....1 2 Test.doc"
strN = CStr(Split(strN)(0))                     'linker Teil bis erster Blank
Do While InStr(strN, "..")
strN = Replace(strN, "..", ".")             'mehrfach Punkte löschen
Loop
If Right(strN, 4) = ".doc" Then
strN = Left(strN, Len(strN) - 4)            '".doc" abschneiden
End If
If Right(strN, 2) = ".b" Then
strN = Left(strN, Len(strN) - 2) & "-ZF"    '".b" durch "-ZF" ersetzen
ElseIf Right(strN, 1) = "b" Then
strN = Left(strN, Len(strN) - 1) & "-ZF"    '"b" durch "-ZF" ersetzen
End If
strN = strN & ".jpg"                            'neue Datei-Endung
MsgBox strN
End Sub

Gruß Christian

Anzeige
AW: String-Operationen
22.05.2009 15:31:14
Dirk
Hallo Christian,
danke für deine Antwort!
Ich bin gerade deinen Code am testen. Er läuft super.
Ich habe eine Frage:
Es kommt leider vor, dass leerzeichen auch im vorderen Teil vorkommen. :o(
Wenn die Namen der Worddateien so aussehen:
KO- 1.1.1 b irgendwas.doc oder KO- 1.1.1. irgendwas. doc
Dann sollten die Namen der Bilddateien so aussehen:
KO-1.1.1-ZF.jpg und KO-1.1.1.jpg
Kann man nicht nach der letzten Zahl in der Zahlenkette "1.1.2" suchen und dann nach ".b" oder "b" im Anschluss?
Wenn kein "b" oder " b" oder ".b oder ". b" nach Zahlenfolge auftaucht dann nach der "2" alles weg.
Ansonsten nach b alles weg.
Gruß
Dirk R.
Anzeige
AW: String-Operationen
22.05.2009 19:24:22
Christian
Hallo Dirk,
wenn du hier alle Eventualitäten abfangen willst, brichst du dir mit den Standard Operationen den Hals.
Ich habe jetzt umgeschwenkt auf Regular Expressions. Das können anderen Sprachen wie zB. Perl sehr einfach umsetzen, Microsoft ist wie erwartet auch hier sehr umständlich.
btw: verwende niemals Leerzeichen in einem Datei- oder Verzeichnisnamen. Windows bietet zwar die Möglichkeit das zu tun, man fällt damit aber - spätestens beim scripten - regelmäßig auf die Schnauze.
Teste mal:

Option Explicit
Sub ExtractName()
Dim strName As String, i As Integer
Dim oRegex As Object, oMatch As Object, oItems As Object
'Bsp-String zum Testen
strName = "KO  -- 1...2.   .  ..3..  b irgendwas.doc"
strName = Replace(strName, " ", "")
Set oRegex = CreateObject("vbscript.regexp")
oRegex.Pattern = "(\d+)+\.+(\d+)+\.+(\d+)+\.*(b)?"    'regular expression
Set oMatch = oRegex.Execute(strName)
Set oItems = oMatch(0)
strName = "KO-"
Select Case oItems.Submatches.Count
Case 3, 4
For i = 0 To 2
strName = strName & oItems.Submatches(i) & "."
Next
strName = Left(strName, Len(strName) - 1)
End Select
If oItems.Submatches.Count = 4 Then
If Len(oItems.Submatches(3)) Then strName = strName & "-ZF"
End If
strName = strName & ".jpg"
MsgBox strName
End Sub


Gruß
Christian

Anzeige
AW: String-Operationen
22.05.2009 19:49:32
Christian
kleine Korrektur,
in der Regex waren noch ein paar "+ Zeichen" zuviel reingerutscht.
ersetze die Zeile:

oRegex.Pattern = "(\d+)+\.+(\d+)+\.+(\d+)+\.*(b)?"    'regular expression

durch:


oRegex.Pattern = "(\d+)\.+(\d+)\.+(\d+)\.*(b)?" 'regular expression

Funktionieren tun beide, die letzte ist aber übersichtlicher.
Gruß Christian

AW: String-Operationen
24.05.2009 12:22:07
Dirk
Hallo Christian,
konnte leider erst heute wieder antworten.
Vielen, vielen Dank für deine Mühe!!!!
Werde leider erst morgen alle deine Codes testen können.
Werde auf jeden Fall eine Rückmeldung geben!
--- SUPER, VIELEN DANK ---
Gruß
Dirk
Anzeige
AW: String-Operationen
25.05.2009 10:33:47
Dirk
Hallo Christian,
ich habe nun ausgiebig getestet!!!!
Dein Code funzt soweit super. Leider habe ich festgestellt, dass auch folgender String vorkommen kann:
ZW- 1.1.2.3 b irgendwas.doc
oder auch
WE- 1.1.2.3 irgendwas.doc
Ich habe nun
strName = "KO-" mit strName = Left(strName, 2) & "-" ersetzt. Das scheint zu funktionieren.
Leider berücksichtigt dein Code nicht die 4. Ziffer.
Bei den Beispielen oben soll demnach folgendes rauskommen:
ZW-1.1.2.3-ZF.jpg bzw. WE-1.1.2.3.jpg
Kannst du mir noch einmal helfen?
Gruß
Dirk
Anzeige
AW: String-Operationen
25.05.2009 10:47:24
Dirk
Hallo Christian,
Die Anzahl der Gliederungszahlen sind bei den Worddateien nicht festgelegt.
d.h. folgende Namen könnten vorkommen:
DZ-1.1b irgendwas.doc
oder
ZW-1.1.2 irgendwas.doc
oder
WE- 1.1.2.3 b irgendwas.doc
Ich hoffe du hast noch Lust mir zu helfen, ich bekomme das alleine nicht hin! :o(
Gruß
Dirk
AW: String-Operationen
26.05.2009 20:12:00
Dirk
Hallo Christian,
habe noch experimentiert und es hinbekommen!! :o)
Dank deiner Hilfe!!!!!
Gruß
Dirk R.
AW: String-Operationen regex
26.05.2009 21:27:35
Christian
Hallo Dirk,
ich war mal wieder unterwegs...daher erst jetzt meine Antwort.
schön, wenn du es selbst hinbekommen hast - da lernt man am meisten dabei.
Hier mein Vorschlag:
mit der Variablen "intBlocks" gibst du das Maximimun an Zahlenblöcken an - kann rühig über der _ tatsachlichen maximalen Anzahl liegen. Zahlenblöcke sind jeweils durch einen oder mehrere Punkte getrennt (siehe Bsp-String im Code mit 5 Blöcken). Dann müsste das folgende laufen:

Option Explicit
Sub TestName()
Dim strName As String, strResult As String
Dim intBlocks As Integer
intBlocks = 6       'maximale Anzahl Zahlenblöcke, ggf. erhöhen
'Bsp-String zum Testen
strName = "AB --  1.... 23  .1. 67 ..45b irgendwas.doc"
strResult = ExtractName(strName, intBlocks)
MsgBox strName & vbLf & vbLf & strResult
End Sub
Function ExtractName(strSrc As String, intBlc As Integer)
Dim strRes$, strPtrn$
Dim i%, j%, blnFnd As Boolean
Dim oRegex As Object, oMatch As Object
strPtrn = "^([A-Z]{2}).*?-[^0-9]*?(\d+)"
Set oRegex = CreateObject("vbscript.regexp")
For j = 2 To intBlc
strPtrn = strPtrn & "\.+(\d+)"
Next
For j = intBlc To 2 Step -1
oRegex.Pattern = strPtrn & "\.*(b)?[^0-9]"
If Not blnFnd Then
For Each oMatch In oRegex.Execute(Replace(strSrc, " ", ""))
strRes = oMatch.SubMatches(0) & "-"
For i = 1 To j
strRes = strRes & oMatch.SubMatches(i) & "."
Next
strRes = Left(strRes, Len(strRes) - 1)
If Len(oMatch.SubMatches(j + 1)) Then strRes = strRes & "-ZF"
strRes = strRes & ".jpg"
blnFnd = True
Next
End If
If blnFnd Then Exit For
strPtrn = Left(strPtrn, Len(strPtrn) - 8)
Next
ExtractName = strRes
End Function

Ich hab' das Geraffel jetzt in 'ne Funktion ausgelagert, das hält deinen eigentlichen Code übersichtlicher. Gib mir Bescheid, wie du damitg zurecht kommst. Gruß Christian.

Anzeige
AW: String-Operationen regex
27.05.2009 09:23:48
Dirk
Hallo Christian,
vielen Dank für deine Antwort.
Ich hatte mit deinem Code experimentiert und habe folgendes daraus gemacht:
Option Explicit

Sub ExtractName()
Dim strName As String, i As Integer
Dim oRegex As Object, oMatch As Object, oItems As Object
'Bsp-String zum Testen
strName = "ZW  -- 1..1.2.   .  ..3. b.irgendwas.doc"
strName = Replace(strName, " ", "")
Set oRegex = CreateObject("vbscript.regexp")
oRegex.Pattern = "(\d+)\.+(\d+)\.*(\d+)?\.*(\d+)?\.*(b)?"       'regular expression
Set oMatch = oRegex.Execute(strName)
Set oItems = oMatch(0)
strName = Left(strName, 2) & "-"                                'z.B.: "KO-"
Select Case oItems.Submatches.Count
Case 4, 5
For i = 0 To 3
If oItems.Submatches(i)  "" Then strName = strName & oItems.Submatches(i) & "."
Next
End Select
strName = Left(strName, Len(strName) - 1)
If oItems.Submatches.Count = 5 Then
If Len(oItems.Submatches(4)) Then strName = strName & "-ZF"
End If
strName = strName & ".jpg"
MsgBox strName
End Sub


Der funzt nun nach den ersten Test ganz gut.
Du hast recht, durch das Experimentieren habe ich deinen Code nun etwas besser verstanden. :o)
Werde leider erst heute Abend deinen Code einbauen und testen können. Ich werde mich dann noch mal melden und eine Rückmeldung geben.
Vielen Dank (wiedermal) für deine Mühe.
Gruß
Dirk

Anzeige
AW: String-Operationen regex
28.05.2009 10:14:42
Dirk
Hallo Christian,
ich habe deinen Code nun in meinen vorhandenen eingebaut und getestet. Zuerst gab es Probleme mit einigen Dateien. Es hat dann auch einige Zeit gedauert, bis ich dahinter kam, warum der Code bei einigen Dateien nicht funktioniert hat.
Einige Worddateien hatten am Anfang:
Dz-1.1.1b irgendwas.doc
Mit dem Kleinbuchstaben z hatte der Code ein Problem. Also habe ich erstmal den String mit
strName = UCase(strName) in Großbuchstaben umgewandelt und habe dann in der Funktion
oRegex.Pattern = strPtrn & "\.*(b)?[^0-9]" aus dem kleinen b ein großes B gemacht:
oRegex.Pattern = strPtrn & "\.*(B)?[^0-9]"
Nun läuft der Code spitzenmäßig!!!!!! :o)
Deinen Code in der Funktion verstehe ich zwar noch nicht so ganz, aber irgendwann werde ich schon dahinter kommen.
Vielen, vielen Dank für deine Mühe und deine Geduld. Du hast mir sehr weitergeholfen.
Jetzt kann ich mit meiner Datei endlich loslegen und aus 1000en Worddateien Bilder exportieren und diese auch so zu benennen, wie ich es brauche.
Gruß
Dirk
Anzeige
Danke für die Rückmeldung
28.05.2009 20:46:29
Christian
ich hab das eben noch mal durchgespielt...
bei mir läuft das auch mit kleinen Buchstaben... evt. könnte noch ein
oRegex.IgnoreCase = True
nach dem
Set oRegex = CreateObject("vbscript.regexp")
helfen.
Aber du hast ja 'ne Lösung gefunden.
Viel Erfolg weiterhin
Christian
AW: Danke für die Rückmeldung
28.05.2009 20:55:58
Christian
Korrektur,
jo, du hast recht, mein letzer Test war falsch... aber oRegex.IgnoreCase = True bringt das gewünschte Ergebnis. Oder aber deine Lösung...
Gruß
Christian
AW: Danke für die Rückmeldung
29.05.2009 09:38:41
Dirk
Hallo Christian,
danke für deine Rückmeldung.
Werde nun eifrig Bilder exportieren und benennnen und dies alles "automatisch".
Dank dir und Sepp kann ich nun vernünftig und effizient arbeiten, ohne jede Worddatei einzeln zu öffnen, die Bilder einzeln zu speichern und im Anschluss diese nach Gliederungsnummern so zu benennen, so wie ich es brauche. Dank dir kann ich nun den String so filtern, dass alles Überflüssige aus dem String gelöscht wird und nur das Wesentliche erhalten bleibt.
Bei meheren Tausend Worddateien ist das eine imense Arbeitserleichterung!!!!! :o)
Ihr seid meine Rettung!!!!
DANKE!!!DANKE!!!DANKE!!!
Gruß
Dirk
AW: String-Operationen
22.05.2009 16:30:56
Dirk
Hallo Christian,
ich habe noch gebastelt!!!!
Ich glaube ich habe es hinbekommen (Dank deiner Hilfe!)
Ich habe folgendes gemacht:

Sub AusschnittAusModul
Do While strPic  ""
'String Filtern
Dim strN As String
strN = Left(objFiles(lngIndex).Name, InStrRev(objFiles(lngIndex).Name, ".") + 1)
strN = Replace(Replace(Replace(strN, "- ", "-"), " b", "b "), " -", "-")
strN = CStr(Split(strN)(0))                     'linker Teil bis erster Blank
If Right(strN, 4) = ".doc" Then
strN = Left(strN, Len(strN) - 4)            '".doc" abschneiden
End If
If Right(strN, 2) = ".b" Then
strN = Left(strN, Len(strN) - 2) & "-ZF"    '".b" durch "-ZF" ersetzen
ElseIf Right(strN, 1) = "b" Then
strN = Left(strN, Len(strN) - 1) & "-ZF"    '"b" durch "-ZF" ersetzen
End If
Do While InStr(strN, "..")
strN = Replace(strN, "..", ".")             'mehrfach Punkte löschen
Loop
Name Environ("Temp") & "\dummy-Dateien\" & strPic As strPicPath & strN & _
IIf(lngCnt > 0, "[" & lngCnt + 1 & "]", "") & Mid(strPic, InStrRev(strPic, "." _
))
Sleep 500
Kill strPic
strPic = Dir
lngCnt = lngCnt + 1
Loop
End Sub


Die bisherigen Tests verliefen so, wie ich es mir vorstelle.
Vielen Dank für deine Hilfe!!!!!!!!!
Gruß
Dirk R.

AW: String-Operationen
22.05.2009 20:07:03
Christian
Hallo,
wenn das ausreicht, OK.
Bei 2 Leerzeichen nach dem "KO" wird's aber schon wieder nichts. Ebenso bei zB zwei Punkten vor dem "b".
Wenn du bei dem Code bleibst, dann kannst du zumindest das ".doc" abschneiden weglassen, das passiert ja schon ein Zeile drüber bei "Left..."
Ebenso würde ich ich nicht in der" Do - Schleife" die Variable "strN" immer neu definieren, sondern hier mit strN = "" den String wieder zurücksetzen.
Gruß Christian

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige