Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Dateiverknüpfungen in VBA erstellen

Dateiverknüpfungen in VBA erstellen
01.03.2006 22:24:49
frigo
Hallo zusammen,
ich möchte mit einem Makro eine ganze Ordnerstruktur inkl. Unterordner durchlaufen und zu allen enthaltenen Dateien Verknüpfungen in einer anderen Ordnerstruktur erzeugen.
Ich finde allerdings nirgends den Befehl zum Kopieren einer Verknüpfung.
Also das Pendant zu FileCopy.
Kann mir vielleicht vielleicht jemand auf die Spünge helfen?
Bsp:
aus der folgenden Struktur
Ordner 1
- Datei Alpha
- Datei Beta
soll folgendes erzeugt werden:
Ordner 4711
- Verknüpfung zu Datei Alpha im Ordner 1
- Verknüpfung zu Datei Beta im Ordner 1
Vielen Dank,
Frigo
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateiverknüpfungen in VBA erstellen
01.03.2006 22:55:15
Detlef
Hi,
dazu brauchst du z.B. WSH, mit VBA-Bordmitteln gehts nicht.
mfg Detlef
AW: Dateiverknüpfungen in VBA erstellen
01.03.2006 22:56:45
Ramses
Hallo
Das ist mal für einen Standardordner ohne Unterverzeichnisse zu berücksichtigen, da du keinen Hinweis darauf gibst, wie die Zielstruktur aussehen soll
Option Explicit

Sub Create_Shortcut_in_specific_Target_Folder()
    'by Ramses
    Dim myFSO As Object
    Dim myFSOShell As Object
    Dim mySourceFolder As String, myTargetFolder As String
    Dim myFSOFolder As Object, myFSOFiles As Object, tmpName As String
    Dim myShortCut As Object
    Dim mySourceFile As Object, myFileExt As String
    'Variablen füllen
    mySourceFolder = "C:\Ordner1"
    myTargetFolder = "C:\Ordner2"
    myFileExt = ".xls"
    '*************************
    'Ab hier nichts mehr ändern
    Set myFSO = CreateObject("Scripting.FileSystemObject")
    Set myFSOShell = CreateObject("WScript.Shell")
    'Verzeichnis und Unterverzeichnis anlegen
    ChDrive "C:"
    If Not myFSO.folderexists(myTargetFolder) Then
        On Error Resume Next
        MkDir myTargetFolder
    End If
    Set myFSOFolder = myFSO.getfolder(mySourceFolder)
    For Each mySourceFile In myFSOFolder.Files
        Debug.Print Right(mySourceFile, 4)
        If Right(mySourceFile, 4) = myFileExt Then
            tmpName = Left(mySourceFile, Len(mySourceFile) - 4)
            tmpName = Right(tmpName, Len(tmpName) - InStrRev(tmpName, "\", -1))
            Set myShortCut = myFSOShell.CreateShortcut(myTargetFolder & "\" & "LINK_" & tmpName & ".lnk")
            With myShortCut
                'Fenstertyp beim öffnen
                ' 4=Normal 3=Maximized 7=Minimized
                .windowstyle = 4
                .iconlocation = mySourceFile
                ' o der alternativ ein anderes Icon
                '.IconLocation = "C:\graph9.ico"
                .Targetpath = Left(mySourceFile, Len(mySourceFile) - 4) & myFileExt
                'Speichern
                .Save
            End With
        End If
    Next
End Sub

Gruss Rainer
Anzeige
AW: Dateiverknüpfungen in VBA erstellen
01.03.2006 23:02:37
frigo
Wow, super, vielen Dank!
Frigo
AW: Dateiverknüpfungen in VBA erstellen
02.03.2006 07:49:41
Andreas-we
Hallo Ramses,
habe gerade diesen Beitrag entdeckt.
Dein Makro ist auch fast ganz genau die Lösung für eine Anwendung von mir.
Nur benötige ich, dass nicht nur XLS-Dateien verlinkt werden, sondern alle Formate.
Kannst Du das bitte in dein Makro noch einbauen?
Gruß
Andreas
Anzeige
AW: Dateiverknüpfungen in VBA erstellen
02.03.2006 08:24:42
Ramses
Hallo
... aber bitte sehr:
Option Explicit

Sub Create_Shortcut_in_specific_Target_Folder()
    'by Ramses
    Dim myFSO As Object
    Dim myFSOShell As Object
    Dim mySourceFolder As String, myTargetFolder As String
    Dim myFSOFolder As Object, myFSOFiles As Object, tmpName As String
    Dim myShortCut As Object
    Dim mySourceFile As Object, myFileExt As String
    'Variablen füllen
    mySourceFolder = "C:\Ordner1"
    myTargetFolder = "C:\Ordner2"
    '*************************
    'Ab hier nichts mehr ändern
    Set myFSO = CreateObject("Scripting.FileSystemObject")
    Set myFSOShell = CreateObject("WScript.Shell")
    'Verzeichnis und Unterverzeichnis anlegen
    ChDrive "C:"
    If Not myFSO.folderexists(myTargetFolder) Then
        On Error Resume Next
        MkDir myTargetFolder
    End If
    Set myFSOFolder = myFSO.getfolder(mySourceFolder)
    For Each mySourceFile In myFSOFolder.Files
        tmpName = mySourceFile
        tmpName = Right(tmpName, Len(tmpName) - InStrRev(tmpName, "\", -1))
        Set myShortCut = myFSOShell.CreateShortcut(myTargetFolder & "\" & "LINK_" & tmpName & ".lnk")
        With myShortCut
            'Fenstertyp beim öffnen
            ' 4=Normal 3=Maximized 7=Minimized
            .windowstyle = 4
            .iconlocation = mySourceFile
            ' o der alternativ ein anderes Icon
            '.IconLocation = "C:\graph9.ico"
            .Targetpath = mySourceFile
            'Speichern
            .Save
        End With
    Next
End Sub

Gruss Rainer
Anzeige
AW: Dateiverknüpfungen in VBA erstellen
02.03.2006 08:31:50
Andreas-we
Opti!
Danke.
Andreas
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dateiverknüpfungen in VBA erstellen


Schritt-für-Schritt-Anleitung

Um eine Verknüpfung zu einer Datei in Excel mit VBA zu erstellen, kannst Du folgendes Makro verwenden. Achte darauf, dass Du WSH (Windows Script Host) aktiviert hast, da dies für die Erstellung von Verknüpfungen notwendig ist.

Hier ist ein Beispielmakro:

Option Explicit

Sub Create_Shortcut_in_specific_Target_Folder()
    Dim myFSO As Object
    Dim myFSOShell As Object
    Dim mySourceFolder As String, myTargetFolder As String
    Dim myFSOFolder As Object, mySourceFile As Object
    Dim myShortCut As Object
    Dim tmpName As String

    ' Variablen füllen
    mySourceFolder = "C:\Ordner1"
    myTargetFolder = "C:\Ordner2"

    ' Objekte erstellen
    Set myFSO = CreateObject("Scripting.FileSystemObject")
    Set myFSOShell = CreateObject("WScript.Shell")

    ' Verzeichnis anlegen, wenn es nicht existiert
    If Not myFSO.folderexists(myTargetFolder) Then
        MkDir myTargetFolder
    End If

    Set myFSOFolder = myFSO.getfolder(mySourceFolder)

    For Each mySourceFile In myFSOFolder.Files
        tmpName = mySourceFile.Name
        Set myShortCut = myFSOShell.CreateShortcut(myTargetFolder & "\" & "LINK_" & tmpName & ".lnk")

        With myShortCut
            .TargetPath = mySourceFile.Path
            .Save
        End With
    Next
End Sub

Dieses Makro durchläuft alle Dateien im angegebenen Quellordner und erstellt eine Verknüpfung in dem Zielordner.


Häufige Fehler und Lösungen

  1. Fehler: "Objekt nicht gefunden"

    • Überprüfe, ob der Quellordner korrekt angegeben ist und existiert. Achte auch darauf, dass der Pfad die richtigen Berechtigungen hat.
  2. Fehler: "Verknüpfung kann nicht erstellt werden"

    • Stelle sicher, dass der Zielordner existiert oder dass das Makro die Berechtigung hat, einen neuen Ordner zu erstellen.

Alternative Methoden

Neben dem oben beschriebenen VBA-Ansatz kannst Du auch Excel-Funktionen verwenden, um Verknüpfungen zu erstellen, allerdings sind diese weniger flexibel. Eine Alternative ist das Erstellen von Hyperlinks direkt in Excel:

  1. Wähle die Zelle aus, in der Du die Verknüpfung erstellen möchtest.
  2. Gehe zu Einfügen > Link und wähle den gewünschten Dateipfad aus.

Praktische Beispiele

Ein weiteres Beispiel für ein Excel VBA-Makro, das alle Dateiformate verknüpfen kann, sieht so aus:

Sub Create_All_Shortcuts()
    Dim myFSO As Object
    Dim myFSOShell As Object
    Dim mySourceFolder As String, myTargetFolder As String
    Dim myFSOFolder As Object, mySourceFile As Object
    Dim myShortCut As Object

    mySourceFolder = "C:\Ordner1"
    myTargetFolder = "C:\Ordner2"

    Set myFSO = CreateObject("Scripting.FileSystemObject")
    Set myFSOShell = CreateObject("WScript.Shell")

    If Not myFSO.folderexists(myTargetFolder) Then
        MkDir myTargetFolder
    End If

    Set myFSOFolder = myFSO.getfolder(mySourceFolder)

    For Each mySourceFile In myFSOFolder.Files
        Set myShortCut = myFSOShell.CreateShortcut(myTargetFolder & "\" & "LINK_" & mySourceFile.Name & ".lnk")
        With myShortCut
            .TargetPath = mySourceFile.Path
            .Save
        End With
    Next
End Sub

Tipps für Profis

  • Verwende die excel vba tastenkombination, um Dein Makro schneller auszuführen. Du kannst eine Tastenkombination für das Makro festlegen, um die Effizienz zu steigern.
  • Achte darauf, dass Du bei der Erstellung von Verknüpfungen in großen Ordnerstrukturen immer die Performance im Auge behältst. Überlege, ob es sinnvoll ist, die Verknüpfungen in Batch-Prozessen zu erstellen.

FAQ: Häufige Fragen

1. Wie kann ich ein Excel-Makro mit einer Tastenkombination starten?
Du kannst eine Tastenkombination zuweisen, indem Du im VBA-Editor unter Extras > Makros das gewünschte Makro auswählst und auf Optionen klickst. Dort kannst Du eine Tastenkombination festlegen.

2. Kann ich auch Verknüpfungen zu Dateien in Unterordnern erstellen?
Ja, Du kannst das Makro so anpassen, dass es auch Unterordner durchläuft, indem Du eine rekursive Funktion verwendest, die alle Dateien in den Unterordnern ebenfalls verarbeitet.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige