Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
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

VBA Schutz von Zellen mit Formeln

VBA Schutz von Zellen mit Formeln
22.05.2023 12:40:21
Joschi Witchcraft

Hallo Forum.

Ich brauche wieder einmal Rat aus dem Forum.

In einer Excel-Tabelle gibt es viele Zellen mit einer Formel. Der Anwender soll nur in der Lage sein, in Zellen ohne Formel etwas ändern zu können. Welche leicht zu realisierende Möglichkeiten habe ich?

Gruß Joschi

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Schutz von Zellen mit Formeln
22.05.2023 12:55:03
Daniel
Hi
Alle Zellen markieren
Im Kontextmenü "Zelle Formatieren Schutz " den Haken "gesperrt" rausnehmen
Markierung auf Zellen mit Formel einschränken (Menü Start - Bearbeiten - Suchen und Auswählen - Formeln)
Dann den Haken "gesperrt" für diese Zellen setzen
Jetzt den Blattschutz aktivieren.
Gruß Daniel


AW: VBA Schutz von Zellen mit Formeln
22.05.2023 13:04:31
Joschi Witchcraft
Hallo Daniel.

Danke für Deinen Vorschlag.

Aktuell habe ich in meiner Tabelle rund 50 Zellen mit Formeln. Nachdem die Möglichkeit besteht, weitere Zeilen einzufügen, kommen weitere Zellen hinzu. Bei dieser Menge ist es kaum vorstellbar, dies über das Kontextmenü zu sperren.

In VBA kann ich die Zellen leicht erkennen. WIe könnte ich einen Schutz mit VBA realisieren?

Gruß Joschi


Anzeige
AW: VBA Schutz von Zellen mit Formeln
22.05.2023 13:14:24
MCO
Versuch das mal....

Sub Makro1()
    With ActiveSheet
        If .ProtectContents Then .Unprotect "Passwort"
        .UsedRange.SpecialCells(xlCellTypeBlanks).Locked = False
        .UsedRange.SpecialCells(xlCellTypeFormulas, 23).Locked = True
        .Protect "Passwort"
    End With
End Sub
Gruß, MCO


AW: VBA Schutz von Zellen mit Formeln
22.05.2023 14:35:05
Joschi Witchcraft
Hallo MCO.

Das funktioniert so nicht:

Mein Code:

With ActiveSheet
If .ProtectContents Then .Unprotect
.UsedRange.SpecialCells(xlCellTypeFormulas, Type:=XlCellType.xlCellTypeFormulas).Select
.UsedRange.SpecialCells(xlCellTypeFormulas, Type:=XlCellType.xlCellTypeFormulas).Locked = True
'Protect
End With

Mit dem ".Select" habe ich gesehen, dass die von mir gewünschten Zellen angesprochen werden.

Doch nachdem obiger Code ausgeführt ist, kann ich keines der Felder mehr ändern. Und ohne ".Protect" kann ich alle Felder ändern; auch die mit Formeln.

Gruß Joschi


Anzeige
AW: VBA Schutz von Zellen mit Formeln
22.05.2023 14:43:50
Daniel
Hi
die Standardeinstellung für Zellen ist "locked = True"
du müsstest also erstmal alle Zellen entsperren, um danach die Formel zu sperren:

Cells.Locked = false
Cells.SpecialCells(xlcelltypeformulas).Locked = True
Gruß Daniel


AW: VBA Schutz von Zellen mit Formeln
22.05.2023 15:54:44
Joschi Witchcraft
Hallo Daniel.

Das mit "Cells.Locked = false" habe ich übernommen, Doch am Verhalten hat sich nichts verändert; ich kann weiterhin alle Zellen ändern.

Gruß Joschi


AW: VBA Schutz von Zellen mit Formeln
23.05.2023 08:33:45
MCO
Moin!

Wie soll dass denn funktionieren, wenn du den Code wesentlich änderst?!?
.UsedRange.SpecialCells(xlCellTypeBlanks).Locked = False
heißt, dass ungefüllte Zellen entsperrt sind.
.Protect "Passwort"
sperrt das Blatt, ABER NUR; WENN DU DAS NICHT AUSKOMMENTIERST!

Gruß, MCO


Anzeige
AW: VBA Schutz von Zellen mit Formeln
23.05.2023 11:33:49
Joschi Witchcraft
Guten Morgen, MCO

Nach einem Hinweis im Thread hatte ich den Code wie folgt angepasst:

With ActiveSheet
If .ProtectContents Then .Unprotect
Cells.Locked = False
.UsedRange.SpecialCells(xlCellTypeFormulas, Type:=XlCellType.xlCellTypeFormulas).Select
.UsedRange.SpecialCells(xlCellTypeFormulas, Type:=XlCellType.xlCellTypeFormulas).Locked = True
.Protect
End With

Die Zeile mit "xlCellTypeBlanks" habe ich bewusst entfernt, weil ich sonst in den vorgesehenen Zellen keine Werte hätte überschreiben dürfen.
Mit diesem Code ist es allerdings nicht möglich, neue Zeilen einzufügen. Deshalb habe ich nach einer anderen Lösung gesucht, und mit "UNDO" experimentiert.

Ich habe inzwischen meine Lösung ohne Blattschutz und Locked gefunden. Hier mein Code:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

Dim ColsNew As Integer
Dim ColsOld As Integer
Dim ColTarg As Integer
Dim RowsNew As Integer
Dim RowsOld As Integer
Dim RowTarg As Integer

RowTarg = Target.Row
ColTarg = Target.Column
RowsNew = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
ColsNew = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
Debug.Print "vor Undo " & Cells(RowTarg, ColTarg).Value
If Cells(RowTarg, ColTarg).HasFormula Then Debug.Print "Formel: " & Cells(RowTarg, ColTarg).Formula
Application.EnableEvents = False
Application.Undo ' alten Zustand herstellen
RowsOld = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
ColsOld = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
Debug.Print RowsNew & " " & RowsOld
Debug.Print ColsNew & " " & ColsOld
Debug.Print "Undo 1 " & Cells(RowTarg, ColTarg).Value
If ColsNew > ColsOld Then
   Debug.Print "Spalte hinzugefügt oder entfernt"
   If RowTarg > 6 Then
      Application.Undo  ' insert ist zulässig
   End If
   GoTo SkipUndo
End If
If RowsNew > RowsOld Then
   Debug.Print "Zeile hinzugefügt oder entfernt"
   Application.Undo  ' insert ist zulässig
   GoTo SkipUndo
End If
If Cells(RowTarg, ColTarg).HasFormula Then
   Debug.Print "Zelle mit Formel"
   Debug.Print "Formel: " & Cells(RowTarg, ColTarg).Formula
   GoTo SkipUndo ' keine Ände
End If
Application.Undo
Debug.Print "Undo 2 " & Cells(RowTarg, ColTarg).Value
SkipUndo:
Application.EnableEvents = True
    
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim LastRow As Integer

LastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
Rows(Target.Row).Copy
Stop
Rows(LastRow + 1).Insert
Debug.Print "kopiert"
Cancel = True

End Sub
Natürlich muss dieser Code noch an die Gegebenheiten der aktuellen Tabelle angepasst werden. Die Debugs dienen nur Testzwecken

Gruß Joschi.


Anzeige
muss ja nich mehr offen sein owT
24.05.2023 09:10:26
Oberschlumpf


AW: VBA Schutz von Zellen mit Formeln
22.05.2023 13:27:39
Pappawinni
Ui, da beschleicht mich das Gefühl, dass dein Konzept suboptimal ist.


AW: VBA Schutz von Zellen mit Formeln
22.05.2023 15:10:49
Joschi Witchcraft
Bei der Tabelle handelt es sich um die Abrechnung einer Erbengemeinschaft mit dem Mieter. Ich bin aber nicht derjenige, welcher die Abrechnung macht, und deshalb die Daten eingibt. Auch bin ich nicht an der Erbengemeinschaft beteiligt. Ich habe mich lediglich bereiterklärt, mit meinem Wissenstand eine entsprechende Tabelle bereitzustellen.

Es gibt 3 Hauptbereiche:

1. die Vorauszahlungen
2. die Nebenkosten
3. die Nachzahlung bzw. das Guthaben.

Die Bereiche 1 und 2 bestehen aus einer Beschreibung, einem Einzelbetrag, der Menge (Monate) und dem Gesamtbetrag. Es ist aber auch möglich, dass es dazu weitere Zeilen gibt, wenn es um die gleiche Art handelt (z. B. Änderung der Miete während des Jahres)
Für alle Zeilen der gleichen Art wird in einer der letzten Art-Zeile und einer weiteren Spalte (8) die Gesamtsumme (der Art) ausgegeben.

Weil die (verstorbene) Person, welche bisher die Abrechnung (mit "Word" gemacht hat, Versicherungsbeiträge nach Monaten aufgeteilt hat (falls die Prämie nicht Anfang Januar, sondern während des Jahres fällig wurde), musste auch diese Art der Aufteilung übernommen werden. Dazu sind 3 weitere Spalten (5 bis 7) erforderlich, wodurch sich die Summenspalte für alle weiter nach rechts verschiebt. Insgesamt gibt es also 9 Spalten, wobei die Spalte 9 die Gesamtsumme des jeweiligen Bereichs ist. Für eine Änderung in der Spalte 5 gibt es eine spezielle Lösung, auch welche ich nicht näher eingehen möchte)

Im Bereich 3 wird lediglich die Differenz zwischen den beiden Bereichssummen 1 und 2 ausgewiesen; die Höhe der Erstattung bzw. Nachzahlung
Für denjenigen, welcher die Abrechnung erstellt, sollten nur die Spalten 1 (Bezeichnung) 2 (Einzelbetrag) und 3 (Anzahl) geändert werden können. Der Rest der Zellen ist entweder leer oder enthält Formeln.

Ich hoffe, ich habe das verständlich beschrieben habe.

Gruß Joschi


Anzeige
AW: VBA Schutz von Zellen mit Formeln
22.05.2023 17:30:40
Pappawinni
Es käme für mich nicht in Frage, dass ein Anwender irgendwo nach belieben Zeilen oder Spalten einfügt. Das würde im einfachsten Fall ein Makro auf "Knopfdruck" erledigen.


AW: VBA Schutz von Zellen mit Formeln
22.05.2023 19:39:44
Joschi Witchcraft
Hallo Pappawinni.

Meine Sheet-Change-Routine verhindert, dass eine weitere Spalte eingefügt oder gelöscht wird.

Das Einfügen weiterer Zeilen muss bestehen bleiben. Es kann nicht sei, dass ich - als "Designer" der Tabelle - immer dann aktiv werden muss, wenn zusätzliche Zeilen erforderlich werden, oder eine vorhandene Zeile überflüssig geworden ist, und deshalb gelöscht werden kann.

Eine vorhandene Routine, die über einen Button aufgerufen werden kann, sorgt dafür, dass alle Zeilen nach wenigen Informationen (Vorhandensein von Werten in bestimmten Spalten) mit den entsprechenden Formeln an der richtigen Position versehen werden. Es kann eine leere Zeile eingefügt werden, und in den relevanten Spalten mit passenden Texten oder Werten versehen werden. Oder es wird eine "passende" Zeile kopiert und an der passenden Stelle eingefügt werden. Eine entsprechende Beschreibung habe ich erstellt.

Im konkreten Fall sind das nicht mehrere Anwender, sondern nur die Person, welche im Auftrag der Erbengemeinschaft die Abrechnung macht.

Wenn es ein "Makro auf Knopfdruck" gäbe: wo soll denn dann die zusätzliche Zeile eingefügt werden?

Gruß Joschi




Anzeige
AW: VBA Schutz von Zellen mit Formeln
22.05.2023 22:39:54
Pappawinni
Dein Problem war doch, dass du Zellen schützen wolltest. Das geht halt am Besten mit einem Blattschutz.
Wenn du dann aber wieder zulassen willst, dass Zeilen eingefügt werden, dann gestaltet sich das etwas schwierig,
Ich würde das Blatt schützen und Möglichkeiten schaffen per Makro ggf. zusätzliche Zeilen an definierten Stellen...
aber nee...
...mach wie du denkst. Ich halt mich da jetzt raus.


AW: VBA Schutz von Zellen mit Formeln
22.05.2023 13:32:31
Daniel
Hi
bei diesem Vorgehen ist es egal, wieviele Zellen gesperrt werden müssen, weil du alle Zellen gemeinsam auswählst und sperrst, nicht jede einzeln.
wenn weitere Zellen hinzukommen, musst du den vorgang wiederholen.
Die Schritte dazu kannst du dir auch gut mit dem Recorder aufzeichen, um sie per Button wiederholen zu können.

Gruß Daniel


Anzeige
AW: VBA Schutz von Zellen mit Formeln
22.05.2023 12:57:45
MCO
Hallo Joschi!

Du kannst die Zelleigenschaften in den editierbaren Zellen das "gesperrt" rausnehmen und dann Blattschutz aktivieren.
Fertig.

Auswahl der Zellen über F5 geht wahrscheinlich am schnellsten, dann STRG+1
VBA braucht man dafür nicht.

Gruß, MCO


AW: VBA Schutz von Zellen mit Formeln
22.05.2023 12:58:19
Pappawinni
Ich hatte in der Regel nur einige wenige Zellen, für Eingaben des Users
Für diese Zellen habe ich in den Eigenschaften den Schutz weggenommen.
Dann den Blattschutz aktiviert, oft ohne Passwort. Das verhindert zumindest eine unbeabsichtigte Änderung an geschützten Zellen.


Anzeige
AW: VBA Schutz von Zellen mit Formeln
22.05.2023 14:40:27
Daniel
HI
wenn du was mit VBA machen willst, könntest du dieses Makro ins Modul der Tabelle schreiben:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zelle As Range
For Each Zelle In Intersect(Target, Me.UsedRange)
    If Zelle.HasFormula Then Exit For
Next
If Not Zelle Is Nothing Then
    With Application
        MsgBox "Formeln bitte nicht verändern"
        .EnableEvents = False
        .Undo
        .EnableEvents = True
    End With
End If
    
End Sub
das funktioniert allerdings nur, wenn der Anwender die Makros auch aktiviert.
Wenn du nachträglich an den Formeln was verändern willst, aktvierst du einfach im Menüpunkt ENTWICKLERTOOLS den ENTWURFSMODUS.

Gruß Daniel


Anzeige
AW: VBA Schutz von Zellen mit Formeln
22.05.2023 15:35:47
Joschi Witchcraft
Hallo Daniel.

Danke für Deinen Code. Doch leider funktioniert der nicht. Grund: Durch die x-beliebige Eingabe hat die Zelle nicht mehr das Attribut "HasFormula". Der Code verhindert allerdings die Eingabe einer Formel; die wird erkannt und abgewiesen.

Gruß Joschi


AW: VBA Schutz von Zellen mit Formeln
22.05.2023 16:59:21
Daniel
Hi
dann probier mal das, das prüft vorab, ob die Zelle vor eingabe leer war, dh die Eingabe einer Formel in eine leere Zelle ist zulässig, das spätere Ändern jedoch nicht (fall erforderlich, wie beschrieben Entwurfmodus verwenden)

Option Explicit
Dim Formeln As Range


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Formeln Is Nothing Then
    MsgBox "Formeln nicht ändern"
    With Application
        .EnableEvents = False
        .Undo
        .EnableEvents = True
    End With
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Me.UsedRange) Is Nothing Then
    For Each Formeln In Intersect(Target, Me.UsedRange).Cells
        If Formeln.Formula Like "=*" Then Exit For
    Next
Else
    Set Formeln = Nothing
End If
End Sub
man braucht hier jetzt mehrere Makros, das Change-Event alleine läuft ja erst nach der eingabe, daher kann es nicht feststellen, ob die Zelle vorher leer war.
Das prüft man dann im vorher laufenden SelectionChange-Event

Gruß Daniel

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige