Anzeige
Archiv - Navigation
852to856
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
852to856
852to856
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Hyperlinks aktualisieren / eintragen

Hyperlinks aktualisieren / eintragen
06.03.2007 23:40:52
Bruno von Hochmeister

Hallo zusammen,
für die Datenbank in unserer Firma muss ich die Hyperlink-Liste aktualisieren. Im Prinzip ist relativ einfach, aber bei 1000 Links, ist das sehr viel Arbeit. Daher die Frage ob man das mit einem einfachen Makro machen kann, dass die Links automtisch anpasst.
Die Datenbank ist folgendermaßen aufgebaut. In Spalte A befinden sich die fortlaufenden Nummern (0001-1234), in Spalte E der korrespondierende Hyperlink, der auf den Ordner XYZ_0001 verweist, wo die zugehörigen Daten abgelegt sind. Dieser soll den gleichen Namen haben wie die Nummer.
Jetzt besteht die Schwierigkeit, dass die Datenordner aus Gründen der Übersicht in 50er Gruppen (0001-0050, 0051-0100,...) eingeteilt sind, und dass der Link über das globale Verzeichnis im Firmennetzwerk beschrieben werden soll. Also "\\server1\laufwerka\IBM....\0001-0050\XYZ_0002" (s.Bild in Tabelle "Datenstruktur") anstatt über lokale Linkbeschreibung (nur "Datenbank\0001-0050\XYZ_0002" in Linkadresse).
Wäre über Hilfe sehr dankbar.
Gruß
Bruno
Beispieldatei: https://www.herber.de/bbs/user/40899.xls

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hyperlinks aktualisieren / eintragen
07.03.2007 09:42:00
Rolf Beißner
Hallo Bruno,
schau mal, ob das so passt.
fG
Rolf
Option Explicit
Sub korrespondierendeLinks()
Const strPfad$ = "IBM_Preload(C:)\A\Ort\Abteilung\Datenbank\" 'Ggfs. ANPASSEN
Const n% = 1234 'Ggfs. ANPASSEN
Dim i%, R%, k%, m%
Dim strFile$, strPart$
'Sofern Test ok, entfallen die nächsten beiden Zeilen
Sheets.Add
ActiveSheet.Tab.Color = vbRed
For i = 1 To n
R = i Mod 50
If R = 0 Then
k = k + 1
m = k * 50
End If
strFile = "XYZ_" & Application.WorksheetFunction.Text(m + R, "0000")
strPart = Application.WorksheetFunction.Text(m + 1, "0000") & "-" _
& Application.WorksheetFunction.Text(m + 50, "0000")
With Cells(i + 2, 5)
.Value = strPfad & strPart & "\" & strFile
ActiveSheet.Hyperlinks.Add Anchor:=.Offset(0, 0), Address:=.Value
End With
Next i
Columns(5).AutoFit
End Sub

Anzeige
AW: Hyperlinks aktualisieren / eintragen
08.03.2007 00:32:07
Bruno von Hochmeister
Erstmal danke Rolf. Das passt soweit fast perferkt. Habe nur noch ein Problem. Ein Großteil der Ordner auf die der Link führt haben nach der vierstelligen Nummer noch einen weiteren Text/Zahlencode z.b. XYZ_0002_8452939.
Wie kann ich es möglich machen dass in die Linkerstellung ein beliebiger Textteil dazukommt. * ging nicht. Nehme an dass es am Quelltext liegt, da dieser Links bzw. Pfade erstellt und dann der zufällig passende Ordner angezeigt wird.
Gäbe es nicht eine Lösung die folgendermaßen abläuft:
- Suche im Verzeichnis Ordner mit der Nummer XYZ_0001
- Füge den passenden Link in die Tabelle in Zeile 3 (zu 0001 passend) ein
- mache das mit den anderen Links ebenso (bis 1234).
Vorab schon mal vielen Dank
Gruß
Bruno
Anzeige
AW: Hyperlinks aktualisieren / eintragen
08.03.2007 11:23:41
Rolf Beißner
Hallo Bruno,
das ist jetzt eine völlig andere Aufgabenstellung.
Der bisherige Code basiert auf einer abstrakten, nach vorgegebenen Regeln aufgebauten
Verzeichnisstruktur. Jetzt verstehe ich dich so, dass du die real existierende Verzeichnisstrukur
linkfähig abbilden willst!?
fG
Rolf
Option Explicit
'Verweis setzen:
'"Extras" - "Verweise" - "Microsoft Scripting Runtime"
Sub FoldersToLinks()
'schreibt Folderliste als Links in eine Tabelle
Dim folds(), i%
folds = FolderList(catchFolder)
'Sofern Test ok, entfallen die nächsten beiden Zeilen
Sheets.Add
ActiveSheet.Tab.Color = vbRed
For i = 1 To UBound(folds)
With Cells(i + 2, 5)
.Value = folds(i)
ActiveSheet.Hyperlinks.Add Anchor:=.Offset(0, 0), Address:=.Value
End With
Next i
Columns(5).AutoFit
Erase folds
End
End Sub
Function catchFolder(Optional ByVal define = "")
'Ordnerauswahl
'z.B. define = "C:\myFolder" trifft Vorauswahl
Dim objShell As Object, objfolder As Object
Set objShell = CreateObject("Shell.Application")
Set objfolder = objShell.BrowseForFolder(0, "Bitte einen Ordner wählen", 0, define)
If objfolder Is Nothing Then End
catchFolder = objfolder.Self.Path
End Function
Function FolderList(foldspec)
'Verzeichnisse + Unterverzeichnisse ermitteln
'(C) Rolf Beißner
Static x(), i&
Dim n&
Dim fs As FileSystemObject, fc As Folders, f1 As Folder
Set fs = CreateObject("Scripting.FileSystemObject")
Set fc = fs.getFolder(foldspec).SubFolders
n = fc.Count
For Each f1 In fc
If n > 0 Then i = i + 1
ReDim Preserve x(i)
x(i) = foldspec & "\" & f1.Name
FolderList (x(i) & "\") 'rekursiver Funktionsaufruf!!!
Next
FolderList = x
End Function

Anzeige
AW: Hyperlinks aktualisieren / eintragen
10.03.2007 18:08:33
schauan
Hallo Bruno,
der code von Rolf ist sehr flexibel. Für die ersten 50 Ordner sollte es doch in etwa funktioniert haben oder? Nun gibt es zwei Varianten. Die eine hat noch etwas manuellen Aufwand, ist aber schneller programmiert.
1. Du änderst folgende Zeile im Sub...
For i = 1 To UBound(folds)
in
For i = ActiveCell.Row To UBound(folds)
Du setzt den Cursor in die erste freie Zelle und startest das Makro. Dein Code wird für 50 Unterordner ausgeführt. Dann setzt Du den Cursor in die nächste freie Zelle und startest das Makro erneut. usw. usf.
2. statt catchfolder für die Ordnerwahl brauchst Du eine Schleife über alle Ordner 0001-0050, 0051-0100 usw.
In etwa so:
for j=1 to 1234 step 50
myFolder="\\server1\laufwerka\IBM....\" & format(i,0###) & "-" & format(i+50,0###)
folds = FolderList(myFolder)
...
Anzeige
AW: Hyperlinks aktualisieren / eintragen
22.03.2007 21:03:08
Bruno von Hochmeister
Hallo Rolf,
war heute das erste mal seit 2 wochen mit der aufgabe beschäftigt. Der Code funktioniert einwandfrei, nur habe ich noch ein kleines Problemchen, das ich vergaß zu erwähnen und das ich mit meinen VB-Kenntnissen nicht lösen kann.
Es gibt 1234 zeilen mit daten in der Excel Liste in Spalte A ab Zeile 3 abwärts(also 0001-1234), aber es gibt nicht zu jedem Datensatz einen Ordner und es gibt teilweise Ordner, die noch Unterordner haben (Bilder, Dokus...). Ist es denn nicht möglich dass das Makro zum Wert in Spalte A (z.B. 0921) den korrespondierden Ordner "XYZ0921" sucht und ihn dann entsprechend in die Tabelle einträgt?
Wäre super wenn Du mir da nen Tipp hättest.
Andere Vorschläge nehme ich auch gerne an.
Danke und Gruß
Bruno
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige