Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

Mehrere Hyperlinks automatisch mit Makro machen

Betrifft: Mehrere Hyperlinks automatisch mit Makro machen von: TOMMY123
Geschrieben am: 13.08.2014 15:47:01

Hallo zusammen,

ich habe eine Arbeitsmappe mit mehreren Tabellenblättern.
Im letzten Tabellenblatt sind zwei Spalten (Spalte A und Spalte B)
In Spalte A sind die Titel einiger Tabellenblätter(diese können variieren) und in Spalte B der Name der Zellen, zur der ein Hyperlink auf das jeweilige Arbeitsblatt gehen soll.

Dies kann z.B. folgendermaßen ausschauen:

Spalte A Spalte B
Titel(Tabellenblatt1) A14
Titel(Tabellenblatt2) A3
Titel(Tabellenblatt3) A5
.
.
.
usw.

Ich möchte nun einen Hyperlink nach Zelle A14 von Tabellenblatt 1 erzeugen, danach einen Hyperlink nach Zelle A3 von Tabellenblatt 2 usw.

Wie kann ich das automatisiert mit einem Makro realisieren?

Ich habe das ganze schon mit dem Makrorekorder aufgezeichnet. Dies hat funktioniert, jedoch ist es so nicht dynamisch.

Vielen Dank schon mal!

Gruß,
Thomas

  

Betrifft: AW: Mehrere Hyperlinks automatisch mit Makro machen von: fcs
Geschrieben am: 13.08.2014 16:40:21

Hallo Thomas,

nachfolgend ein entsprechendes Makro, das du ggf. noch ein wenig anpassen musst.

Gruß
Franz

Sub HyperlinksEinfuegen()
'
' Hyperlinks einfuegen auf dem letzten Blatt
'
  Dim wks As Worksheet, Zelle As Range
  Dim Zeile As Long
  Dim strZelle As String, strTab As String
  On Error GoTo Fehler
  Set wks = ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
  With wks
    For Zeile = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
      If .Cells(Zeile, 2).Hyperlinks.Count > 0 Then
        .Cells(Zeile, 2).Hyperlinks(1).Delete
      End If
      strZelle = .Cells(Zeile, 2).Text
      strTab = .Cells(Zeile, 1).Text
      If strTab <> "" And strZelle <> "" Then
        Set Zelle = Worksheets(strTab).Range(strZelle)
        .Hyperlinks.Add Anchor:=.Cells(Zeile, 2), Address:="", _
           SubAddress:="'" & strTab & "'!" & strZelle, _
           TextToDisplay:=strZelle
      End If
NextZeile:
    Next
  End With
Fehler:
  With Err
    Select Case .Number
      Case 0
      Case 1004
        'Tabellenname oder Zelladresse ist nicht gültig
        Resume NextZeile
      Case Else
        MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description
    End Select
  End With
End Sub



  

Betrifft: AW: Mehrere Hyperlinks automatisch mit Makro machen von: TOMMY123
Geschrieben am: 14.08.2014 09:26:59

Vielen Dank, Franz!
Ich habe es noch ein wenig modifiziert, aber es ist genau das, was ich wollte! :)

Ich habe noch ein weiteres Problem:

Gibt es eine Möglichkeit, die einzelnen Tabellenblätter, die sich ja in Spalte A befinden, in einer Userform in ein List- oder Kombobox anzeigen zu lassen, um diese dann dort auszuwählen?
Am besten mit Bezug auf die jeweilige Zelle, die in Spalte B steht.

Noch zur Info: Die Auswahl der Tabellenblätter in Spalte A erfolgt folgendermaßen. Ich habe einen Wert und prüfe, in welchen Tabellenblättern (inkl. Zelle) dieser vorkommt.

Bin für jeden Tipp dankbar!

Gruß,
Thomas


  

Betrifft: AW: Mehrere Hyperlinks automatisch mit Makro machen von: fcs
Geschrieben am: 14.08.2014 11:04:04

Hallo Thomas,


Gibt es eine Möglichkeit, die einzelnen Tabellenblätter, die sich ja in Spalte A befinden, in einer Userform in ein List- oder Kombobox anzeigen zu lassen, um diese dann dort auszuwählen?
Am besten mit Bezug auf die jeweilige Zelle, die in Spalte B steht.

Ja, man muss dann die List- oder Kombobox mit 2 Spalten definieren und die Datenquelle (RowSource entsprechend setzen. Alternativ könnte man auch, ähnlich wie du die Zeilen in der Übersichtsliste füllst, mit der AddItem-Methode die Auswahlliste für die Listbox füllen.

Nachfolgend entsprechender Userform-Code für eine Listbox - für eine Combobox sieht es ähnlich aus.

Gruß
Franz

'Userform-Code
Private Sub ListBox1_Change()
  With Me.ListBox1
    If .ListIndex <> -1 Then
      Sheets(.List(.ListIndex, 0)).Activate
      Range(.List(.ListIndex, 1)).Select
    End If
  End With
End Sub

Private Sub UserForm_Initialize()
  Dim wks As Worksheet, Zeile As Long
  
  Set wks = ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count) 'Tabellenblatt mit Liste
  '
  'Listbox formatieren - kann man auch alles unter den Eigenschaften einstellen
  With Me.ListBox1
    .ColumnCount = 2
    .ColumnWidths = "150Pt;30Pt"
    .Width = 200
  End With
  
  'RowSource für Listbox festlegen
  With wks
    Zeile = .Cells(.Rows.Count, 1).End(xlUp).Row
    Me.ListBox1.RowSource = "'" & .Name & "'!" _
            & .Range(.Cells(2, 1), .Cells(Zeile, 2)).Address(ReferenceStyle:=xlA1)
  End With

End Sub



  

Betrifft: AW: Mehrere Hyperlinks automatisch mit Makro machen von: TOMMY123
Geschrieben am: 14.08.2014 13:32:37

Danke, du hast schon wieder voll ins Schwarze getroffen :)


Ich habe die Listbox in der Userform jetzt noch auf Multiselect umgestellt. Natürlich kann ich jetzt mehrere Einträge in der Listbox auf einmal auswählen.

Jedoch reagiert die Userform dann nur auf das Arbeitsblatt, welches als erstes in der Liste steht. Gibt es eine Möglichkeit, dass mehrere der in der listbox ausgewählten Arbeitsblätter parallel im Hintergrund aktiv sind und nicht nur das, welches ich gerade sehe?

Danke!

Viele Grüße,
Thomas


  

Betrifft: AW: Mehrere Hyperlinks automatisch mit Makro machen von: fcs
Geschrieben am: 14.08.2014 14:53:31

Hallo Thomas,

du kannst mehrere Blätter, die in der Listbox selektiert sind, gruppieren, wenn du das meinst. Aktiv ist aber immer nur ein Blatt (das mit der fetten Schrift im Tabellenreiter)

Gruß
Franz

Private Sub ListBox1_Change()
  'Liste der gewählten Einträge in Array übernehmen bei Listbox mit Mehrfach-Auswahl
  Dim arrSheets(), intSh As Integer, intCount As Integer
  Erase arrSheets
  intSh = 0
  
  With Me.ListBox1
    For intCount = 0 To .ListCount - 1
      If .Selected(intCount) = True Then
      intSh = intSh + 1
      ReDim Preserve arrSheets(1 To intSh)
      arrSheets(intSh) = .List(intCount)
      End If
    Next
    If intSh > 0 Then
      Sheets(arrSheets).Select
    End If
  End With
End Sub




 

Beiträge aus den Excel-Beispielen zum Thema "Mehrere Hyperlinks automatisch mit Makro machen"