Registriert seit: 09.05.2015
Version(en): 2013, Office 365
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!
Registriert seit: 10.04.2014
Version(en): 2016 + 365
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.
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
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
Registriert seit: 10.04.2014
Version(en): 2016 + 365
02.04.2017, 13:39
(Dieser Beitrag wurde zuletzt bearbeitet: 02.04.2017, 13:39 von Rabe.)
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
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
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.
Registriert seit: 11.04.2014
Version(en): Office 2007
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
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
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
?
Registriert seit: 10.04.2014
Version(en): 2016 + 365
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 ?
ist doch drin:
Zelle mit Link zu löschendem Blatt anklicken
und
ActiveCell.EntireRow.Delete
Registriert seit: 09.05.2015
Version(en): 2013, Office 365
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.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
02.04.2017, 15:55
(Dieser Beitrag wurde zuletzt bearbeitet: 02.04.2017, 15:55 von Kuwer.)
Hallo,
wenn die Zelle mit dem Hyperlink eh schon markiert/aktiviert ist, bedarf es doch keiner Inputbox und keiner Schleife.
Sub Makro1()
Application.DisplayAlerts = False
Range(ActiveCell.Hyperlinks(1).SubAddress).Parent.Delete
ActiveCell.EntireRow.Delete
Application.DisplayAlerts = True
End Sub
Gruß Uwe