Clever-Excel-Forum

Normale Version: Löschen Makro anpassen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute,

mein Löschen Makro funktioniert nicht richtig.
Ich habe in meinen Blättern Jan-Dez 2 leere Spalten gelöscht. Die Feiertage, auf die Bezug genommen wird stehen jetzt im Bereich Q9:R37, wobei in Spalte Q das Datum und in R der jeweilige Text des Feiertags stehen. Jetzt stimmt die Formel, die nach dem Löschen die Namen der Feiertage in den Bereich J5:J35 wieder eingetragen soll, nicht mehr! Wie müsste die Formel im Makro bei "FormulaLocal=" angepasst werden?


Code:
Option Explicit

Sub Löschen()
Dim strAntwort As String

strAntwort = MsgBox("Achtung: Das gesamte Tabellenblatt wird zurückgesetzt!", _
vbExclamation + vbOKCancel, "Hinweis")
If strAntwort = vbCancel Then Exit Sub 'Bei "Abbrechen" abbrechen.

With Application
.ScreenUpdating = False 'Bildschirmaktualisierung abschalten.
.EnableEvents = False 'Ereignissprozeduren deaktivieren.
.Calculation = xlCalculationManual
End With

With ActiveSheet
' .Unprotect
.Range("C5:H35").ClearContents
.Range("J5:J35").FormulaLocal = _
"=WENN(ISTNV(INDEX($S$9:$T$37;VERGLEICH($B5;$S$9:$S$37;0);2));"";INDEX($S$9:$T$37;VERGLEICH($B5;$S$9:$S$37;0);2))"
.Range("D37").Value = "0"
.Range("C5").Select
' .Protect
End With

strAntwort = MsgBox("Die anderen Tabellenblätter ebenfalls zurücksetzen?", _
vbQuestion + vbYesNo + vbDefaultButton2, "Frage")
If strAntwort = vbYes Then
If ANDERE_TABELLEN = True Then
MsgBox "Alle Monate auf Null gesetzt.", vbInformation, "Information"
End If
End If

With Application
.ScreenUpdating = True 'Bildschirmaktualisierung abschalten.
.EnableEvents = True 'Ereignissprozeduren deaktivieren.
.Calculation = xlCalculationAutomatic
.ActiveWindow.ScrollRow = 3
End With
End Sub
Private Function ANDERE_TABELLEN() As Boolean
   Dim Sh As Worksheet
   For Each Sh In ThisWorkbook.Worksheets
       If Sh.Name <> ActiveSheet.Name And Len(Sh.Name) = 3 Then
           If TABELLE_AUF_NULL(Sh.Name) = False Then
               MsgBox "Fehler bei Tabelle: " & Sh.Name, _
                       vbCritical, "Abbruch"
               Exit Function
           End If
       End If
   Next
   ANDERE_TABELLEN = True 'Erfolg vermerken.
End Function
Private Function TABELLE_AUF_NULL(strTabelle As String) As Boolean
'    On Error GoTo Ende 'Fehlerbehandlung übernehmen.
   With ThisWorkbook.Sheets(strTabelle) 'Alles auf dieses Tabellenblatt beziehen:
      ' .Unprotect
       .Range("C5:H35").ClearContents
       .Range("J5:J35").FormulaLocal = _
        "=WENN(ISTNV(INDEX($S$9:$R$37;VERGLEICH($B5;$S$9:$S$37;0);2));"""";INDEX($S$9:$T$37; _
VERGLEICH($B5;$S$9:$S$37;0);2))"
       .Range("D37").Value = "0"
      ' .Protect
        Application.GoTo .Range("C5")
        ActiveWindow.ScrollRow = 3
        ThisWorkbook.Sheets("Jan").Activate
   End With
   TABELLE_AUF_NULL = True 'Erfolg vermerken.
Ende:
'    On Error GoTo 0 'Fehlerbehandlung zurückgeben.
End Function


Gruß
ossi
Hallo,

wenn man mit Makros arbeitet, dann ich Löschen eine der schlimmsten Fehler die man machen kann. Formeln in der Tabelle passt Excel automatisch an die neuen Bedingungen an, aber der VBA-Code wird nicht mit angepasst, so dass dann alles nicht mehr stimmt.

Ich will mich jetzt nicht mit deinem VBA-Code auseinandersetzen, zumal die dazugehörige Datei fehlt, aber ich empfehle dir, füge die gelöschten leeren Spalten wieder ein und der Code sollte richtig laufen. Danach kannst du die "störenden leeren" Spalten ausblenden, nicht löschen! Dann bleiben auch alle VBA-Bezüge erhalten. In einem bestehenden Code etwas zun ändern bringt immer Ärger, weil man bestimmt an irgend einer Stelle etwas übersehen hat, was auch geändert werden muss.
[attachment=26291]
Hallo Günther,

danke für den Hinweis.
Nichtsdestotrotz wäre es schön, wenn du in die Datei mal reinschauen könntest. Es betrifft ja nur die Zeile mit "FormulaLocal = ", die angepasst werden muss.
Ich lade mal - der Größe wegen - nur das Blatt Jan der Mappe hoch.

Gruß
ossi

Hallo Günter,

ich habe auch mal - wie du empfohlen hast - die 2 gelöschten Spalten wieder eingefügt und danach ausgeblendet.
Auch dann funktioniert es nicht!

Gruß
ossi

[attachment=26294]
Hallo Günter,

ich habe das falsche Muster geschickt. Das Makro funktioniert zwar, aber in J5:J35 werden nicht die Feiertage wieder eingetragen!

Gruß
ossi
Hallo, :19:

so werden sie wieder eingetragen: :21:

Code:
=WENN(ISTNV(INDEX($Q$9:$R$37;VERGLEICH($B5;$Q$9:$Q$37;0);2));"""";INDEX($Q$9:$R$37;VERGLEICH($B5;$Q$9:$Q$37;0);2))

Du könntest dir die Arbeit etwas vereinfachen, wenn du mit Bereichsnamen, also dem Namensmanager arbeitest - dann musst du die Formel nicht jedesmal anpassen, wenn sich etwas ändert. :21:
[attachment=26299]
Hallo Leute,

danke für die Tipps.

Die Mappe, die ich habe funktioniet jetzt soweit bis auf Folgendes:

Sie hieß ursprünglich Mappe1.xls und das Löschen-Makro über den Button hat auch funktioniert.
Ich habe die Mappe aber umbenannt in Stundennachweis.xls. Wenn ich jetzt auf den Löschen-Button drücke, wird immer beanstandet, dass die Mappe1.xls gelöscht oder verschoben wurde und das Löschen wird nicht ausgeführt. Woran liegt das? Am Makro selbst habe ich nichts verändert.
Im Prinzip soll das Löschen unabhängig vom Mappen-Namen ausgeführt werden.

Kann jemand helfen?

Gruß
ossi
Upps!
Sie hieß natürlich Muster1.xls
Hallo,

gehe mit dem Mauszeiger auf den Button, drücke die rechte Maustaste, gehe im Kontextmenü auf Makro zuweisen, suche das passende Makro aus und klicke auf OK. Wiederhole das für die weiteren Buttons.
. . . vielen Dank für die Hilfe.

Gruß
ossi