Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1500to1504
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

PDF via VBA umbennen

PDF via VBA umbennen
08.07.2016 09:28:35
Thomas
Hallo Forumsgemeinde,
ich möchte mir viel Arbeit ersparen aber leider reichen meine VBA-Kenntnisse nicht aus.
Ich habe eine Tabelle in der eine vielzahl von Nachweisen gepflegt werden. (Beispiel https://www.herber.de/bbs/user/106851.xlsm)
Hierzu werden auch Dokumente einescannt (*.pdf) und verlinkt. Die Scanner vergeben allerdings kryptische Dateinamen, welche keine Aussagekraft haben. Bisher ändere ich alle Dateinamen durch manuelles umbenennen verschiebe die Dateien und setze in der Tabelle einen Hyperlink auf die Datei.
Meine Idee ist nun via VBA einen Dialog zu öffnen in dem ich die Dateien umbenennen kann. Der Dateiname sollte sich wie folgt zusammensetzen
JJJJ_MM_TT_Nachname_Vorname_Kürzel
In der Beispieltabelle wäre das also
2016_01_01_Mustermann_Max_TTL1.pdf
2017_05_02_Mustermann_Max_TTL2.pdf
2018_05_01_Musterfrau_Marion_TTL3.pdf
Der Quellordner (eingescannte Dateien) befindet sich immer im Stammverzeichnis und heißt "Import".
Die Zielordner befinden sich auch immer im Stammverzeichnis und sollen auswählbar sein.
Beim Start des Dialogs sollte das erste Dokument im Quellordner ausgewählt, der Name (per Dropdown?) abgefragt, das Datum aus der Schnittstelle Name / Kürzel geholt der Zielordner ausgewählt werden, das Dokument umbenannt und in den Zielordner verschoben werden. Anschließend wiederholt sich der Vorgang für das nächste Dokument, wobei die Einstellung (Kürzel und Zielordner) beibehalten werden sollte. Sobald der Quellordner leer ist soll sich der Dialog schließen.
Optimal wäre, wenn automatisch in der Datumszelle ein Hyperlink auf das umbenannte Dokument gesetzt wird.
Wenn machbar sollte bei der Namensauswahl die Namen bei denen kein Datum hinterlegt ist nicht erscheinen.
Ich denke das ist eine harte Nuss und ich weiß nicht ob das überhaupt machbar ist.
Viele Grüße,
Thomas

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PDF via VBA umbennen
08.07.2016 09:59:23
Fennek
Hallo,
Dateien umbenenne geht mit vba

NAME alterName AS neuerName
Den neuen Dateiname kann man mit String-Befehlen "zusammelbeasteln", z.B.

cells(1,1) = "Max Mustermann"
neuerDateiName = format(now, "yyyy-mm-dd") & cells(1,1)
mfg

AW: PDF via VBA umbennen
08.07.2016 11:09:42
Thomas
Hallo,
erst mal Danke für die Antwort.
Das Makro zum umbenennen der Dateien und zusammensetzen des Dateinamens bekomme ich schon hin. Mein Prolem sind die Variablen und Bedingungen.
Gruß,
Thomas

AW: PDF via VBA umbennen
08.07.2016 10:09:26
UweD
Hallo Thomas
anders herum wäre es einfacher..
- in die Tabelle auf einen Namen clicken (z.B. per rechte Maustaste)
- Dann im sich öffnenden Dialogfenster die Datei auswählen
- beim ersten mal das Zielverzeichnis auswählen
dann automatisch:
- PDF umbenennen [alle in der Zeile befindlichen Datum(s) abarbeiten],
- verschieben
- und Hyperlink auf den Datum(s) selten
Wäre einfacher zu programmieren.
Wäre das so akzeptabel?
Gruß UweD

Anzeige
AW: PDF via VBA umbennen
08.07.2016 11:15:15
Thomas
Hallo UweD,
erst mal vielen Dank für die Antwort.
Das Zeilenweise abarbeiten ist leider nicht möglich, da sich die Dateien die umbenannt werden sollen nicht von derselben Person sind, wohl aber derselben Kategorie (z.B. TTL1) entsprechen.
Eher möglich wäre jeder Spalte ein eigenes Makro zu verpassen.
Gruß,
Thomas

AW: Nachfrage..
08.07.2016 11:47:17
UweD
Ich nochmal
habe noch Verständnisprobleme
Wenn du also in einer Zeile (hier z.B. in Mustermann Max) in Spalte TTL1 rechtsclicken würdest, dann dazu eine Passende Datei auswählen und die wie angegeben benennen?
Wieviele TTL gibt es? nur die 3, oder Variabel?
LG UweD

Anzeige
AW: Nachfrage..
08.07.2016 13:40:23
Thomas
Hallo UweD,
Ich Versuchs noch mal. Ich habe eine ganze Menge an Spalten wobei die Systematik immer gleich ist.
Zum Verständnis.
Eine Zahl von Personen macht eine (die selbe) Fortbildung. Ich erhalte also 20 Fortbildungsnachweise. Diese scanne ich ein. Das Ablaufdatum der Zertifikate trage ich in die entsprechende Spalte ein. Z.B. TTL1.
Dann benenne ich die eingescannten Dateien um, speicher sie in dem entsprechenden Zielordner und verlinke sie anschließend in der Tabelle. Das ist immer sehr mühsam. Diesen Vorgang würde ich gern vereinfachen. Das ist die Idee.
Ein einfaches Makro zum umbenennen der Datei bekomme ich hin, aber nicht mit den ganzen Variablen. Wobei wenn ich jeder Spalte ein eigenes Makro zuweise, wären die Variablen ja "nur" Name und Datum.
Starten würde ich das Makro lieber über einen Button / Steuerelement als es mit einem Klick in eine Zelle auszulösen. Auch hier wäre es kein Problem jede Spalte mit einem eigenen Button zu belegen. Es müssten dann ja auch immer nur die Zellbezüge in dem Makro angepasst werden.
Ich hoffe das hilft beim Verständnis.
Viele Grüße,
Thomas

Anzeige
AW: Nachfrage..
08.07.2016 13:44:13
UweD
das hat sich gerade überschnitten.
Sieh dir mal das Makro an..

AW: Nachfrage..
08.07.2016 13:40:54
UweD
Hallo nochmal
wenn es passt, dann ok. Sonst kannst du sicherlich Teile davon verwenden
- Rechtsclick auf den Tabellenblattreiter
- Code anzeigen
- Diesen Code dort reinkopieren
Wenn du nun in einer Zelle C9:F xx rechtsclickst, dann wird das makro ausgeführt
Beim ersten mal wird der Zielpfad abgefragt und in A1 gemerkt.
Wenn du den mal ändern möchtest einfach A1 löschen
...
Option Explicit 
 
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 
    If Not Intersect(Range("C:E"), Target) Is Nothing Then 
        Dim Zeile As Double 
        Dim Merker As Range 
        Set Merker = Cells(1, 1) 'Zelle A1 für Zielpfadmerker ggf ändern 
        If Target.Count = 1 Then 
            Zeile = Target.Row 
            If Zeile > 8 And Target.Value <> "" Then 
                Cancel = True 
                If Target.Hyperlinks.Count <> 0 Then ' Hyperlink schon vorhanden 
                    JaNein = MsgBox("Hyperlink schon zugeordnet" & vbLf & _
                        " Löschen?", vbCritical + vbYesNo, "Hyperlink") 
                    If JaNein = vbYes Then 
                        Target.Hyperlinks.Delete 
                    Else 
                        Exit Sub 
                    End If 
                End If 
                Dim Dlg As FileDialog 
                Dim NName As String, VName As String, Ext As String 
                Dim ZielPf As String, AltNam As String, NeuNam As String 
                NName = Cells(Zeile, 1) 
                VName = Cells(Zeile, 2) 
                If Merker = "" Then 'Zielpfad angeben,und merken 
                    Set Dlg = Application.FileDialog(msoFileDialogFolderPicker) 
                    With Dlg 
                        .AllowMultiSelect = False 
                        .InitialFileName = "C:\" 
                        .Title = "Zielverzeichnis" 
                    End With 
                    If Dlg.Show = True Then 
                        ZielPf = Dlg.SelectedItems(1) & "\" 
                        Merker = ZielPf 
                    End If 
                Else 'Zielpfad schon gesetzt 
                    ZielPf = Merker 
                End If 
                Ext = ".pdf" 
                Set Dlg = Application.FileDialog(msoFileDialogFilePicker) 'Datei wählen 
                With Dlg 
                    .AllowMultiSelect = False 
                    .InitialFileName = "C:\Import\*" & Ext 
                    .InitialView = msoFileDialogViewDetails 
                    .Title = "Datei auswählen" 
                End With 
                If Dlg.Show = True Then 'umbenennen , verschieben 
                    AltNam = Dlg.SelectedItems(1) 
                    NeuNam = Format(Target, "YYYY_MM_DD_") & NName & "_" & _
                        VName & "_" & Cells(6, Target.Column) & Ext 
                    FileCopy AltNam, ZielPf & NeuNam 
                    Kill AltNam 
                    'Hyperlink setzen 
                    Target.Hyperlinks.Add Anchor:=Target, Address:=ZielPf & NeuNam 
                Else 
                    MsgBox "Keine gültige Datei" 
                    Exit Sub 
                End If 
            End If 
        Else 
            Cancel = True 
            MsgBox "Bitte zur eine Zelle auswählen!" 
            Exit Sub 
        End If 
    End If 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Gruß UweD

Rückmeldung wäre nett

Anzeige
AW: Nachfrage..
08.07.2016 14:06:41
Thomas
Hallo UweD,
Ich melde mich auf jeden Fall. Werde aber erst Anfang der Woche dazu kommen den Code auszuprobieren.
Trotzdem schon mal besten Dank für Deine Hilfe!
Gruß und ein schönes Wochenende,
Thomas

AW: Nachfrage..
11.07.2016 08:55:23
Thomas
Hallo UweD,
danke für Deine Mühe. Bei einem Rechtsklick habe ich folgende Fehlermeldung bekommen.
"Fehler beim Kompilieren: Variable nicht definiert."
Nachdem ich JaNein als Variable definiert habe, klappt es aber wunderbar.
Er legt allerdings alle Dokumente in demselben Ordner ab. Ist es auch möglich für jede Kategorie einen eigenen Zielordner anzugeben?
Auf jeden Fall ist der Code schon eine super Arbeitsersparnis!!! Besten Dank.
Viele Grüße,
Thomas

Anzeige
AW: Nachfrage..
11.07.2016 11:04:18
UweD
Hallo nochmal
habe die Kategorie noch eingebaut; und das Datumformat wird wieder gesetzt.
Option Explicit 
  
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 
    On Error GoTo Fehler 
    If Not Intersect(Range("C:E"), Target) Is Nothing Then 
        Dim Zeile As Double 
        Dim Merker As Range, JaNein 
        Set Merker = Cells(1, 1) 'Zelle A1 für Zielpfadmerker ggf ändern 
        If Target.Count = 1 Then 
            Zeile = Target.Row 
            If Zeile > 8 And Target.Value <> "" Then 
                Cancel = True 
                If Target.Hyperlinks.Count <> 0 Then ' Hyperlink schon vorhanden 
                    JaNein = MsgBox("Hyperlink schon zugeordnet" & vbLf & _
                        " Löschen?", vbCritical + vbYesNo, "Hyperlink") 
                    If JaNein = vbYes Then 
                        Target.Hyperlinks.Delete 
                        Target.NumberFormat = "MM/DD/YYYY" 
                    Else 
                        Exit Sub 
                    End If 
                End If 
                Dim Dlg As FileDialog 
                Dim NName As String, VName As String, Kat As String, Ext As String 
                Dim ZielPf As String, AltNam As String, NeuNam As String 
                NName = Cells(Zeile, 1) 
                VName = Cells(Zeile, 2) 
                Kat = Cells(6, Target.Column) 
                If Merker = "" Then 'Zielpfad angeben,und merken 
                    Set Dlg = Application.FileDialog(msoFileDialogFolderPicker) 
                    With Dlg 
                        .AllowMultiSelect = False 
                        .InitialFileName = "C:\" 
                        .Title = "Zielverzeichnis" 
                    End With 
                    If Dlg.Show = True Then 
                        ZielPf = Dlg.SelectedItems(1) & "\" 
                        Merker = ZielPf 
                    End If 
                Else 'Zielpfad schon gesetzt 
                    ZielPf = Merker 
                End If 
                 
                'Unterverveichnis für Kategorie Prüfen, sonst anlegen 
                ZielPf = ZielPf & Kat & "\" 
                If Dir(ZielPf, vbDirectory) = "" Then 
                    MkDir ZielPf 
                End If 
                 
                Ext = ".pdf" 
                Set Dlg = Application.FileDialog(msoFileDialogFilePicker) 'Datei wählen 
                With Dlg 
                    .AllowMultiSelect = False 
                    .InitialFileName = "C:\Import\*" & Ext 
                    .InitialView = msoFileDialogViewDetails 
                    .Title = "Datei auswählen" 
                End With 
                If Dlg.Show = True Then 'umbenennen , verschieben 
                    AltNam = Dlg.SelectedItems(1) 
                    NeuNam = Format(Target, "YYYY_MM_DD_") & NName & "_" & _
                        VName & "_" & Kat & Ext 
                    FileCopy AltNam, ZielPf & NeuNam 
                    Kill AltNam 
                    'Hyperlink setzen 
                    Target.Hyperlinks.Add Anchor:=Target, Address:=ZielPf & NeuNam 
                Else 
                    MsgBox "Keine gültige Datei" 
                    Exit Sub 
                End If 
            End If 
        Else 
            Cancel = True 
            MsgBox "Bitte zur eine Zelle auswählen!" 
            Exit Sub 
        End If 
    End If 
    Err.Clear 
Fehler: 
    If Err.Number <> 0 Then MsgBox "Fehler: " & _
        Err.Number & vbLf & Err.Description: Err.Clear 
End Sub 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Gruß UweD

Anzeige
AW: Nachfrage..
11.07.2016 11:33:23
Thomas
Hallo UweD,
absolute Klasse. Genauso habe ich es mir vorgestellt!
Vielen Dank für Deine Hilfe und beste Grüße,
Thomas

AW: gern geschehen owt
11.07.2016 11:55:21
UweD

AW: Nachfrage..
11.07.2016 09:24:10
Thomas
Hallo UweD,
noch ein kleines Problem. Beim "Uberschreiben" eines Hyperlinks, Programmzeile "Target.Hyperlinks.Delete" ändert er das Zellformat von Datum auf Zahl.
Kann ich das unterbinden?
Viele Grüße,
Thomas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige