Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA Code für Userform anpassen
#1
Guten Morgen,


ich habe hier einen total coolen Code gefunden, der ein Inhaltsverzeichnis mit Hyperlinks macht.
Leider verstehe ich den Code nicht und mein wissen reicht nicht aus um meine Anforderungen umzusetzen. 

1. Aktuell erstellt dieser Code ein neues Tabellenblatt mit dem Inhaltsverzeichnis.
Ich hätte dieses Inhaltsverzeichnis gerne in einer Userform, damit ich mir die Userform öffnen kann und durch die Tabellen "springen" kann.

2. Aktuell springt man in dem Ausgewähltem Tabellenblatt über den Hyperlink immer in Zelle A1,
Da die Tabellenblätter ordentlich gefüllt sein werden, wäre es ja doof, wenn man immer wieder runter scrollen müsste.
Wenn ich ein tabellenblatt manuell öffne, sring excel ja in die zuletzt ausgewählte Zelle, ist das mit dem Hyperlink auch möglich?

3. Sortiert es einmal nach Blattnummer und einmal nach alphabet. Ich möchte ja nicht eine riesen Userform da haben, mir würde eine Sortierungsart Reichen.

Also im groben hätte ich gern ein Inhaltsverzeichnis in einer Userform mit Hyperlinks zu den Tabellenblättern, um einfacher durch viele Tabellenblätter zu navigieren.
Dieses Inhaltsverzeichnis, sollte sich beim start der Userform aktualisieren, so dass auch Änderungen (Tabellenblatt löschen, neues erstellen) möglich ist und erfasst wird.

In was lasse ich das am besten in einer Userform einfügen? ComboBox?

Ich erwarte von keinem, dass er mir den Code passend umschreibt (würde mir natürlich die arbeit erleichtern ::D ).
Mir reicht es vollkommen, wenn ich Tips bekomme, welche stellen des Codes ich mir genauer anschauen muss um den code für eine Userform anzupassen.


Code:
Sub inhaltsverzeichnis_erstellen()
'Inhaltsverzeichnis aller Tabellenblätter
'im erten Tabellenblatt ab Zeile A1 einfügen
Dim Blatt As Object
Dim zeile As Double
Dim NewSheet As Worksheet
Dim i As Integer

zeile = 3
'Fehlerhandling
On Error Resume Next

'Abfrage unterdrücken
Application.DisplayAlerts = False
Application.ScreenUpdating = False

'Sheet Inhaltsverzeichnis auf jeden Fall löschen
Sheets("Inhaltsverzeichnis").Delete

'Neues Tabellenblatt mit dem Namen Inhaltsverzeichnis hinzufügen
Set NewSheet = Worksheets.Add
NewSheet.Name = "Inhaltsverzeichnis"
Sheets("Inhaltsverzeichnis").Move before:=Sheets(1) ' = Tabellenblatt als erstes
'Überschrift Einfügen und formatieren
With Sheets("Inhaltsverzeichnis").Range("A1")
.Value = "Inhaltsverzeichnis"
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
.Font.Underline = xlUnderlineStyleSingle
End With
With Cells(1, 2)
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
End With
With Cells(1, 3)
.Font.Name = "Arial"
.Font.Size = "18"
.Font.Bold = True
.Font.ColorIndex = 6
.Interior.ColorIndex = 5
.Interior.Pattern = xlSolid
.Interior.PatternColorIndex = xlAutomatic
End With


With Cells(2, 1)
.Value = "sortiert nach Blatt-Nr."
.Font.Name = "Arial"
.Font.Size = "16"
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle

End With
With Cells(2, 5)
.Value = "alphabetisch sortiert"
.Font.Name = "Arial"
.Font.Size = "16"
.Font.Bold = True
.Font.Underline = xlUnderlineStyleSingle

End With
'Laufende Blattnummerierung + Blattname einfügen
For Each Blatt In Sheets
Sheets("Inhaltsverzeichnis").Cells(zeile, 1).Value = "Blatt " & zeile - 2
Sheets("Inhaltsverzeichnis").Cells(zeile, 2).Value = Blatt.Name
Sheets("Inhaltsverzeichnis").Hyperlinks.Add Anchor:=Cells(zeile, 2), Address:="", SubAddress:="'" & _
Blatt.Name & "'!A1", TextToDisplay:=Blatt.Name
zeile = zeile + 1
Next Blatt

ActiveSheet.Columns("B:B").EntireColumn.AutoFit

'Kopiere die zwei erstellten Spalten und sortiere Hyperlinks
Range("A3", Range("B65536").End(xlUp)).Select
Selection.Copy
Range("D3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("D3", Range("E65536").End(xlUp)).Select
Selection.Sort Key1:=Range("E3"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

ActiveSheet.Columns("D:E").EntireColumn.AutoFit
ActiveWindow.DisplayGridlines = False
Range("A3").Select
ActiveWindow.FreezePanes = True

Cells(1, 4).Value = "Diese Datei hat " & Worksheets.Count & " Tabellen"
'Userform ausblenden
'frmInhaltsverz.Hide

'Ursprungszustand wieder herstellen
Application.DisplayAlerts = True
Application.ScreenUpdating = True


End Sub
Antworten Top
#2
Ich habe es jetzt erstmal mit Trick 17 gelöst.

Code:
   ActiveWindow.NewWindow
   ActiveWorkbook.Windows.Arrange ArrangeStyle:=xlVertical
   Windows("Muster.xlsm:1").Activate
   Application.Left = 203.5
   Application.Top = 1
   Application.Width = 1238.25
   Application.Height = 781.5
   Windows("Muster.xlsm:2").Activate
   Application.Left = 0.25
   Application.Top = 1
   Application.Width = 202.5
   Application.Height = 781.5
   Windows("Muster.xlsm:1").Activate

Diesen Code habe ich unter den oberen gepackt.

Ich öffne das Fenster nochmal und passe dann jeweils die größe der beiden Fenster an, so das ich links das Inhaltsverzeichnis mit den Hyperlinks habe und Rechts springt er dann mit den Hyperlinks hin und her.
Leider weiß ich nicht, wie ich Punkt 2 Lösen könnte.

Eine Lösung mit ner userform fände ich aber etwas schöner, da ich jetzt halt, wenn ich z.B. zwischend durch in den Browser klicke und wieder zurück will beide Fenster wieder in den Fordergrund holen muss.
Antworten Top
#3
:/ Funktioniert nicht, wenn ich die Datei aufs Netzwerk packe.
Antworten Top
#4
Hallo,

wenn es so viele Tabellenblätter gibt, dass du eine Navigationshilfe brauchst, solltest du mal darüber nachdenken, ob du deine Datei und die Datenhaltung dort, optimieren kannst.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#5
Ich habe es auch schon versucht alles in einem Tabellenblatt mit einer inteligenten tabelle zu machen, dies ist für mich aber irgendwie zu unübersichtlich.
Antworten Top
#6
Hallo Izzy,

Du könntest versuchen, im WorksheetActivate die letzte Zeile zu ermitteln und dann dorthin zu gehen.
im Prinzip z.B. mit
Application.Goto Range("A" & Cells(Rows.Count, 1).End(xlUp).Row)

Wenn Du den Code nicht in jedem Blatt haben willst, dann probiere es im Workbook_SheetActivate.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste