Discussion:
verhindern löschen von Zeilen
(zu alt für eine Antwort)
Willy Steffen
2009-02-01 11:56:00 UTC
Permalink
Hallo guten Tag,
Ich möchte ohne den Schutz zu aktivieren, per VBA verhindern, dass bestimmte
Zeilen gelöscht werden können.
Zum Beispiel: Zeilennummer 6 und die flexible Zeile mit dem Namen "TabEnde"
Ist das möglich, wenn ja kann mir da jemand helfen?
Vielen Dank im Voraus
Willy
stefan onken
2009-02-02 15:00:16 UTC
Permalink
On 1 Feb., 12:56, Willy Steffen
Post by Willy Steffen
Hallo guten Tag,
Ich möchte ohne den Schutz zu aktivieren, per VBA verhindern, dass bestimmte
Zeilen gelöscht werden können.
Zum Beispiel: Zeilennummer 6 und die flexible Zeile mit dem Namen "TabEnde"
Ist das möglich, wenn ja kann mir da jemand helfen?
Vielen Dank im Voraus
Willy
hallo Willy,
man kann die Optionen, die Excel zum löschen bietet (etwa Bearbeiten/
Zellen löschen oder die Taste Entf), auf ein eigenes Makro umleiten
( mit OnAction und OnKey) , in diesem Makro prüfen, ob die Markierung
Zellen der Zeile 6 enthält und das löschen dann verhindern. Was aber
soll passieren, wenn jemand Zeile 2 und 3 entfernt? Zeile 6 würde dann
in Zeile 4 aufrücken.

Gruß
stefan
Willy Steffen
2009-02-03 08:24:01 UTC
Permalink
Hallo Stefan
Vielen Dank für die Antwort
Die Zeilen bis und mit 5 sind durch den Blattschutz geschützt. In der Zeile
6 sind u.a. in spezifizierten Spalten Formeln in den Zellen. Die Tabelle
endet z. B. mit Zeilennr, 100. Ich habe diesen Zeilenbereich mit dem Namen
"TabEnde" versehen.
Zwischen der Zeile 6 und 100 kann ich nun mit Makros die Tabelle vergrössern
oder verkleinern, etc. Mit dem Makro "Linie einfügen" kopiere ich jeweils die
obere Zeila nach unten, deshalb darf die Zeile Nr. 6 wegen den Formeln nicht
gelöscht werden können.
Ich muss mich mal über die Befehle OnKey und OnAction informieren.
Vielen Dank für Deine Bemühungen im Voraus.
Willy
Post by stefan onken
On 1 Feb., 12:56, Willy Steffen
Post by Willy Steffen
Hallo guten Tag,
Ich möchte ohne den Schutz zu aktivieren, per VBA verhindern, dass bestimmte
Zeilen gelöscht werden können.
Zum Beispiel: Zeilennummer 6 und die flexible Zeile mit dem Namen "TabEnde"
Ist das möglich, wenn ja kann mir da jemand helfen?
Vielen Dank im Voraus
Willy
hallo Willy,
man kann die Optionen, die Excel zum löschen bietet (etwa Bearbeiten/
Zellen löschen oder die Taste Entf), auf ein eigenes Makro umleiten
( mit OnAction und OnKey) , in diesem Makro prüfen, ob die Markierung
Zellen der Zeile 6 enthält und das löschen dann verhindern. Was aber
soll passieren, wenn jemand Zeile 2 und 3 entfernt? Zeile 6 würde dann
in Zeile 4 aufrücken.
Gruß
stefan
Eberhard Funke
2009-02-03 09:27:16 UTC
Permalink
Post by Willy Steffen
Die Zeilen bis und mit 5 sind durch den Blattschutz geschützt. In der Zeile
6 sind u.a. in spezifizierten Spalten Formeln in den Zellen. Die Tabelle
endet z. B. mit Zeilennr, 100. Ich habe diesen Zeilenbereich mit dem Namen
"TabEnde" versehen.
Zwischen der Zeile 6 und 100 kann ich nun mit Makros die Tabelle vergrössern
oder verkleinern, etc. Mit dem Makro "Linie einfügen" kopiere ich jeweils die
obere Zeila nach unten, deshalb darf die Zeile Nr. 6 wegen den Formeln nicht
gelöscht werden können.
Ich muss mich mal über die Befehle OnKey und OnAction informieren.
Hallo Willy,

"TabEnde" war zuvor eine *Zeile*, jetzt ist es ein *Bereich*.
Zuvor sollte die Zeile "TabEnde" nicht gelöscht erden können, jetzt willst
Du TabEnde "vergrößern oder *verkleinern* ".
Das ist ein bischen irreführend.

Ich gehe jetzt davon aus, dass *nur_Zeile_6* nicht gelöscht werden darf.

In Zeile 6 setzt Du in eine freie Spalte irgendetwas, z. B. "x" (ohne "").
Ich habe hierfür J6 vorgesehen.
-------------------------

In das Modul "Diese Arbeitsmappe"

Private Sub Workbook_Open()
Marker = Sheets("Tabelle1").Range("J6").Value
End Sub
-----------------------
In ein "normales" Modul:

Public Marker

Sub WertSetzen()
Marker = Sheets("Tabelle1").Range("J6").Value
End Sub
-------------------------------------------
In das Modul des Tabellenblattes (bei mir Tabelle1):

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 6 Then
Application.EnableEvents = False
If Range("J6").Value <> Marker Then
Application.Undo
End If
Application.EnableEvents = True
End If
End Sub

Vor dem ersten Versuch musst Du das Sub WertSetzen von Hand starten.

Wenn die Zeile 6 gelöscht wird, der ursprüngliche Wert J6 also nicht mehr
existiert, dann ist das neue J6 <> dem Wert der Public Marker und die
Aktion (Löschen der Zeile) wird rückgängig gemacht.
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Eberhard Funke
2009-02-03 10:00:38 UTC
Permalink
Am Tue, 3 Feb 2009 10:27:16 +0100 schrieb Eberhard Funke:

Ergänzung:

Alle *händischen* Änderungen in Zeile 6 werden automatisch rückgängig
gemacht (gilt also *nicht* für Wertänderung der Formeln).

Willst Du dennoch eine händische Änderung in Zeile 6 vornehmen, dann gib im
Direktfenster ein:
Application.EnableEvents = False (Returntaste)
Anschließend musst Du, damit die ganze Geschichte wieder funktioniert,
diesen Befehl aufheben mit
Application.EnableEvents = False (Returntaste).
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Eberhard Funke
2009-02-03 10:16:17 UTC
Permalink
Am Tue, 3 Feb 2009 11:00:38 +0100 schrieb Eberhard Funke:


Hallo Willy,

grrrrr..........vergisse die
Das war mir unterwegs noch eingefallen, und ich hatte es schnell und ohne
Überlegung/Prüfung eingehackt.
--
Mit freundlichen Grüssen Eberhard
XP home XL 2000
Eberhard(punkt)W(punkt)Funke(at)t-online.de
Wolfgang Habernoll
2009-02-03 15:16:11 UTC
Permalink
Hallo Willy
Post by Willy Steffen
Hallo Stefan
Vielen Dank für die Antwort
Die Zeilen bis und mit 5 sind durch den Blattschutz geschützt. In der Zeile
6 sind u.a. in spezifizierten Spalten Formeln in den Zellen. Die Tabelle
endet z. B. mit Zeilennr, 100. Ich habe diesen Zeilenbereich mit dem Namen
"TabEnde" versehen.
Zwischen der Zeile 6 und 100 kann ich nun mit Makros die Tabelle vergrössern
oder verkleinern, etc. Mit dem Makro "Linie einfügen" kopiere ich jeweils die
obere Zeila nach unten, deshalb darf die Zeile Nr. 6 wegen den Formeln nicht
gelöscht werden können.
Ich muss mich mal über die Befehle OnKey und OnAction informieren.
Vielen Dank für Deine Bemühungen im Voraus.
Willy
allerdings könntest du dann immer noch über das Menü löschen, versuch doch mal
folgende Idee. Du erkennst im Code die gewünschte Zeile 6 und "TabEnd" und kannst sie
noch erweitern bzw. anpassen. Allerdings ist es sehr Versionsabhängig da die
ausgefür´hrte Action im "Klatext" augewertet wird.


Private Sub Worksheet_Change(ByVal Target As Range)
Dim blnClear As Boolean
Dim strAction As String
strAction = Application.CommandBars(1).FindControl(ID:=128, Recursive:=True).Caption
'
If Mid(strAction, 14, 14) = "Zellen löschen" Or _ '' Hier ggf. Text der XL-Version
anpassen
Mid(strAction, 14, 15) = "Inhalte löschen" Then
'
Select Case Target.Row
Case Is = 6
blnClear = False
Case Is = Range("TabEnd").Row
blnClear = False
Case Else
blnClear = True
End Select
If blnClear Then: Exit Sub
MsgBox ("Hier darf nicht gelöscht werden")
On Error Resume Next
Application.EnableEvents = False
Application.Undo
End If
EventErr:
Application.EnableEvents = True
End Sub
--
mfG
Wolfgang Habernoll

[ Win XP Home SP-2 , XL2002 ]
Lesen Sie weiter auf narkive:
Loading...