Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Eintragen erlauben, aber Löschen von Werten verhindern
#1
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
Antworten Top
#2
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:
  • sebawil
Antworten Top
#3
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:
  • sebawil
Antworten Top
#4
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
Antworten Top
#5
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)
Antworten Top
#6
Warum nicht einfach ein Userform kombiniert mit Application.visible=false
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#7
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
Antworten Top
#8
..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:
  • sebawil
Antworten Top
#9
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....
Antworten Top
#10
Moin,

Sharepoint-Live und VBA beißen sich meiner Ansicht nach allerdings.

Viele Grüße
derHöpp
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste