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

Dokumentenverzeichnis mit Hyperlink generieren?

Dokumentenverzeichnis mit Hyperlink generieren?
24.01.2018 17:00:13
Juergen
Hallo zusammen,
ich muss versuchen, im Netzwerk hinterlegte Dokumente (*.pdf, *.doc, etc.) in einer Website mit passendem Hyperlink zu speichern. Das gelingt mir leider nicht.
Problem:
a) derzeit habe ich eine Liste mit den kompletten Speicherorten der Dokumente in "Tabelle2". Aus dieser soll nun die "Tabelle1" generiert werden. Ich habe mal die ersten 3 Einträge in "Tabelle1" auch noch mit den Hyperlinks händisch mit einem Hyperlink zum Speicherort des jeweiligen Dokumentes versehen. Könnte man diese Arbeitsschritte automatisieren, um eine "Tabelle1" zu erstellen?
b) wenn ich nun die "Tabelle1" als Website veröffentliche, gehen die Hyperlinks verloren und die Einträge sind inaktiv. Wie könnte man das unterbinden, so dass diese nach wie vor Klickbar bleiben?
Danke für jede Info zur Frage.
Hier meine Test-Datei:
https://www.herber.de/bbs/user/119234.xlsx
Danke & Gruss,
Juergen

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hyperlink Nachtrag zu b)
24.01.2018 17:07:21
Juergen
Nachtrag zu b):
soeben nochmals getestet. hatte versehentlich in Endung *.mht abgespeichert. Wenn ich *.htm benutze sind die Hyper's aktiv. Somit geht das schon mal.
AW: Hyperlink Nachtrag zu b)
24.01.2018 22:18:12
Sepp
Hallo Jürgen,
in ein allgemeines Modul.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function WNetGetConnection Lib "mpr.dll" Alias _
  "WNetGetConnectionA" (ByVal lpszLocalName As String, _
  ByVal lpszRemoteName As String, cbRemoteName As Long) As Long

Private Const NO_ERROR = 0
Private Const ERROR_MORE_DATA = 234


Sub createLinks()
Dim lngRow As Long, varFiles As Variant
Dim lngNext As Long, strUNC As String, strDrive As String
Dim strRubrik As String, strCheck As String, strLink As String, strDisplay As String

On Error GoTo ErrorHandler

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .Calculation = xlCalculationManual
End With

With Sheets("Tabelle2") 'Tabelle mit den Dokumentenadressen in A1:Ax
  varFiles = .Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
End With

strDrive = Left(varFiles(1, 1), InStr(1, varFiles(1, 1), ":") - 1)

strUNC = LocalPathToUNCPath(strDrive) '"\\KRONOS\Public Share"

If Len(strUNC) Then
  lngNext = 2
  With Sheets("Tabelle1") 'Ausgabetbelle
    For lngRow = 1 To UBound(varFiles, 1)
      strCheck = Left(varFiles(lngRow, 1), InStrRev(varFiles(lngRow, 1), "\") - 1)
      strCheck = Mid(strCheck, InStrRev(strCheck, "\") + 1)
      If strCheck <> strRubrik Then
        .Cells(lngNext, 1) = strCheck
        strRubrik = strCheck
      End If
      strLink = strUNC & Mid(varFiles(lngRow, 1), InStr(1, varFiles(lngRow, 1), ":") + 1)
      strDisplay = Mid(varFiles(lngRow, 1), InStrRev(varFiles(lngRow, 1), "\") + 1)
      strDisplay = Left(strDisplay, InStrRev(strDisplay, ".") - 1)
      .Hyperlinks.Add anchor:=.Cells(lngNext, 2), Address:=strLink, TextToDisplay:=strDisplay
      lngNext = lngNext + 1
    Next
  End With
End If

ErrorHandler:

If Err.Number <> 0 Then
  MsgBox "Fehler in Modul1" & vbLf & vbLf & "Prozedur:" & vbTab & "createLinks" & vbLf & _
    "Nummer:" & vbTab & Err.Number & vbLf & "Meldung:" & vbTab & Err.Description & vbLf & _
    IIf(Erl, "Zeile:" & vbTab & Erl, ""), vbExclamation, "Fehler!"
  Err.Clear
End If

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .Calculation = xlCalculationAutomatic
End With

End Sub

Private Function LocalPathToUNCPath(MappedDrive As String) As String
'source:=http://classic.vb-faq.de/knowlib/uncpaths/
Dim lngRet As Long
Dim strUNC As String
Dim lngSize As Long

MappedDrive = Left$(MappedDrive, 1) & ":"

lngRet = WNetGetConnection(MappedDrive, strUNC, lngSize)

If lngRet = ERROR_MORE_DATA Then
  strUNC = Space$(lngSize)
  lngRet = WNetGetConnection(MappedDrive, strUNC, lngSize)
  If lngRet = NO_ERROR Then
    LocalPathToUNCPath = Left$(strUNC, InStr(1, strUNC, vbNullChar) - 1)
  End If
End If
End Function

Da ich kein Netzlaufwerk zum testen habe, musst du probieren ob das Laufwerk richtig aufgelöst wird!
Gruß Sepp

Anzeige
AW: ...unglaublich! alles funktioniert :)
25.01.2018 09:30:06
Juergen
Hallo Sepp,
der Code funktioniert auf Anhieb! Super Sache! Herzlichen Dank!
Aber eine Begehrlichkeit hätte ich da noch....
Könnte ich 3 Buttons machen um den Import selektiert nach Datei-Endung zu starten in Tabelle1:
a) nur Dateien, welche *.pdf Endung haben
b) nur Dateien, welche *.doc oder docx (also WORD Dateien) Endung haben
c) alle verfügbaren Dateien in Tabelle2
Danke & Gruss,
Juergen
oT: ...darf ich dich mal fragen, ob die Idee einen Code zu schreiben einfach bei Fragestellung einfällt oder wie machst du das? Für mich ist das überhaupt nicht nachvollziebar, hätte mich aber mal interessiert wie ein Profi so was angeht!?
Anzeige
AW: ...unglaublich! alles funktioniert :)
25.01.2018 10:13:03
Sepp
Hallo Jürgen,
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function WNetGetConnection Lib "mpr.dll" Alias _
  "WNetGetConnectionA" (ByVal lpszLocalName As String, _
  ByVal lpszRemoteName As String, cbRemoteName As Long) As Long

Private Const NO_ERROR = 0
Private Const ERROR_MORE_DATA = 234

Sub createLinkPDF()
Call createLinks("*.pdf")
End Sub

Sub createLinkDOC()
Call createLinks("*.doc*")
End Sub

Sub createLinkALL()
Call createLinks
End Sub

Sub createLinks(Optional FileLike As String = "*.*")
Dim lngNext As Long
Dim lngRow As Long
Dim varFiles As Variant
Dim strCheck As String
Dim strDisplay As String
Dim strDrive As String
Dim strLink As String
Dim strRubrik As String
Dim strUNC As String

On Error GoTo ErrorHandler

With Application
  .ScreenUpdating = False
  .EnableEvents = False
  .Calculation = xlCalculationManual
End With

With Sheets("Tabelle2") 'Tabelle mit den Dokumentenadressen in A1:Ax
  varFiles = .Range("A1:A" & .Cells(.Rows.Count, 1).End(xlUp).Row)
End With

strDrive = Left(varFiles(1, 1), InStr(1, varFiles(1, 1), ":") - 1)

strUNC = LocalPathToUNCPath(strDrive)

If Len(strUNC) Then
  lngNext = 2
  With Sheets("Tabelle1") 'Ausgabetbelle
    .Range("A2:B" & .UsedRange.Rows.Count).Clear
    For lngRow = 1 To UBound(varFiles, 1)
      If LCase(varFiles(lngRow, 1)) Like FileLike Then
        strCheck = Left(varFiles(lngRow, 1), InStrRev(varFiles(lngRow, 1), "\") - 1)
        strCheck = Mid(strCheck, InStrRev(strCheck, "\") + 1)
        If strCheck <> strRubrik Then
          .Cells(lngNext, 1) = strCheck
          strRubrik = strCheck
        End If
        strLink = strUNC & Mid(varFiles(lngRow, 1), InStr(1, varFiles(lngRow, 1), ":") + 1)
        strDisplay = Mid(varFiles(lngRow, 1), InStrRev(varFiles(lngRow, 1), "\") + 1)
        strDisplay = Left(strDisplay, InStrRev(strDisplay, ".") - 1)
        .Hyperlinks.Add anchor:=.Cells(lngNext, 2), Address:=strLink, TextToDisplay:=strDisplay
        lngNext = lngNext + 1
      End If
    Next
  End With
End If

ErrorHandler:

If Err.Number <> 0 Then
  MsgBox "Fehler in Modul1" & vbLf & vbLf & "Prozedur:" & vbTab & "createLinks" & vbLf & _
    "Nummer:" & vbTab & Err.Number & vbLf & "Meldung:" & vbTab & Err.Description & vbLf & _
    IIf(Erl, "Zeile:" & vbTab & Erl, ""), vbExclamation, "Fehler!"
  Err.Clear
End If

With Application
  .ScreenUpdating = True
  .EnableEvents = True
  .Calculation = xlCalculationAutomatic
End With

End Sub

Private Function LocalPathToUNCPath(MappedDrive As String) As String
'source:=http://classic.vb-faq.de/knowlib/uncpaths/
Dim lngRet As Long
Dim strUNC As String
Dim lngSize As Long

MappedDrive = Left$(MappedDrive, 1) & ":"

lngRet = WNetGetConnection(MappedDrive, strUNC, lngSize)

If lngRet = ERROR_MORE_DATA Then
  strUNC = Space$(lngSize)
  lngRet = WNetGetConnection(MappedDrive, strUNC, lngSize)
  If lngRet = NO_ERROR Then
    LocalPathToUNCPath = Left$(strUNC, InStr(1, strUNC, vbNullChar) - 1)
  End If
End If
End Function

den Schaltflächen einfach das entsprechende Makro zuweisen.
Zu deiner Frage: Das hängt immer von der Fragestellung ab. In deinem Fall geht es ja hauptsächlich darum, die Pfadangaben zu den Dateien entsprechend aufzuarbeiten um daraus dann einen Hyperlink erstellen zu können. Vieles hat man ja schon oft in ähnlicher Weise gelöst, man muss es halt nur auf den aktuellen Fall anpassen.
Gruß Sepp

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige