Excel vba: Link & Eintrag in Indexblatt löschen
#1
Hallo zusammen,
leider habe ich zu meinem Problem nichts funktionierendes im Web gefunden.
In einem Workbook habe ich sehr viele Worksheets. Um einen Überblick zu bekommen habe ich ein Indexblatt mit Links auf die einzelnen Blätter erstellt.
Um nicht immer ein neues Indexblatt nach dem löschen eines Tabellenblattes erstellen zu müssen hätte ich gerne dass der Link im Indexblatt - und auch der Eintrag in der Zelle - gelöscht wird.
Schön wäre es wenn die restlichen Zellen mit den verbliebenen Links dann verschoben werden um keine Leerzellen dazwischen zu haben.

Wie kann man das mit vba umsetzen? Oder gibt es ein andere elegante Möglichkeit.

Vielen Dank für Eure Hilfe!
Top
#2
Hi Erich,

Du könntest einem Button im Indexblatt ein Makro zuweisen, das über eine Inputbox den Blattnamen abfrägt, und dann das Blatt und die Zeile mit dem Link löscht.

Dazu nimmst Du mit dem Rekorder das Löschen des Blattes und der dazugehörigen Linkzeile auf und postest es hier. Dann kann es gemeinsam verallgemeinert und auf Relevantes reduziert werden.
Top
#3
Hallo Ralf,

habe das gerade mal aufgenommen....weiß aber nicht ob dies das ist was Du möchtest

Code:
Sub Makro1()
'
' Makro1 Makro
'
   Sheets("Indexblatt").Select
   ActiveWindow.SmallScroll Down:=36
   Range("A68").Select
   Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True
   Sheets("Tabelle1").Select
   ActiveWindow.SelectedSheets.Delete
   Sheets("Indexblatt").Select
   Selection.ClearContents
   Range("A69:A76").Select
   Selection.Cut Destination:=Range("A68:A75")
   Range("B68").Select
End Sub
Top
#4
Hi,

(02.04.2017, 11:52)sharky51 schrieb: habe das gerade mal aufgenommen....weiß aber nicht ob dies das ist was Du möchtest

so, hier mal ein Makro zurück:
Option Explicit

Sub Makro1()
   ' 
   ' Makro1 Makro 
   ' 
   Dim strLöschBlatt As String
   Dim i As Long
   ' 
   strLöschBlatt = InputBox("Bitte den Blattnamen eingeben!", "Welches Tabellenblatt soll gelöscht werden?")
   For i = 1 To Sheets.Count
      If Sheets(i).Name = strLöschBlatt Then
         Sheets(i).Delete
      End If
   Next i
   ActiveCell.EntireRow.Delete
End Sub


VBA/HTML - CodeConverter für Office-Foren, AddIn für Excel/Word 2000-2013 - komplett in VBA geschrieben von Lukas Mosimann. Projektbetreuung durch mumpel

Code erstellt und getestet in Office 15


Button einfügen und das Makro zuweisen

Vorgehen:
Zelle mit Link zu löschendem Blatt anklicken
Button drücken
Tabellenblatt-Name eingeben
Ok drücken
Löschen bestätigen
fertig
Top
#5
Hallo Ralf,

das löschen funktioniert ...aber dann kommt eine Fehlermeldung .... Index außerhalb des gültigen Bereichs..
Nehme mal an dass die Laufvariable "i" nicht mehr stimmt wenn ein Blatt gelöscht wurde.
Vor dem Löschen war i ja größer.
Top
#6
Hallo ihr zwei,

dreht mal die Schleife um (von hinten nach vorn)

Code:
For i = Sheets.Count To 1 Step -1
Gruß Stefan
Win 10 / Office 2016
Top
#7
Danke Steffl,
das hat jetzt funktioniert.

Wie bekomme ich jetzt noch den Eintrag bzw. Link auf das Tabellenblatt aus dem Indxblatt...mit vba natürlich Smile ?
Top
#8
Hi,

(02.04.2017, 14:36)sharky51 schrieb: Wie bekomme ich jetzt noch den Eintrag bzw. Link auf das Tabellenblatt aus dem Indxblatt...mit vba natürlich Smile ?

ist doch drin:
Zelle mit Link zu löschendem Blatt anklicken
und
ActiveCell.EntireRow.Delete
Top
#9
Ok, war mein Fehler.
Ich habe über das Indexblatt das zu löschende Blatt aufgerufen und in der vba-Umgebung das Makro manuell gestartet.
Dann war ich natürlich nicht mehr auf dem Indexblatt und somit konnte die Zeile nicht gelöscht werden.
Top
#10
Hallo,

wenn die Zelle mit dem Hyperlink eh schon markiert/aktiviert ist, bedarf es doch keiner Inputbox und keiner Schleife. Wink

Sub Makro1()
Application.DisplayAlerts = False
Range(ActiveCell.Hyperlinks(1).SubAddress).Parent.Delete
ActiveCell.EntireRow.Delete
Application.DisplayAlerts = True
End Sub

Gruß Uwe
Top


Gehe zu:


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