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

Viele Verknüpfungen anlegen

Viele Verknüpfungen anlegen
18.04.2021 13:12:55
Sergej
Hallo Leute,
ich muss in 20 Verzeichnisse für jeden Benutzer eine bestimmte Verknüpfungen mit MyShortcut.Arguments anlegen. Es sind ca. 280 Benutzer.
Beispiel Verzeichnisse:
P:\Bodo GmbH\BA-SAR16\Daten\Users\profil
P:\Mustermann GmbH\CH-MOS02\Daten\Users\profil
P:\Ultimo\DE-WUP06\Daten\Users\profil
usw.
In oben aufgeführten Verzeichnissen sollen vorher alle Verknüpfungen gelöscht werden. Dann möchte ich dort per VBA die benutzerspezifische Verknüpfungen mit diesem Makro erstellen.

Sub shortcut()
Dim WSHShell As Object, MyShortcut
Dim strDatei As String, strName As String
strDatei = "C:\Program Files (x86)\Nova\nova.exe"
strName = "P:\Bodo GmbH\BA-SAR16\Daten\Users\profil\Nova Sergej.lnk"
Set WSHShell = CreateObject("WScript.Shell")
Set MyShortcut = WSHShell.CreateShortcut(strName)
MyShortcut.TargetPath = strDatei
MyShortcut.WorkingDirectory = "C:\Program Files (x86)\Nova\"
MyShortcut.Arguments = "-upSergej"
MyShortcut.WindowStyle = 0 ' Maximiert
MyShortcut.Description = "Userprofil"
MyShortcut.Save
Set MyShortcut = Nothing
Set WSHShell = Nothing
End Sub
Aktuell habe ich im Code strName und MyShortcut.Arguments fix, sowie "Sergej" an zwei Stellen (siehe in fett) fix eingetragen. Diese müssen dynamisch befüllt werden.
Die Benutzernamen können aus Verzeichnissen entnommen werden:
P:\Bodo GmbH\BA-SAR16\Daten\Users\users
P:\Mustermann GmbH\CH-MOS02\Daten\Users\users
P:\Ultimo\DE-WUP06\Daten\Users\users
Dort habe ich Unterverzeichnisse = Benutzername liegen. Beispiele:
P:\Bodo GmbH\BA-SAR16\Daten\Users\users\Sergej
P:\Bodo GmbH\BA-SAR16\Daten\Users\users\Mustermann
Ausnahme Verzeichnisse sind: "_DATA_" und "_LOG_". Für diese beiden soll keine Verknüpfung erstellt werden.
Wie kann ich bitte dies in obigem Code einbinden? Herzlichen Dank im Voraus!
Beste Grüße,
Sergej

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Viele Verknüpfungen anlegen
18.04.2021 16:55:23
Nepumuk
Hallo Sergej,
mal step by step.
1. Wir brauche also ein Makro das im Laufwerk P nach ...\Users\users\* sucht und dann die Benutzernamen ausliest außer "_DATA_" und "_LOG_"?
2. In den profil-Ordnern alle Verknüpfungen löschen?
3. In den profil-Ordnern dann die neue Verknüpfung mit dem entsprechenden Benutzernamen anlegen?
Sehe ich das richtig?
Gruß
Nepumuk
AW: Viele Verknüpfungen anlegen
18.04.2021 19:47:05
Sergej
Hallo Nepumuk,
genauso wie du es geschrieben hast.
Beste Grüße,
Sergej
AW: Viele Verknüpfungen anlegen
19.04.2021 11:32:50
Nepumuk
Hallo Sergej,
teste mal:

Option Explicit
Public Sub CreateShortcuts()
Const FOLDER_PATH As String = "P:\"
Dim astrFolders() As String, strPath As String
Dim ialngFolders As Long, ialngPath As Long
Dim avntTemp As Variant
Dim objShell As Object, objFolder As Object, objItem As Object
astrFolders = GetFolders(FOLDER_PATH)
Set objShell = CreateObject(Class:="Shell.Application")
For ialngFolders = LBound(astrFolders) To UBound(astrFolders)
avntTemp = Split(astrFolders(ialngFolders), "\")
If UBound(avntTemp) > 3 Then
If avntTemp(UBound(avntTemp) - 1) = "profil" And _
avntTemp(UBound(avntTemp) - 2) = "Users" Then
strPath = astrFolders(ialngFolders)
Set objFolder = objShell.Namespace(CVar(strPath))
For Each objItem In objFolder.Items
If objItem.IsLink Then Call Kill(PathName:=objItem.Path)
Next
ElseIf avntTemp(UBound(avntTemp) - 2) = "users" And _
avntTemp(UBound(avntTemp) - 3) = "Users" Then
If avntTemp(UBound(avntTemp) - 1)  "_DATA_" And _
avntTemp(UBound(avntTemp) - 1)  "_LOG_" Then
Call SetShortcut(strPath, avntTemp(UBound(avntTemp) - 1))
End If
End If
End If
Next
Set objFolder = Nothing
Set objShell = Nothing
End Sub
Private Sub SetShortcut(ByVal pvstrPath As String, ByVal pvstrName As String)
Const FILE_PATH As String = "C:\Program Files (x86)\Nova\nova.exe"
Const FOLDER_PATH As String = "C:\Program Files (x86)\Nova\"
Dim objWSHShell As Object, objShortcut As Object
Dim strPath As String
strPath = pvstrPath & "Nova " & pvstrName & ".lnk"
Set objWSHShell = CreateObject("WScript.Shell")
Set objShortcut = objWSHShell.CreateShortcut(strPath)
With objShortcut
.TargetPath = FILE_PATH
.WorkingDirectory = FOLDER_PATH
.Arguments = "-up" & pvstrName
.WindowStyle = 0 ' Maximiert
.Description = "Userprofil"
.Save
End With
Set objShortcut = Nothing
Set objWSHShell = Nothing
End Sub
Private Function GetFolders(ByVal pvstrPath As String) As String()
Dim astrFolders() As String
Dim strFolder As String, strPath As String
Dim ialngIndex1 As Long, ialngIndex2 As Long
ReDim Preserve astrFolders(ialngIndex1)
astrFolders(ialngIndex1) = pvstrPath
ialngIndex1 = 1
ialngIndex2 = 1
strPath = pvstrPath
Do
strFolder = Dir$(PathName:=strPath & "*", Attributes:=vbDirectory)
Do Until strFolder = vbNullString
If strFolder  "." And strFolder  ".." Then
If GetAttr(PathName:=strPath & strFolder) And vbDirectory Then
ReDim Preserve astrFolders(0 To ialngIndex1)
astrFolders(ialngIndex1) = strPath & strFolder & "\"
ialngIndex1 = ialngIndex1 + 1
End If
End If
strFolder = Dir$
Loop
If ialngIndex1 = ialngIndex2 Then Exit Do
strPath = astrFolders(ialngIndex2)
ialngIndex2 = ialngIndex2 + 1
Loop
GetFolders = astrFolders
End Function
Gruß
Nepumuk
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige