Microsoft Excel

Herbers Excel/VBA-Archiv

Makro Tabblatt löschen

Betrifft: Makro Tabblatt löschen von: Mildred
Geschrieben am: 21.01.2021 17:33:05

Hallo zusammen,

ich habe ein Makro, dass Tabellenblätter kopiert wenn in einem Tabellenblatt in 8 verschiedenen Zellen etwas eingegeben wird. Gleichzeitig soll das Makro die angelegten Tabellenblättern löschen, wenn man in einer der Zellen den Zellinhalt löscht. Das Kopieren und Anlegen der Tabellenblätter klappt wunderbar. Wenn nun aber die angelegten Tabellenblätter gelöscht werden sollen, klappt das bei 2 angelegten Tabellenblättern, aber bei den weiteren dann nicht mehr. Das Makro springt scheinbar an irgendeiner Stelle ab, sodass es nicht mehr prüft, ob noch weitere Zellen geleert wurden und somit noch weitere Tabellenblätter gelöscht werden sollen. Damit das Problem vielleicht klarer wird, habe ich eine Datei hochgeladen.

https://www.herber.de/bbs/user/143204.xlsm

Vielen Dank schon mal vorab für eure Hilfe.

V.G. Mildred

Betrifft: AW: Makro Tabblatt löschen
von: Yal
Geschrieben am: 21.01.2021 19:09:12

Hallo Mildred,

die Initialisierung der Variable Nam findet nach dem If statt, aber diese Variable wird im Else verwendet. Das kann nicht gut gehen. Versetze die Initialisierung vor dem If.


Vieles wird wiederholt. Lagert diese Code-Wiederholung in separaten sub/Function. Auch einige Code kann damit gekürzt werden:
For Each ws In ThisWorkbook.Worksheets
    If ws.Name = mstrSheetname Then
        If MsgBox("Tabellenblatt mit Name """ & mstrSheetname & """ wirklich löschen ?",  _
vbYesNo) = vbYes Then
            Application.DisplayAlerts = False
            ws.Delete
        End If
        Exit For
    End If
Next ws
sollte man in
If WS_exists(mstrSheetname) Then Blatt_loeschen (mstrSheetname)

Private Function WS_exists(BlattName As String) As Boolean
'Gibt falsch zurück, wenn WS nicht existiert
On Error Resume Next
    WS_exists = Len(Worksheets(BlattName).Name) > 0
End Function

Private Sub Blatt_loeschen(BlattName As String, Optional Mitbetätigung = True)
Dim Cancel As Boolean
    If Mitbetätigung Then
        Cancel = Not (MsgBox("Tabellenblatt mit Name """ & BlattName & """ wirklich löschen ?",  _
vbYesNo) = vbYes)
    End
    If Not Cancel Then
        Application.DisplayAlerts = False
        Worksheets(BlattName).Delete
        Application.DisplayAlerts = True
    End If
End Sub
Es mag scheinbar länger zu sein, aber nur den Aufruf wird je wiederholt. Die Sub/Function sind nur einmal definiert.

VG
Yal

Betrifft: AW: Makro Tabblatt löschen
von: Mildred
Geschrieben am: 21.01.2021 20:25:49

Hallo Yal,

vielen Dank für deine Hilfe. Leider kenne ich mich mit Makros nicht sehr gut. Deswegen weiß ich nicht, was du mit

"die Initialisierung der Variable Nam findet nach dem If statt, aber diese Variable wird im Else verwendet. Versetze die Initialisierung vor dem If."

und

"Auslagern von Code-Wiederholungen in "separaten sub/Functionin"

meinst.

Ich habe den Code versucht anhand deiner Angaben zu verändern (fett markiert), es hat sich allerdings nichts geändert. 2 Blätter werden gelöscht, der Rest dann nicht mehr, obwohl der Inhalt der Zellen geleert wird. Der komplette Code sieht jetzt wie folgt aus:

Option Explicit

Dim Nam As String
Dim mstrSheetname As String
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Fehler As Integer, ws As Object

    
If Target.Column = 5 Then
    Select Case Target.Row
        Case 12, 18, 24, 30
            If Not IsEmpty(Target.Cells(1, 1).Value) Then
                mstrSheetname = Left(Replace(Target.Cells(1, 1), "/", " "), 30)
                If MsgBox("Tabelenblatt mit Name """ & Target.Text & """ anlegen ?", _
                    vbYesNo, "Blatt Vorlage kopieren") = vbYes Then
                    For Each ws In ThisWorkbook.Worksheets
                        If ws.Name = mstrSheetname Then
                            MsgBox "Blatt mit dem eingegeben Namen " & mstrSheetname _
                            & " existiert bereits!"
                            Application.EnableEvents = False
                            Application.Undo
                            Application.EnableEvents = True
                            Target.Offset(1).Select
                            Exit Sub
                        End If
                    Next
                    Application.ScreenUpdating = False
                    With Worksheets("Kalkulationsvorlage")
                        .Visible = xlSheetVisible
                        .Copy Before:=Worksheets("Kalkulationsvorlage")
                        .Visible = xlSheetVeryHidden
                    End With
                    ActiveSheet.Name = mstrSheetname
                End If
            Else
                If WS_exists(mstrSheetname) Then Blatt_loeschen (mstrSheetname)
            End If
        Case Else
    End Select
End If
If Target.Column = 5 Then
    Select Case Target.Row
        Case 17, 23, 29, 35
            If Not IsEmpty(Cells(Target.Row, 5).Value) Then
        Nam = Left(Replace("ICTP " & Cells(Target.Row - 5, 5), "/", " "), 25)
                If MsgBox("Tabellenblatt mit Name " & Nam & " anlegen ?", _
                    vbYesNo, "Blatt Vorlage kopieren") = vbYes Then
                        For Each ws In ThisWorkbook.Worksheets
                            If ws.Name = Nam Then
                                MsgBox "Blatt mit dem eingegeben Namen " & Nam _
                                & " existiert bereits!"
                            Application.EnableEvents = False
                            Application.Undo
                            Application.EnableEvents = True
                            Target.Offset(1).Select
                                Exit Sub
                            End If
                        Next
                    Application.ScreenUpdating = False
                        With Worksheets("PRELIMINARY STANDARD")
                            .Visible = xlSheetVisible
                            .Copy Before:=Worksheets("PRELIMINARY STANDARD")
                            .Visible = xlSheetVeryHidden
                        End With
                    ActiveSheet.Name = Nam
                   End If
Else
                If WS_exists(Nam) Then Blatt_loeschen (Nam)
            End If
        Case Else
    End Select
End If
Worksheets("Deckblatt Pos 1-4").Select
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim mstrSheetname As String
Dim Nam As String
If Target.Column = 5 Then
    Select Case Target.Row
        Case 12, 18, 24, 30
            mstrSheetname = Left(Replace(Target.Cells(1, 1), "/", " "), 30)
        Case Else
    End Select
End If
If Target.Column = 5 Then
    Select Case Target.Row
        Case 17, 23, 29, 35
            Nam = Left(Replace("ICTP " & Cells(Target.Row - 5, 5), "/", " "), 25)
        Case Else
    End Select
End If
End Sub
Private Function WS_exists(BlattName As String) As Boolean
'Gibt falsch zurück, wenn WS nicht existiert
On Error Resume Next
    WS_exists = Len(Worksheets(BlattName).Name) > 0
End Function

Private Sub Blatt_loeschen(BlattName As String, Optional Mitbetätigung = True)
Dim Cancel As Boolean
    If Mitbetätigung Then
        Cancel = Not (MsgBox("Tabellenblatt mit Name """ & BlattName & """ wirklich löschen ?",  _
_
vbYesNo) = vbYes)
    End If
    If Not Cancel Then
        Application.DisplayAlerts = False
        Worksheets(BlattName).Delete
        Application.DisplayAlerts = True
    End If
End Sub



V.G. Mildred

Betrifft: AW: Makro Tabblatt löschen
von: Yal
Geschrieben am: 22.01.2021 00:03:51

Hallo Mildred,

anbei das gesamte bereinigte Code für "Deckblatt Pos 1-4". Mehr braucht es nicht. Bisherige Code komplett löschen und diese eintragen.

Wiederkehrende Aufgabe wie Blatt_loeschen, Blatt_Duplizieren habe ich mit Steuerungsparameter "Vorlage" und "NeuerName" als separate Prozedure (Sub oder Function) abgelegt. Auch die Prüfung,ob eine Blatt existiert ist separat, weil hier ausgenutzt wird, dass der Aufruf eine nicht existierende Blatt ein Fehler verursacht absichtlich ausgenutz wird ("On Error Resume Next"). Solche Besonderheiten sollte man isolieren.

Darüber hinaus ist es geprüft, dass jedesmal, dass es ein DisplayAlerts= False gibt, am Ende auch einen DisplayAlerts = True stattfindet. Das gleich mit ScreenUpdating. Das scheint der Grund zu sein, warum beim zweiten Löschung nichts mehe tat: EnableEvents war ausgeschaltet.

Nur ein Punkt habe ich angefasst, und in der Logik geändert (das siehst Du in dem IsEmpty von Case 12,18,24,30): BITTE genau prüfen, ob es die Erwartung trifft:
Wenn die erste Zeile eines Blockes (grüne Zelle) geleert wird, dann werden das dazu passende Kalkulationsblatt UND das dazu passende Preliminary-Blatt gelöscht.
Ansonsten wäre der Referenzname im grüne Zelle weg und das dazu gehörende Blatt aus der gelbe Zelle wäre nicht mehr zu löschen.
Wenn die letzte Zeile (Gelbe Zelle) geleert wird, dann wird nur das dazu passende Preliminary-Blatt gelöscht. Wie vorher.

Sollte dies nicht erwünscht sein, im folgende Block
        'wenn die geänderte Zelle leer ist
        If IsEmpty(Target.Value) Then
            If WS_exists(W_Prelim) Then Blatt_loeschen (W_Prelim)
            If WS_exists(W_Kalk) Then Blatt_loeschen (W_Kalk)
        Else
Die Zeile mit W_Prelim löschen.

Da ich nur beschränkte möglichkeit habe zu testen, kann ich nicht sicherstellen, dass alles funktioniert, bin aber zuversichtlich.
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim W_Kalk As String
Dim W_Prelim As String

Application.EnableEvents = False

If Target.Column = 5 Then
    Select Case Target.Row
    Case 12, 18, 24, 30
        W_Kalk = Left(Replace(Target.Text, "/", " "), 30)
        W_Prelim = Left(Replace("ICTP " & Target.Text, "/", " "), 25)
        'wenn die geänderte Zelle leer ist
        If IsEmpty(Target.Value) Then
            If WS_exists(W_Prelim) Then Blatt_loeschen (W_Prelim)
            If WS_exists(W_Kalk) Then Blatt_loeschen (W_Kalk)
        Else
            Blatt_duplizieren "Kalkulationsvorlage", W_Kalk
        End If
    Case 17, 23, 29, 35
        W_Prelim = Left(Replace("ICTP " & Cells(Target.Row - 5, 5), "/", " "), 25)
        'wenn die Zelle in Spalte 5 der geänderte Zeile leer ist
        If IsEmpty(Cells(Target.Row, 5).Value) Then
            If WS_exists(W_Prelim) Then Blatt_loeschen (W_Prelim)
        Else
            If WS_exists(W_Prelim) Then
                Application.Undo
                Target.Offset(1).Select
                MsgBox "Blatt mit dem eingegeben Namen " & W_Prelim & " existiert bereits!"
            Else
                Blatt_duplizieren "PRELIMINARY STANDARD", W_Prelim
            End If
        End If
    Case Else
    End Select
End If

Worksheets("Deckblatt Pos 1-4").Activate
Application.EnableEvents = True
End Sub

Private Function WS_exists(BlattName As String) As Boolean
'Gibt falsch zurück, wenn WS nicht existiert
On Error Resume Next
    WS_exists = Len(Worksheets(BlattName).Name) > 0
End Function

Private Sub Blatt_duplizieren(Vorlage, BlattNeuerName)
Application.ScreenUpdating = False
    With Worksheets(Vorlage)
        .Visible = xlSheetVisible
        .Copy Before:=Worksheets(Vorlage)
        .Visible = xlSheetVeryHidden
    End With
    ActiveSheet.Name = BlattNeuerName
Application.ScreenUpdating = True
End Sub

Private Sub Blatt_loeschen(BlattName As String, Optional Mitbetätigung = True)
Dim Cancel As Boolean
    If Mitbetätigung Then
        Cancel = Not (MsgBox("Tabellenblatt mit Name """ & BlattName & """ wirklich löschen ?",  _
vbYesNo) = vbYes)
    End If
    If Not Cancel Then
        Application.DisplayAlerts = False
        Worksheets(BlattName).Delete
        Application.DisplayAlerts = True
    End If
End Sub

Viel Erfolg
Yal

Betrifft: AW: Makro Tabblatt löschen
von: Mildred
Geschrieben am: 22.01.2021 08:48:21

Guten Morgen Yal,

vielen Dank für deine Rückmeldung, leider gibt es ein Problem mit dem Kopieren der Tabellenblätter "PRELIMINARY STANDARD" + "Kalkulationsvorlage". Das klappt leider nicht mehr. Wenn ich es richtig sehe, geht es um folgenden Teil (bin mir aber nicht sicher) an welcher Stelle das Makro hängt.
Private Sub Blatt_duplizieren(Vorlage, BlattNeuerName)
Application.ScreenUpdating = False
    With Worksheets(Vorlage)
        .Visible = xlSheetVisible
        .Copy Before:=Worksheets(Vorlage)
        .Visible = xlSheetVeryHidden
    End With
    ActiveSheet.Name = BlattNeuerName
Application.ScreenUpdating = True
End Sub
Ich habe mehrere Sachen ausprobiert. Ich dachte vielleicht das es an dem Wort "Vorlage" liegt, deswegen habe ich Vorlage durch "Kalkulationsvorlage" ersetzt, dann hatte ich überlegt, ob es evtl. am "BlattNeuerName" liegt, deswegen habe ich den Namen durch W_Kalk ersetzt, aber irgendwie finde ich den Fehler nicht.

Würde mich über eine Rückmeldung freuen.

V.G. Mildred

Betrifft: AW: Makro Tabblatt löschen
von: ralf_b
Geschrieben am: 22.01.2021 09:07:47

das makro hängt genau da wo der gelb markierte Bereich ist. Und es gibt im Normalfall eine Fehlermeldung. Wie wäre es wenn du diese Informartionen lieferst?


gruß

rb

Betrifft: AW: Makro Tabblatt löschen
von: Mildred
Geschrieben am: 22.01.2021 09:19:49

Hallo Ralf,

das hätte ich gerne gemacht, nur wird der Bereich nicht gelb markiert. Es tut sich nichts. Ich gebe etwas in den entsprechenden Zellen ein und dann wars das. Es kommt keine Fehlermeldung.

V.G. Mildred

Betrifft: AW: Makro Tabblatt löschen
von: ralf_b
Geschrieben am: 22.01.2021 09:43:41

dann "hängt" das Makro auch nicht.

Betrifft: AW: Makro Tabblatt löschen
von: Yal
Geschrieben am: 22.01.2021 09:43:47

Hallo Mildred,

ich habe gerade gesehen, dass das gesamt auch startet, wenn die Zelle für Blatt-Name leer ist.
Da ist noch ein paar Nacharbeit notwendig. Werde aber heute kaum Zeit zur Verfügung haben. Da muss Du Dir gedulden, oder hoffen, dass ein Kollege übernimmt.

VG
Yal

Betrifft: AW: Makro Tabblatt löschen
von: Yal
Geschrieben am: 22.01.2021 19:08:10

Halo Mildred,

anbei die Version mit Prüfung der Gültigkeit der gewünschte Blattname.
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim W_Kalk As String
Dim W_Prelim As String

Application.EnableEvents = False

If Target.Column = 5 Then
    Select Case Target.Row
    Case 12, 18, 24, 30
        If Leername_prüfen(Target) Then Exit Sub
        W_Kalk = Trim(Left(Replace(Target.Text, "/", " "), 30))
        W_Prelim = Trim(Left(Replace("ICTP " & Target.Text, "/", " "), 25))
        'wenn die geänderte Zelle leer ist
        If IsEmpty(Target.Value) Then
            If WS_exists(W_Prelim) Then Blatt_loeschen (W_Prelim)
            If WS_exists(W_Kalk) Then Blatt_loeschen (W_Kalk)
        Else
            Blatt_duplizieren "Kalkulationsvorlage", W_Kalk
        End If
    Case 17, 23, 29, 35
        W_Prelim = Left(Replace("ICTP " & Target.Offset(-5, 0).Text, "/", " "), 25)
        If Leername_prüfen(Target.Offset(-5, 0)) Then Exit Sub
        'wenn die Zelle in Spalte 5 der geänderte Zeile leer ist
        If IsEmpty(Cells(Target.Row, 5).Value) Then
            If WS_exists(W_Prelim) Then Blatt_loeschen (W_Prelim)
        Else
            If WS_exists(W_Prelim) Then
                Application.Undo
                Target.Offset(1).Select
                MsgBox "Blatt mit dem eingegeben Namen " & W_Prelim & " existiert bereits!"
            Else
                Blatt_duplizieren "PRELIMINARY STANDARD", W_Prelim
            End If
        End If
    Case Else
    End Select
End If

Worksheets("Deckblatt Pos 1-4").Activate
Application.EnableEvents = True
End Sub

Private Function Leername_prüfen(Zelle As Range) As Boolean
    If Trim(Zelle.Text) = "" Then
        MsgBox "Im Zelle " & Target.Address(False, False) & "ist kein gültige Name vorhanden.",  _
vbCritical
        Leername_prüfen = True
    End
End Function

Private Function WS_exists(BlattName As String) As Boolean
'Gibt falsch zurück, wenn WS nicht existiert
On Error Resume Next
    WS_exists = Len(Worksheets(BlattName).Name) > 0
End Function

Private Sub Blatt_duplizieren(Vorlage, BlattNeuerName)
Application.ScreenUpdating = False
    With Worksheets(Vorlage)
        .Visible = xlSheetVisible
        .Copy Before:=Worksheets(Vorlage)
        .Visible = xlSheetVeryHidden
    End With
    ActiveSheet.Name = BlattNeuerName
Application.ScreenUpdating = True
End Sub

Private Sub Blatt_loeschen(BlattName As String, Optional Mitbetätigung = True)
Dim Cancel As Boolean
    If Mitbetätigung Then
        Cancel = Not (MsgBox("Tabellenblatt mit Name """ & BlattName & """ wirklich löschen ?",  _
vbYesNo) = vbYes)
    End If
    If Not Cancel Then
        Application.DisplayAlerts = False
        Worksheets(BlattName).Delete
        Application.DisplayAlerts = True
    End If
End Sub

VG
Yal

Betrifft: AW: Makro Tabblatt löschen
von: Mildred
Geschrieben am: 22.01.2021 20:26:31

Hallo Yal,

vielen Dank für den Code. Das folgende Makro macht leider Probleme. Es kommt die Fehlermeldung, dass die Variable nicht defniert ist. Leider weiß ich nicht, um welche Variable es geht. Ich hatte gedacht, dass es nur die 2 Variablen "W_Kalk" + "W_Prelim" gibt.
Private Function Leername_prüfen(Zelle As Range) As Boolean
    If Trim(Zelle.Text) = "" Then
        MsgBox "Im Zelle " & Target.Address(False, False) & "ist kein gültige Name  _
vorhanden.", _
vbCritical
        Leername_prüfen = True
    End
End Function
Viele Grüße
Mildred

Betrifft: ersetze Target durch Zelle owt
von: ralf_b
Geschrieben am: 22.01.2021 20:30:54



Betrifft: AW: ersetze Target durch Zelle owt
von: Mildred
Geschrieben am: 22.01.2021 21:18:42

Hallo Ralf,

danke für deine Hilfe. Grundsätzlich funktioniert das Makro jetzt, aber ich befürchte, dass es keine gute Idee war, einzelne Codes auszulagern. Wenn bei einem Code etwas nicht funktioniert, dann funktionieren die anderen auch nicht mehr. Es geht darum, dass bei der Eingabe in verschiedenen Zellen Tabellenblätter kopiert werden und mit einem neuen Namen angelegt werden. Gleichtzeitig sollte man aber auch die Möglichkeit haben, die angelegten Tabellenblätter zu löschen, wenn man die Eingabe wieder entfernt. Bei dem letzten Teil hatte ich ein Problem, dennoch wurden weiterhin die Tabellenblätter kopiert. Das passiert jetzt leider nicht mehr.

Bei dem oben aufgeführten Code, poppt, wenn die Zelle geleert wird, eine Fehlermeldung auf, das kein gültiger Name exisitiert. Und danach funktioneren die anderen Codes nicht mehr, z.B. werden die Tabellenblätter nicht mehr kopiert.

V.G. Mildred

Betrifft: AW: ersetze Target durch Zelle
von: Yal
Geschrieben am: 22.01.2021 22:09:58

Hallo Mildred,

es gibt eine Menge Leute, die in den letzten 60 Jahren gemeint habe, es ist durchaus ein gute Idee, einzelne Codes auszulagern. Die nennt man Programmierer.

Sarkasmus beiseite, es tut aufrichtig Leid, dass es nicht funktioniert wie erwartet. Ich habe versucht, mit bestem Wissen und Gewissen das Vorhaben zu verstehen, aber es scheint nicht ausreichend zu sein.

Was Du jetzt brauchst, ist jemand, der über deine Schulter schauen kann/darf und den Code in Zusammenhang mit der befüllte oder nicht befüllte Zelle beurteilen kann. Weil so lang ich keine "lebende" Application vor mir habe, kann ich mir nur eine Vorstellung davon machen. Und es scheint nicht ausreichend zu sein.

Nur eine letzte Hinweis: diese Prüfung sagt "Im Zelle xy ist keine gültige name vorhanden". Eigentlich sollte es heissen: gar keine Name vorhanden (weil leer). Die Adresse ist Dir dabei mitgeteilt, dann füge einen gültigen Namen in diese benannte Zelle und es ollte weiter gehen können.
Private Function Leername_prüfen(Zelle As Range) As Boolean
      If Trim(Zelle.Text) = "" Then
          MsgBox "Im Zelle " & Zelle.Address(False, False) & "ist kein gültige Name  _
  vorhanden.", _
  vbCritical
          Leername_prüfen = True
      End
  End Function
VG Yal

Betrifft: AW: ersetze Target durch Zelle
von: Manuela
Geschrieben am: 23.01.2021 14:23:52

Hallo Yal,

vielen Dank für deine Hilfe. Du hast natürlich vollkommen recht, jemand der sich mit Makros fast gar nicht auskennt, sollte Vorschläge von Profis nicht in Frage stellen, sorry. Das war von mir nicht bös gemeint. Ich bin allen im Forum dankbar, die mir bei meinen Makros helfen. Ich wollte nicht als undankbar erscheinen, ganz im Gegenteil, wenn ihr mich bei meinem Makro nicht unterstützt hättet, wäre ich überhaupt nicht so weit gekommen.

Ich werde mich weiter an dem Makro versuchen.

V.G. Mildred

Betrifft: AW: ersetze Target durch Zelle
von: Yal
Geschrieben am: 23.01.2021 21:03:23

Hallo Mildred,

Ich wollte nicht böse oder irritiert wirken, ich bitte um Entschuldigung.

Üblicherweise sind die Ratschläge im Forum nur eine Hilfestellung, die von dem betroffenen weiterentwickelt werden. In deinem Fall hast Du nicht die Möglichkeit, diese weiterzuentwickeln. Es ist keinesfalls dein Schuld, aber es blockiert die Lösungsfindung und frustriert.

Ich habe mich kurz gehen lassen. Ich passe nächste Mal auf. Versprochen.

VG
Yal

Betrifft: AW: Makro Tabblatt löschen
von: Peter Kloßek
Geschrieben am: 22.01.2021 00:12:41

Hallo Mildred,

bevor ich mich durch diese langen Makros quäle, möchte ich Dir lieber einen völlig neuen Lösungsvorschlag unterbreiten.

https://www.herber.de/bbs/user/143210.xlsm

Die in den Zellen A4 bis A9 genannten Namen können selbstverständlich durch andere Begriffe ersetzt werden. Danach werden dann die Tabellenblätter angelegt und benannt bzw. gelöscht. In den Zellen E17, E29, usw. können dieselben Begriffe in beliebiger Reihenfolge eingegeben oder gelöscht werden. Sobald man hier eine Änderung gemacht hat, wird man aufgefordert, durch Klick auf den Button zu aktualisieren. Man kann aber zunächst alle Änderungen eingeben und braucht dann nur ein Mal zu aktualisieren.

In dem Block von M1 bis Q9 sind einige Angaben für das Operating vorhanden, die vom Programm automatisch erstellt werden.

Bitte mal ausprobieren, Rückmeldung wäre schön.

Mit freundlichem Gruß
Peter Kloßek

Betrifft: AW: Makro Tabblatt löschen
von: Mildred
Geschrieben am: 22.01.2021 09:05:18

Hallo Peter,

vielen Dank für deine Mühe. Ich habe gesehen, dass du das ursprüngliche Makro komplett geändert hast. Ich kenne mich mit Makros nicht sehr gut aus. Deswegen kann ich deinen Code nicht nachvollziehen. Das Tabellenblatt "PRELIMINARY STANDARD" wird bei einer Eingabe in Zelle E17 nicht kopiert, stattdessen aber das Tabellenblatt "Kalkulationsvorlage ". Ich müsste in deinem Code irgendwo einen Schritt einfügen, damit das andere Tabellenblatt kopiert wird. Ich weiß aber nicht an welcher Stelle. Sorry, trotzdem vielen Dank für deine Hilfe.

V.G. Mildred

Betrifft: AW: Makro Tabblatt löschen
von: Peter Kloßek
Geschrieben am: 22.01.2021 12:34:37

Hallo Mildred,

bei meiner ersten Antwort habe ich die 2. Vorlagendatei nicht berücksichtigt. Dies hole ich hiermit nach.

https://www.herber.de/bbs/user/143213.xlsm

Bitte nochmal probieren.

M.f.G. Peter Kloßek

Betrifft: AW: Makro Tabblatt löschen
von: Mildred
Geschrieben am: 22.01.2021 20:36:11

Hallo Peter,

vielen Dank für deine Mühe. Es scheint auch alles zu klappen, nur leider ist deine Lösung für meine Datei nicht praktikabel. Ich erstelle die Datei für andere Anwender. Diese Anwender haben mit Excel nur wenig Erfahrung und mit Makros gar keine. Wenn dann ein Makro durchläuft, dass hin und her springt, gehen die Anwender davon aus, dass etwas mit der Datei nicht stimmt, auch wenn das Makro macht, was es machen soll.

Sorry, aber trotzdem vielen Dank für deine Hilfe!!!

V.G. Mildred

Betrifft: Anspruchsvolle Kienten
von: Peter Kloßek
Geschrieben am: 23.01.2021 00:31:06

Hallo Mildred,

die überflüssigen Bildschirmbewegungen habe ich abgestellt - so gut wie eben möglich - und sende Dir hier die geänderte Datei.

https://www.herber.de/bbs/user/143240.xlsm

Immerhin ist es schön zu hören, dass das Makro das macht, was gewünscht wird. Sollten noch weitere Wünsche bestehen, so lass es mich wissen.

M.f.G. Peter Kloßek

Betrifft: AW: Anspruchsvolle Kienten
von: Manuela
Geschrieben am: 23.01.2021 14:28:09

Hallo Peter,

vielen Dank für das Makro. Auch möchte ich mich bei dir entschuldigen, es tut mir leid, dass ich eine anspruchsvolle Klientin bin. Ich wollte nicht als undankbar erscheinen. Ich bin wirklich froh, dass mir hier im Forum immer geholfen wird.

V.G. Mildred

Betrifft: AW: Anspruchsvolle Klienten
von: Peter Kloßek
Geschrieben am: 23.01.2021 15:20:23

Hallo Mildred,

gemeint waren Deine anspruchsvollen Klienten, nicht Du selbst. Ich gehe nun davon aus, dass Du bzw. Deine Klientel mit der letzten Version zufrieden seid. Das "Bildschirmflackern" ist bei Excel leider nicht immer ganz zu vermeiden.

Du hast gefragt, was man tun könnte, wenn mal jemand bei den Eingaben/Löschungen einen Fehler macht, um diesen zu korrigieren. Es gibt drei Möglichkeiten von Korrekturmaßnahmen: 1) Nutzung der UNDO-Funktion in Excel, 2) Datei schließen ohne speichern und den letzten gespeicherten Stand öffnen sowie 3) Sicherungsdatei vor der Bearbeitung erstellen und diese nach einem Speichern mit fehlerhaften Daten öffnen. Nähere Erläuterungen in der beiliegenden Datei.

https://www.herber.de/bbs/user/143264.xlsm

Falls noch Fragen auftauchen sollten, einfach wieder melden.

Mit freundlichem Gruß und ein schönes Wochenende.

Peter Kloßek