Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.04.2024 20:05:21
28.04.2024 18:33:31
28.04.2024 18:25:12
28.04.2024 14:18:05
Anzeige
Archiv - Navigation
1932to1936
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

Range integrieren

Range integrieren
27.06.2023 14:48:46
Kruemel

Hallo Zusammen,
mit dem folgenden Code lasse ich Tabellenblätter löschen die ich nicht mehr brauche. Ich habe in einem Blatt die Namen untereinanderstehen und wähle dann aus.
durch die Auswahl wird dann das entsprechende Blatt gelöscht. Wie kann ich durch die selbe Auswahl in der Inputbox auch den Namen aus der Liste löschen lassen? mir fehlt die Range variable die ich nicht eingebaut kriege. Der "Name" ist ja schon als String definiert.
Ändere ich es auf Range dann löscht er die Zelle aber das Tabellenblatt nicht mehr.

vielen dank schon mal für die Mühen und Tipps
Kruemel


Sub FindenLöschen()

Dim Name As String
Dim msg As Integer
    
Application.ScreenUpdating = False
Application.DisplayAlerts = False
    
msg = MsgBox("Soll der Name und das dazugehörige Tabelleblatt gelöscht werden?", vbQuestion + vbYesNo + vbDefaultButton2, "Löschung Name und Tabellenblatt")

If msg = vbYes Then
    Name = Application.InputBox(prompt:="Den zu löschenden Namen auswählen", Type:=8)
    Sheets(Name).Delete
    Name.ClearContents
    
Else
End If

Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub


22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Range integrieren
27.06.2023 15:00:10
onur
"auch den Namen aus der Liste löschen lassen" ?? Was für eine Liste denn?


AW: Range integrieren
27.06.2023 15:18:15
Pappawinni
Wenn Name ein Range ist, was man dann allerdings nicht Name nennen sollte, sondern vielleicht rngName, dann müsstest du wohl
Sheets(Name.value).Delete schreiben
Wäre Name ein String, sollte die Variable auch nicht Name, sondern vielleicht strName sein..
Damit wird es dann aber schwer möglich die entsprechende Zelle zu leeren.


AW: Range integrieren
27.06.2023 15:32:42
onur
Ausserdem, vergibt man den selben Namen nicht zweimal - einmal als Range und einmal als Blatt.


AW: Range integrieren
27.06.2023 15:33:46
Pappawinni
und wenn Name ein Range ist dann brauchst du
Set Name = Applicatiton.InputBox(....)


Anzeige
AW: Range integrieren
27.06.2023 15:50:59
Kruemel
Ich habe eine Liste mit allen Arbeitskollegen und zu jedem Kollegen gibt es ein Tabellenblatt


AW: Range integrieren
27.06.2023 15:57:38
Pappawinni
Naja, mach halt einfach ..
Sub FindenLöschen()
      
      Dim rngName As range
      Dim msg As Integer
                   
      msg = MsgBox("Soll der Name und das dazugehörige Tabelleblatt gelöscht werden?", vbQuestion + vbYesNo + vbDefaultButton2, "Löschung Name und Tabellenblatt")
      
      If msg = vbYes Then
          set rngName = Application.InputBox(prompt:="Den zu löschenden Namen auswählen", Type:=8)
          Sheets(rngName.value).Delete
          rngName.ClearContents
      End If
      
 End Sub


Anzeige
AW: Range integrieren
27.06.2023 16:01:12
onur
Gewöhne dir mal an, die Codes auch mal zu testen, die du postest. :)


AW: Range integrieren
27.06.2023 16:08:22
Pappawinni
Wie? hab ich was versemmelt, oder was ?
Ist zwar von der Abfrage-Logik merkwürdig, aber sollte die gewählte Zelle und das Tabellenblatt (sofern es das gibt) das in der Zelle angegeben ist, löschen.


AW: Range integrieren
27.06.2023 16:09:19
onur
Dann teste doch mal einfach....


AW: Range integrieren
27.06.2023 16:21:43
Pappawinni
Der Code tut IMHO das, was der TO wollte...ob das jetzt toll ist oder auch nicht


AW: Range integrieren
27.06.2023 16:47:35
Pappawinni
Das liest sich ja, als würde ich häufig oder gar grundsätzlich ungetesteten Code posten.
In diesem Fall hattest du zwar in gewisser Weise recht, ich hab nicht getestet und ich bin über den Code auch nicht wirklich glücklich,
aber es ging mir auch nur darum das Ding so ändern, dass es tut, wie es der TO wollte und das ist offenbar gelungen.
Ich hätte vielleicht noch auf die Naming Conventions hinweisen sollen...
https://www.herber.de/vbabasics/0002.html
aber da bin ich auch nicht wirklich strikt.


Anzeige
AW: Test bestanden owT
27.06.2023 16:13:39
Pappawinni
owT


AW: Test bestanden owT
27.06.2023 16:19:57
Kruemel
ja bei mir hat es den test auch bestanden funktioniert super. vielen lieben Dank


AW: Test bestanden owT
27.06.2023 16:40:18
onur
Du hast Recht, aber ich verstehe nicht, warum es klappt.
Ich habe keine Ahnung, warum VBA
Set rngName = Application.InputBox....
akzeptiert, obwohl ein Objekt erwartet und String geliefert wird.
Beim ersten Test klappte es nicht, aber es lag daran, dass der Bereichsname nicht angelegt war.
Seltsam....
Aber so ginge es auch:

      Dim Nam as String
      If msg = vbYes Then
          Nam = Application.InputBox(prompt:="Den zu löschenden Namen auswählen", Type:=8)
          Sheets(Nam).Delete
          Range(Nam).ClearContents
      End If
Aber ich verstehe nicht, warum die Namen der Blätter in Zellen untereinder aufgelistet werden, jede dieser Zellen als Bereichsnamen mit dem selben Namen angelegt werden, nur um die Namen nochmal in die Inputbox eingeben zu müssen.


Anzeige
AW: Test bestanden owT
27.06.2023 16:59:58
Pappawinni
Nö, ich hab keine Bereichsnamen verwendet...
Type:=8
"A cell reference, as a Range object"


AW: Test bestanden owT
27.06.2023 17:02:06
onur
Ich sollte meinen Spruch "Erst mal die Gebrauchsanweisung lesen" auch selbst mal für Inputboxen beherzigen. Sorry...


AW: Test bestanden owT
27.06.2023 18:13:57
Kruemel
Ich versuche es mal zu erklären.
Es ist eine Datei zur Berechnung der Arbeitszeit, wo alles minutengenau erfasst wird. Damit ich nicht alle Hilfsblätter und Berechnungsblätter händisch ändern muss wenn mal ein Kollege dazu kommt oder wegfällt, habe ich ein NamensBlatt erstellt wo alle Kollegen aufgelistet sind und diese verknüpft. Dann habe ich ein Makro wo der neue Name angelegt wird im NamenBlatt und damit verbunden ein Tabellenblatt mit eben diesem Namen erstellt wird.
Meine Intention der Frage vom Beitrag zielte nur darauf ab das ganze auch andersherum zu machen. Wenn also ein Kollege ausscheidet brauche ich nur das von Pappawinni erstellte Makro starten und Tabellenblatt und Namen aus der Liste zu löschen.
Da ich absoluter VBA Laie und Anfänger bin, habe ich auch wieder was gelernt. Nämlich Namen ordentlich zu vergeben und die Seite lese ich mir durch zum lernen.

viele Grüße
Kruemel


Anzeige
AW: Test bestanden owT
27.06.2023 18:53:21
onur
Es ist gefährlich, ein Blatt OHNE RÜCKFRAGE zu löschen, da man auch aus Versehen was löschen könnte, und zwar wichtige Daten.
Ausserdem ist es (besonders ab einer gewissen Anzahl von Mitarbeitern) Quatsch, für jeden MA ein eigenes Blatt zu erstellen. Du siehst ja das Problem selbst, wenn du schon ein Makro brauchst, nur um das Blatt zu finden und zu löschen - mal abgesehen von weiterführenden Auswertungen dieser Datensätze, die sich unnötig verkomplizieren.
Ich würde alle Namen untereinander schreiben und noch 6 Spalten anlegen für Zeitenpaare und Stunden (von/bis/Stunden) - fertig

Warum du z.B. für Blatt "Max Mustermann" eine Zelle mit dem Text "Max Mustermann" UND einen Bereich, der diese Zelle enthält, mit dem Namen "Max Mustermann" brauchst, ist mir aber immer noch schleierhaft.


Anzeige
AW: Test bestanden owT
28.06.2023 13:55:15
Kruemel
Hallo owT,
ja so einfach ist das mit den Stunden "von bis fertig" nicht. Ich habe Bereitschaftsstunden, Feiertage, Wochenende, alles nochmals unterteilt in Tag und Nachtarbeit, Krankheit, Urlaub, Lehrgänge. Dann haben wir die Möglichkeit auszusetzen (Arbeitsverweigerung könnte man es nennen)das wieder unterteilt in Tag und Nacht an Arbeitstagen, Wochenende und Feiertags. Zudem ist jeder Bereich mit prozentualen Anteilen belegt die errechnet werden. Das geht einfach nicht mit einem Arbeitsblatt. Und die Datei ist extra so aufgebaut, das die Namensblätter einfach ohne Rückfrage gelöscht werden können, ohne das Daten verloren gehen.

Für deinen letzten Satz (Anmerkung) kann ich dir anbieten, dir die Dateien mal zu schicken, wenn du es unbedingt verstehen möchtest. :-D

de Grüße


Anzeige
AW: Test bestanden owT
28.06.2023 14:01:08
onur
Nöö, lass mal. Ist ja nicht mein Problem.
Und für eine Kernsanierung deiner Datei fehlt mir jegliche Motivation.


AW: Test bestanden owT
28.06.2023 14:08:42
Kruemel
joa hab ich mir schon gedacht xD xD xD
Trotzdem Danke für deine Mühen und Anregungen.

Alles Gute
Kruemel


AW: Range integrieren
27.06.2023 15:27:10
GerdL
Moin Kruemel,
besser komfortabel finden als komfortabel suchen.
Dim Rng As Range
Set Rng = Worksheets("DienSammler").Find(Name, LookIn:=xlValues, lookat:=xlWhole)
If Not Rng Is Nothing Then Rng.EntireRow.Delete
Gruß Gerd

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige