4.6k Aufrufe
Gefragt in Tabellenkalkulation von ponscho Mitglied (323 Punkte)
Hallo an alle Forumsmitglieder!

Habe die Suche schon benutz aber nichts gefunden.

Ich bräuchte ein Makro, womit ich ein Tabellenblatt aus einer Liste auswähle und beim anklicken gelöscht wird.

Habe es schon mit "wait" was ich im Inet gefunden habe probiert, aber es funktioniert nicht, da ich in der Wartezeit nichts auswählen kann.

Sub Loeschen()
Application.DisplayAlerts = False
ActiveWindow.DisplayWorkbookTabs = True
Application.Wait Now + TimeValue("00:00:05")
ActiveWindow.DisplayWorkbookTabs = False
Application.DisplayAlerts = True
End Sub


Vielen Dank schonmal und Internette Grüsse

14 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Unbekante(r),

warum benutzt Du nicht die rechte Maustaste beim Register? Warum Wait?

Gruß Hajo
0 Punkte
Beantwortet von ponscho Mitglied (323 Punkte)
Hallo Hajo!

Ganz kurz erklärt, ich betreibe Ahnenforschung und erstelle Familienblätter (Paarungen verschiedener Geburtsnamen).
Klar, noch ist es übersichtlich! Doch wenn mehr als, was ich doch hoffe, 100 Paarungen zusammenkommen, wird es unten in der Leiste sehr unübersichtlich.
Deswegen wäre es toll, wenn so eine Art Liste aufgeht in der ich eine Paarung (Tabellenblatt "Geburtsname1 - Geburtsname2_oo Jahr") beim anwählen löschen könnte.

Internette Grüsse
Mick
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ein beispiel

gruss nighty

ueber das Workbook_Open() ereigniss wird ein listenfeld auf tabelle1 zelle b1 erstellt,mit den namen der worksheets

einzufuegen
alt+f11/projektexplorer/DeineArbeitsMappe

Private Sub Workbook_Open()
With Worksheets("Tabelle1").Range("B1").Validation
.Delete
For WksNamen = 1 To Worksheets.Count
If WksNamen < Worksheets.Count Then
NamenSammeln = NamenSammeln & Worksheets(WksNamen).Name & ","
Else
NamenSammeln = NamenSammeln & Worksheets(WksNamen).Name
End If
Next WksNamen
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=NamenSammeln
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub


einzufuegen
alt+f11/projektexplorer/DeineTabelle

ueber das Worksheet_Change() ereigniss wird aus b1 der name des zu loeschenden worksheets ausgelesen und das ausgewaehlte worksheet geloescht

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 2 And Target.Row = 1 Then
Application.DisplayAlerts = False
Worksheets("" & Cells(1, 2)).Delete
Application.DisplayAlerts = True
End If
Application.EnableEvents = True
End Sub
0 Punkte
Beantwortet von ponscho Mitglied (323 Punkte)
Hallo nighty!

Jetzt bin ich etwas durcheinander!

Meine Struktur im Explorer sieht so aus:

VBAProject (0000_Ahnenforschung Familienblatt.xls)
Microsoft Excel Objekte
DieseArbeitsmappe
Tabelle1 (Startseite)
Tabelle2 (Vorlage)
Tabelle3 (Namen_Orte)
Tabelle4 (Wi**n_oo_K**se)
Tabelle5 (Namen_Orte)
Tabelle6 (Be**d_o_Wi**n)
Tabelle7 (Wi**n_oo_Sp**r)
Tabelle8 (Be**dt_oo_Wu**e)
Tabelle9 (K**se_oo_El**yk)
Module

Wobei Tabelle 2 & 3 ausgeblendet sind.
O.k. das habe ich verstanden, dies in "DieseArbeitsmappe"

Private Sub Workbook_Open()
With Worksheets("Tabelle1").Range("B1").Validation
.Delete
For WksNamen = 1 To Worksheets.Count
If WksNamen < Worksheets.Count Then
NamenSammeln = NamenSammeln & Worksheets(WksNamen).Name & ","
Else
NamenSammeln = NamenSammeln & Worksheets(WksNamen).Name
End If
Next WksNamen
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=NamenSammeln
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub


Aber dies nicht und wie führe ich das aus? mit einem ClickButton?

"DeineTabelle"
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 2 And Target.Row = 1 Then
Application.DisplayAlerts = False
Worksheets("" & Cells(1, 2)).Delete
Application.DisplayAlerts = True
End If
Application.EnableEvents = True
End Sub


Internette Grüsse
Mick
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi mick ^^

im projektexplorer siehst du deine tabellen,dort deine tabelle doppelclick und code einfuegen

jetzt ist auf b1 der zuvor ausgewaehlten tabelle ein automatismus erstellt worden,der auf inhaltswechsel von b1 wirkt

der tabellennamen wie auch die zelle vom ersten makro muessen angepasst werden

eine aktualiesierung ist zur zeit nicht integriert,liesse sich aber leicht aendern,wenn es so gewuenscht sein sollte

gruss nighty
0 Punkte
Beantwortet von ponscho Mitglied (323 Punkte)
Hallo nighty!

Erstmal Danke für Deine Unterstützung!
irgendwie hatte ich es rausgefunden, aber Du hast schneller geantwortet ;o)

Nun habe ich das nächste Problem, irgendetwas beisst sich da. Deswegen habe ich mal eine Test-Datei hochgeladen.

*hier klicken*

Internette Grüsse
Mick
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi mick ^^

mit aktualiesierung koennte es so aussehen

gruss nighty

einzufuegen
alt+f11/projektexplorer/DeineArbeitsMappe

Private Sub Workbook_Open()
Call Liste_Einlesen
End Sub


einzufuegen
alt+f11/projektexplorer/AllgemeinesModul

Sub Liste_Einlesen()
With Worksheets("Tabelle1").Range("B1").Validation
.Delete
For WksNamen = 1 To Worksheets.Count
If WksNamen < Worksheets.Count Then
NamenSammeln = NamenSammeln & Worksheets(WksNamen).Name & ","
Else
NamenSammeln = NamenSammeln & Worksheets(WksNamen).Name
End If
Next WksNamen
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=NamenSammeln
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub


einzufuegen
alt+f11/projektexplorer/DeineTabelle

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target.Column = 2 And Target.Row = 1 Then
Application.DisplayAlerts = False
Worksheets("" & Cells(1, 2)).Delete
Call Liste_Einlesen
Application.DisplayAlerts = True
End If
Application.EnableEvents = True
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi mick ^^

du hattest meinen und deinen code vermischt :-)))

die letzte variante duerfte es ueberschaubarer machen und vielleicht fehlerfreier einzufuegen :-)

gruss nighty
0 Punkte
Beantwortet von ponscho Mitglied (323 Punkte)
Hmm!

Jetzt habe ich einen

Laufzeitfehler '1004':
Anwendungs- oder objektdefinierter Fehler

in dieser Zeile

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=NamenSammeln

Irgendwas mach ich doch verkehrt?

Internette Grüsse
Mick
0 Punkte
Beantwortet von ponscho Mitglied (323 Punkte)
o.k. jetzt funktionierts irgendwie ohne Laufzeitfehler, aber das ausgewählte Blatt wird nicht gelöscht?

Internette Grüsse
Mick
...