Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1200to1204
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro zum Löschen von Zellen und Tabellen

Makro zum Löschen von Zellen und Tabellen
Zellen
Hallo VBA-Gemeinde,
könnt Ihr mir ein Makro zurechtfriemeln mit folgendem fachlischen Ablauf:
In Tabellenblatt 'Anleitungen' steht in Zelle B54 der zu löschende Name.
Dieser Name ist in Tabellenblatt 'Übersicht' zu finden. In Tabellenblatt 'Übersicht' steht im Bereich A3:C23 der Name (Spalte A), Telefonnummer (Spalte B) und E-Mail-Adresse (Spalte C). Diese drei Zellen, in der in Spalte A der entsprechende Name steht, ist zu löschen. [Anschließend muss die Liste neu sortiert werden, das habe ich aber bereits in einem anderen Makro und weiß, wie ich es einbaue].
Anschließend muss in Tabellenblatt 'AF' der Name gefunden werden (steht in Zeile 1) und gelöscht werden [Auch hier kann ich die folgende Neusortierung selbst einbinden]
Als drittes muss das Tabellenblatt mit dem entsprechenden Namen gelöscht werden.

Normalerweise fahre ich ganz gut mit dem Makrorekorder, allerdings weiß ich nicht, wie ich anhand eines Wertes in einer Zelle einen anderen Wert finde bzw. ein Tabellenblatt lösche.
Ich hoffe, Ihr könnt mir weiterhelfen!
Danke im Voraus
Martin

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Makro zum Löschen von Zellen und Tabellen
01.03.2011 09:05:06
Zellen
Hallo Martin,
hier ein erster Ansatz:
Sub suchen_loeschen()
Dim sh As Worksheet
Dim sb As String
Set sh = ThisWorkbook.Sheets("Tabelle1")
sb = "Joker"
sh.Rows(sh.Cells.Find(sb).Row).Delete Shift:=xlShiftUp
End Sub

Gruß
Jochen
AW: Makro zum Löschen von Zellen und Tabellen
01.03.2011 09:27:24
Zellen
Hi Jochen,
danke für die schnelle Antwort. Leider bin ich nicht so firm in VBA. Es sieht so aus, als ob Deine Programmierung zum Löschen des Tabellenblatts ist. Ist das korrekt? Bitte erkläre es.
Danke
Nachgefagt ...
01.03.2011 09:12:35
Matthias
Hallo Martin
Ich gehe davon aus, Name ist jetzt bei Dir ein String (also ein Vorname, ein Nachneme o.ä.) und kein definierter Name der einem Bereich zugeordnet wurde.
Also ich verstehe das so,
In Blatt Anleitungen!B54 steht also z.B. "Martin" oder "Andreas". Ist das so korekt?


Was mich aber wundert:
Zitat
Diese drei Zellen, in der in Spalte A der entsprechende Name steht, ist zu löschen
Zellen löschen? oder nur den Inhalt der Zellen entfernen?
Zitat
Als drittes muss das Tabellenblatt mit dem entsprechenden Namen gelöscht werden
Wozu also erst den Namen suchen, wenn das Blatt dann sowieso gelöscht wird?


Gruß Matthias
Anzeige
Geantwortet
01.03.2011 09:23:53
Martin
Hi Matthias,
zum ersten: es soll nur der Inhalt der Zellen gelöscht werden, quasi Zellen leeren.
Name ist der Name des Teilnehmers, der zu löschen ist. Wenn in Zelle 'Anleitungen'!B53 "Martin H." steht, so steht genau dieser Wert auch in Tabellenblatt Übersicht und in Tabellenblatt AF. Genauso gibt es ein Tabellenblatt mit Namen 'Martin H.'
Diese Vorarbeit habe ich bereits über ein Makro zum Hinzufügen eines Teilnehmers lösen können. Zelle 'Anleitungen'!B53 hat als Gültigkeit eine Liste der Namen aus Tabellenblatt 'Übersicht'. Dadurch ist es unter normalen Umständen auch klar, dass für den eingegebenen Namen die drei Einträge existieren. Dies muss also nicht geprüft werden
Anzeige
probier mal
01.03.2011 09:38:06
Matthias
Hallo Martin
Entscheide Dich bitte B54 oder B53 ? ;o)
Ich habe mal Jochen seinen Code etwas modifiziert:
https://www.herber.de/bbs/user/73777.xls
Gruß Matthias
Hinweis
01.03.2011 09:51:19
Matthias
Hallo
Da muß später noch eine Fehlerbehandlung mit rein. Hatte ich jetzt noch nicht mit eingebaut.
Gruß Matthias
Fehlerbehandlung
01.03.2011 09:59:43
Martin
Ich weiß, dass eine Fehlerbehandlung optimal wäre. Allerdings habe ich die in meinem anderen Makro zum "Teilnehmer hinzufügen" auch nicht. Dafür ist auch die Anleitung da, die man sich entsprechend durchlesen soll.
Da es sich hierbei um eine private Excel-Tabelle handelt bin ich der Meinung, dass eine Fehlerbehandlung nicht zwingend erforderlich ist. Natürlich ist es dadurch keine tolle Programmierung, aber der Aufwand lohnt sich hier meiner Meinung nicht...
Anzeige
Fehlerbehandlung muß sein!
01.03.2011 11:02:32
Matthias
Hallo
... entweder so mit On Error Resume Next, oder etwas ausführlicher - indem man alle Blätter auf deren RegisterNamen prüft.
https://www.herber.de/bbs/user/73781.xls


Du hast (so hoffe ich) bemerkt, das ich mit dem CodeNamen der Tabellenblätter arbeite.
Das hat den Vorteil, das wenn Du einmal einen Registernamen eines Blattes änderst keine Anpassung des Code notwendig ist.
Gruß Matthias
AW: Fehlerbehandlung muß sein!
01.03.2011 11:10:15
Martin
Hi Matthias,
ja, mir ist aufgefallen, dass Du die Tabellenblätter anders benennst als sie heißen. Deine Version zusammen mit Deiner Erklärung klingt dynamisch und sinnvoller. Woher kenne ich den Codenamen der Tabelle?
Meine noch offene Frage habe ich hier formuliert:
https://www.herber.de/forum/messages/1203611.html
Anzeige
CodeName eines Tabellenblattes
01.03.2011 11:20:32
Matthias
Hallo
Userbild
Der in Klammer stehende Name ist der sichtbare RegisterName des Tabellenblattes.
Gruß Matthias
Name in Blatt 'AF' wird nicht gelöscht
01.03.2011 11:18:47
Martin
Hallo Matthias,
Ich gehe davon aus, dass Du bei der neuen Datei eine Fehlerbehandlung und das Löschen des Wertes in Tabellenblatt AF vornehmen wolltest. Leider steht der Wert in Tabellenblatt AF nach Ausführung nach wie vor in der Tabelle. Vielleicht ist es besser, wenn ich mal das komplette Makro poste, inkl. der von mir hinzugefügten Teile.

Sub TNDEL()
' TNDEL Makro
Dim sh As Worksheet, c As Variant, x As Long
Dim sb As String
Set sh = Tabelle1
sb = Tabelle2.Range("B53").Text
For x = 23 To 3 Step -1
With sh
If .Cells(x, 1) = sb Then .Range(.Cells(x, 1), .Cells(x, 3)).ClearContents
End With
Next
Application.DisplayAlerts = False
Worksheets(sb).Delete
Application.DisplayAlerts = True
Sheets("AF").Select
Columns("E:S").Select
Selection.Sort Key1:=Range("E1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
Range("E1").Select
Sheets("Übersicht").Select
Range("A2:P23").Select
Selection.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A2").Select
Sheets("Anleitungen").Select
Range("B53").Select
Selection.ClearContents
Range("A1").Select
On Error Resume Next 'Fehler übergehen
Application.DisplayAlerts = False
Worksheets(sb).Delete
Application.DisplayAlerts = True
With Tabelle4.Rows(1)
.Cells.Find(What:=sb).ClearContents
End With
End Sub

Grüße
Martin
Anzeige
wird nicht gelöscht? bei mir schon ...
01.03.2011 11:28:29
Matthias
Hallo
Klappt es in Deiner Datei nicht, oder in meiner geposteten Datei?
Hier nochmal etwas anders gestrickt
https://www.herber.de/bbs/user/73786.xls
Gruß Matthias
In Deiner Datei wird in AF alles geleert
01.03.2011 11:40:10
Martin
Wenn ich in Deiner Datei einen weiteren Namen in Tabellenblatt 'AF' hinzufüge wird dieser auch gelöscht. Füge in Tabellenblatt 'AF' einmal in die benachbarten Spalten der Zeile 1 "JoWe" oder "Matthias" hinzu.
Deine erste Version musste ich in meiner Tabelle etwas bearbeiten, zum Beispiel, weil es bei mir inzwischen Zelle 'B53' ist. Ansonsten habe ich Deine Programmierung aber nur zu meiner hinzugefügt, weitere Veränderungen habe ich nicht vorgenommen (wie Du an meinem Post siehst)
Anzeige
neuer Versuch ...
01.03.2011 23:24:29
Matthias
Hallo Martin
Probiers mal so
Option Explicit
Sub suchen_loeschen()
Dim sh As Worksheet, c As Variant, x As Long, rnG As Range
Dim sb As String
Set sh = Tabelle1
sb = Tabelle2.Range("B54").Value
For x = 23 To 3 Step -1
With sh
If .Cells(x, 1) = sb Then .Range(.Cells(x, 1), .Cells(x, 3)).ClearContents
End With
Next
On Error Resume Next 'Fehler übergehen
Application.DisplayAlerts = False
Worksheets(sb).Delete
Application.DisplayAlerts = True
For x = 1 To 256
If Tabelle4.Cells(1, x).Value = sb Then Tabelle4.Cells(1, x).ClearContents
Next
End Sub

Gruß Matthias
Anzeige
AW: probier mal
01.03.2011 09:54:36
Martin
Hi Matthias,
sieht sehr gut aus. Eine Sache bitte noch hinzufügen: In Tabellenblatt 'AF' in Zeile 1 steht der Teilnehmername ebenfalls. Kannst Du mir den Code zum Löschen noch nachtragen?
Da ich nebenbei auch wegen anderen Sachen an der Datei werkel habe ich inzwischen eine Zeile gelöscht. Daher hat sich die Zellenangabe verändert ^^ ...
Dadurch musste ich bereits ein anderes Makro verändern

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige