Registriert seit: 15.12.2022
Version(en): Office 365
15.12.2022, 16:24
(Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2022, 16:25 von sebawil.)
Hallo liebes Forum,
mein erster Post und direkt eine Frage. Ich zerbreche mir den Kopf, wie ich es hinbekomme, dass eine Tabelle das Eintragen von Werten erlaubt, aber (versehentliches) Löschen verhindert.
Beispiel: Im Rahmen einer unternehmensweiten Inventur sollen Zweierteams die Bestände zählend erfassen und Ihre Werte eintragen. Verhindern werden soll, dass dabei unabsichtlich Werte bereits eingetragener Zählungen gelöscht werden.
Ein Blattschutz verunmöglicht ja das komplette Bearbeiten einer Zelle. Die Suchfunktion hier habe ich bereits versucht, aber scheinbar ist das eine regelrechte "Exotenanfrage"...Oder ich sehe den Wald vor lauter Bäumen nicht.
Ich freue mich über eine Erklärung oder einen Link, falls es dort bereits erklärt ist.
Herzlichen Dank ringsum!
Sebastian
Registriert seit: 05.09.2019
Version(en): Office 365
Hallo
per VBA möglich
- Rechtsclick auf den Tabellenblattreiter
- Code anzeigen
- Rechts diesen Code einfügen
Code:
Public Altwert As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Altwert = Target.Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fehler
Const APPNAME = "Worksheet_Change"
'Nur wenn Änderungen in Spalte B gemacht werden
If Not Intersect(Target, Range("B:B")) Is Nothing Then
If Altwert <> "" Then
With Application
.EnableEvents = False
Target = Altwert
.EnableEvents = True
End With
MsgBox "Eingabe bereits erfolgt"
End If
End If
'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number <> 0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
& "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub
Eine Eingabe wird nur einmal zugelassen
LG UweD
Folgende(r) 1 Nutzer sagt Danke an UweD für diesen Beitrag:1 Nutzer sagt Danke an UweD für diesen Beitrag 28
• sebawil
Registriert seit: 25.11.2021
Version(en): 2019, 365
15.12.2022, 17:30
(Dieser Beitrag wurde zuletzt bearbeitet: 15.12.2022, 17:34 von Ralf A.)
Als Alternative (der Typ des alten Wertes muss kein String sein, bleibt also beibehalten)
Code in das Modul der betreffenden Tabelle:
Code:
Option Explicit
Dim wert
Private Sub Worksheet_Change(ByVal Target As Range)
If Not wert = Empty Then
Application.EnableEvents = False
If Target = Empty Then Target = wert: MsgBox wert & " kann nicht gelöscht werden"
Application.EnableEvents = True
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
wert = Empty 'Bereich anpassen...
If Target.Count = 1 And Not Intersect(Target, Range("A2:A10")) Is Nothing Then
wert = Target
End If
End Sub
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ciao, Ralf
Folgende(r) 1 Nutzer sagt Danke an Ralf A für diesen Beitrag:1 Nutzer sagt Danke an Ralf A für diesen Beitrag 28
• sebawil
Registriert seit: 15.12.2022
Version(en): Office 365
16.12.2022, 10:43
(Dieser Beitrag wurde zuletzt bearbeitet: 16.12.2022, 10:45 von sebawil.)
Vielen Dank, Uwe. Das überschreitet auf jeden Fall meine bisherigen Excelkenntnisse. Deinen Vorschlag muss ich gleich mal ausprobieren!
VG
Sebastian
Auch Dir Ralf, hab vielen Dank - zwei Ansätze (Deiner und der von Uwe), die auf jeden Fall sehr viel professioneller aussehen als alles was ich bisher versuchte.
Ich gehe gleich mal in die Anwendung Deines Vorschlags.
Viele Grüße
Sebastian
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Moin!
Bevor hier VBA bemüht wird:
Um welches Eingabegerät handelt es sich?
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 29.09.2015
Version(en): 2030,5
Warum nicht einfach ein Userform kombiniert mit Application.visible=false
Registriert seit: 15.12.2022
Version(en): Office 365
Die Teams werden mit Laptops unterwegs sein, die Excel soll auf einem Sharepoint laufen, so dass der Inventur-Supervisor live dabei ist, wie sich die Listen füllen und dabei Rücksprache hält, falls sich Probleme zeigen.
Vorab: Der Code funktioniert soweit perfekt!
Eine Frage noch: Mehrere Zellen auswählen und die darin erfassten Werte löschen geht (noch) - der Code ist dahingehend "leicht" zu erweitern?
Besten Dank nochmal in die tolle Runde hier!
sebastian
Registriert seit: 25.11.2021
Version(en): 2019, 365
16.12.2022, 12:51
(Dieser Beitrag wurde zuletzt bearbeitet: 16.12.2022, 12:59 von Ralf A.)
..den Code des SelectionChange Ereignisses anpassen:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
wert = Empty 'Bereich anpassen...
ActiveSheet.Protect Contents:=False
If Not Intersect(Target, Range("A2:A10")) Is Nothing Then
If Target.Count = 1 Then
wert = Target
Else
ActiveSheet.Protect Contents:=True
End If
End If
End Sub
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ciao, Ralf
Folgende(r) 1 Nutzer sagt Danke an Ralf A für diesen Beitrag:1 Nutzer sagt Danke an Ralf A für diesen Beitrag 28
• sebawil
Registriert seit: 15.12.2022
Version(en): Office 365
spitzenmäßig, das scheint zu gehen! (dir wahrscheinlich ganz klar, für mich nicht ;) )
Alles mit Makros & VBA ist doch nochmal ne ganz andere Liga....
Registriert seit: 26.09.2022
Version(en): 2019
Moin,
Sharepoint-Live und VBA beißen sich meiner Ansicht nach allerdings.
Viele Grüße
derHöpp