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.

Löschfunktion ??
#1
Guten morgen zusammen,
kaum hat sich ein Thema erledigt, schon steh ich vor dem nächsten Problem. Ich habe eine Tabelle mit den Spalten A - D und Zeilen 1-20. In jeder Zelle ist die gleiche Gültigkeit hinterlegt. Hier können sich Mitarbeiter mit Namenskürzeln eintragen, die zu einer bestimmten Zeit Arbeiten wollen. Gibt es eine Möglichkeit, dass sich die Mitarbeiter zwar eintragen können, jedoch nicht löschen können. Es kommt immer wieder vor, dass andere durch den Eintrag gelöscht werden.
Hätte da jemand eine Lösung ?

Gruß Fred
Antworten Top
#2
Hallo Fred,

folgender Code kommt in das schon vorhandene VBA-Modul des entsprechenden Tabellenblattes:

----------------------------------------------------------------------------
Code:

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim varEintrag As Variant
 If Not Application.Intersect(Range("A1:D20"), Target) Is Nothing Then
   On Error Resume Next
   Application.EnableEvents = False
   If Target.Count > 1 Then
     Application.Undo
   Else
     varEintrag = Target.Value
     Application.Undo
     If IsEmpty(Target) Then
       Target.Value = varEintrag
     Else
       MsgBox "Eintag ist nur in einer leeren Zelle möglich!", vbCritical
     End If
     Application.EnableEvents = True
     On Error GoTo 0
   End If
 End If
End Sub

----------------------------------------------------------------------------
VBA/HTML - CodeConverter für Excelforen
AddIn für Excel 2002-2013 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch René Holtz (alias mumpel)
Code erstellt und getestet in Office 14
----------------------------------------------------------------------------

Die Datei muss dann aber mit der Endung .xlsm oder xlsb gespeichert werden.

Gruß Uwe
Antworten Top
#3
Hallo Uwe,

ich habe bereits folgenden Code drinnen und wenn ich deinen hinten an setze dann funktioniert das nicht. Was mach ich falsch?

Der Code, den ich bereits habe, ist:

Code:
 Const bolSorted As Boolean = True       ' Legt fest, ob die Werte noch sortiert werden.
 Dim blockedEvent As Boolean
 Dim TargetOldText As String

 Private Sub Worksheet_Change(ByVal Target As Range)
     Dim strResult As String
     Dim strTarget As String
     Dim arrSorted As Variant
     Dim i As Long
     If Target.Column = 13 Or Target.Column = 24 Then
         strTarget = Trim$(Target.Value)
         If Not blockedEvent Then
             blockedEvent = True
             If Not TargetOldText = "" And Not Target.Value = "" Then
                 If InStr(1, TargetOldText, Target.Value) > 0 Then
                     strResult = Replace(TargetOldText, ", " & strTarget, "")
                     strResult = Replace(strResult, strTarget & ", ", "")
                     strResult = Replace(strResult, strTarget, "")
                 Else
                     strResult = TargetOldText & ", " & Target.Value
                 End If
                 If bolSorted Then
                     arrSorted = Split(strResult, ", ")
                     strResult = ""
                     Call Selectionsort(arrSorted)
                     For i = 0 To UBound(arrSorted)
                         strResult = strResult & arrSorted(i) & ", "
                     Next i
                     If Len(strResult) > 1 Then _
                     strResult = Left$(strResult, Len(strResult) - 2)
                 End If
                 Target.Value = strResult
             Else
                 Target.Value = Target.Value
             End If
             TargetOldText = Target.Value
         Else
             blockedEvent = False
         End If
     Else
         TargetOldText = ""
     End If
 End Sub

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     On Error Resume Next
     If Target.Column = TargetColumn Then
         TargetOldText = Target.Value
     End If
 End Sub

 Private Sub Selectionsort(ByRef data As Variant)
     Dim OG&, i&, j&, k&, h As Variant
     OG = UBound(data)
     For i = 0 To OG - 1
         h = data(i)
         k = i
         For j = i + 1 To OG
             If data(j) < h Then
                 h = data(j)
                 k = j
             End If
         Next j
         data(k) = data(i)
         data(i) = h
     Next i
 End Sub

Wie bring ich jetzt deinen code noch mit unter?
Antworten Top
#4
Hallo Fred,

so vielleicht:

Microsoft Excel Objekt Tabelle1
Option Explicit 

Const bolSorted As Boolean = True       ' Legt fest, ob die Werte noch sortiert werden.
Dim blockedEvent As Boolean
Dim TargetOldText As String

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim varEintrag As Variant
 Dim strResult As String
 Dim strTarget As String
 Dim arrSorted As Variant
 Dim i As Long
 If Not Application.Intersect(Range("A1:D20"), Target) Is Nothing Then
   On Error Resume Next
   Application.EnableEvents = False
   If Target.Count > 1 Then
     Application.Undo
   Else
     varEintrag = Target.Value
     Application.Undo
     If IsEmpty(Target) Then
       Target.Value = varEintrag
     Else
       MsgBox "Eintag ist nur in einer leeren Zelle möglich!", vbCritical
     End If
     Application.EnableEvents = True
     On Error GoTo 0
   End If
 End If
 If Target.Column = 13 Or Target.Column = 24 Then
     strTarget = Trim$(Target.Value)
     If Not blockedEvent Then
         blockedEvent = True
         If Not TargetOldText = "" And Not Target.Value = "" Then
             If InStr(1, TargetOldText, Target.Value) > 0 Then
                 strResult = Replace(TargetOldText, ", " & strTarget, "")
                 strResult = Replace(strResult, strTarget & ", ", "")
                 strResult = Replace(strResult, strTarget, "")
             Else
                 strResult = TargetOldText & ", " & Target.Value
             End If
             If bolSorted Then
                 arrSorted = Split(strResult, ", ")
                 strResult = ""
                 Call Selectionsort(arrSorted)
                 For i = 0 To Ubound(arrSorted)
                     strResult = strResult & arrSorted(i) & ", "
                 Next i
                 If Len(strResult) > 1 Then _
                 strResult = Left$(strResult, Len(strResult) - 2)
             End If
             Target.Value = strResult
         Else
             Target.Value = Target.Value
         End If
         TargetOldText = Target.Value
     Else
         blockedEvent = False
     End If
 Else
     TargetOldText = ""
 End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 TargetOldText = Target.Value
End Sub

Private Sub Selectionsort(ByRef data As Variant)
    Dim OG&, i&, j&, k&, h As Variant
    OG = Ubound(data)
    For i = 0 To OG - 1
        h = data(i)
        k = i
        For j = i + 1 To OG
            If data(j) < h Then
                h = data(j)
                k = j
            End If
        Next j
        data(k) = data(i)
        data(i) = h
    Next i
End Sub



Gruß Uwe
Antworten Top
#5
Hallo Uwe,
die Formel passt hervorragend aber jetzt hab ich das Problem das ich einen Eintrag der aus versehen eingetragen worden ist nicht löschen kann. Gäbe es noch eine Version wo es eine Möglichkeit gibt dass hier der Eintrag evtl. über Passwort gelöscht werden kann ??

Gruß Fred
Antworten Top
#6
Hallo Fred,

teste mal so:

Option Explicit

Const bolSorted As Boolean = True       ' Legt fest, ob die Werte noch sortiert werden.
Dim blockedEvent As Boolean
Dim TargetOldText As String

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim varEintrag As Variant
 Dim strResult As String
 Dim strTarget As String
 Dim arrSorted As Variant
 Dim i As Long
 If Not Application.Intersect(Range("A1:D20"), Target) Is Nothing Then
   On Error Resume Next
   Application.EnableEvents = False
   If Target.Count > 1 Then
     Application.Undo
   Else
     If IsEmpty(Target) Then
       varEintrag = InputBox("Bitte das Löschen mit Kennwort bestätigen!") = "Passwort"
     End If
     If Not varEintrag Then
       varEintrag = Target.Value
       Application.Undo
       If IsEmpty(Target) Then
         Target.Value = varEintrag
       Else
         MsgBox "Eintag ist nur in einer leeren Zelle möglich!", vbCritical
       End If
     End If
   End If
   Application.EnableEvents = True
   On Error GoTo 0
 End If
 If Target.Column = 13 Or Target.Column = 24 Then
     strTarget = Trim$(Target.Value)
     If Not blockedEvent Then
         blockedEvent = True
         If Not TargetOldText = "" And Not Target.Value = "" Then
             If InStr(1, TargetOldText, Target.Value) > 0 Then
                 strResult = Replace(TargetOldText, ", " & strTarget, "")
                 strResult = Replace(strResult, strTarget & ", ", "")
                 strResult = Replace(strResult, strTarget, "")
             Else
                 strResult = TargetOldText & ", " & Target.Value
             End If
             If bolSorted Then
                 arrSorted = Split(strResult, ", ")
                 strResult = ""
                 Call Selectionsort(arrSorted)
                 For i = 0 To UBound(arrSorted)
                     strResult = strResult & arrSorted(i) & ", "
                 Next i
                 If Len(strResult) > 1 Then _
                 strResult = Left$(strResult, Len(strResult) - 2)
             End If
             Target.Value = strResult
         Else
             Target.Value = Target.Value
         End If
         TargetOldText = Target.Value
     Else
         blockedEvent = False
     End If
 Else
     TargetOldText = ""
 End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
TargetOldText = Target.Value
End Sub

Private Sub Selectionsort(ByRef data As Variant)
   Dim OG&, i&, j&, k&, h As Variant
   OG = UBound(data)
   For i = 0 To OG - 1
       h = data(i)
       k = i
       For j = i + 1 To OG
           If data(j) < h Then
               h = data(j)
               k = j
           End If
       Next j
       data(k) = data(i)
       data(i) = h
   Next i
End Sub


Gruß Uwe
Antworten Top
#7
Hallo Uwe,
erstmal vielen Dank das passt ganz klasse nur wie komm ich an das Kennwort bzw. wo geb ich das ein.
wie sähe denn der Code aus wenn es noch einen Zweiten seperaten Bereich E1-F20 geben würde für den die selben Regeln gelten würden.

Gruß Fred
Antworten Top
#8
Hallo Fred,

ändere die Zeile

If Not Application.Intersect(Range("A1:D20"), Target) Is Nothing Then


zu

If Not Application.Intersect(Target, Range("A1:D20", "E1:F20")) Is Nothing Then

Das Passwort steht in der Zeile

varEintrag = InputBox("Bitte das Löschen mit Kennwort bestätigen!") = "Passwort"

Option Explicit

Const bolSorted As Boolean = True       ' Legt fest, ob die Werte noch sortiert werden.
Dim blockedEvent As Boolean
Dim TargetOldText As String

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim varEintrag As Variant
 Dim strResult As String
 Dim strTarget As String
 Dim arrSorted As Variant
 Dim i As Long
 If Not Application.Intersect(Target, Range("A1:D20", "E1:F20")) Is Nothing Then
   On Error Resume Next
   Application.EnableEvents = False
   If Target.Count > 1 Then
     Application.Undo
   Else
     If IsEmpty(Target) Then
       varEintrag = InputBox("Bitte das Löschen mit Kennwort bestätigen!") = "Passwort"
     End If
     If Not varEintrag Then
       varEintrag = Target.Value
       Application.Undo
       If IsEmpty(Target) Then
         Target.Value = varEintrag
       Else
         MsgBox "Eintag ist nur in einer leeren Zelle möglich!", vbCritical
       End If
     Else
       MsgBox "Der Eintrag wurde nicht gelöscht, das das Kennwort falsch war!", vbCritical
     End If
   End If
   Application.EnableEvents = True
   On Error GoTo 0
 End If
 If Target.Column = 13 Or Target.Column = 24 Then
     strTarget = Trim$(Target.Value)
     If Not blockedEvent Then
         blockedEvent = True
         If Not TargetOldText = "" And Not Target.Value = "" Then
             If InStr(1, TargetOldText, Target.Value) > 0 Then
                 strResult = Replace(TargetOldText, ", " & strTarget, "")
                 strResult = Replace(strResult, strTarget & ", ", "")
                 strResult = Replace(strResult, strTarget, "")
             Else
                 strResult = TargetOldText & ", " & Target.Value
             End If
             If bolSorted Then
                 arrSorted = Split(strResult, ", ")
                 strResult = ""
                 Call Selectionsort(arrSorted)
                 For i = 0 To UBound(arrSorted)
                     strResult = strResult & arrSorted(i) & ", "
                 Next i
                 If Len(strResult) > 1 Then _
                 strResult = Left$(strResult, Len(strResult) - 2)
             End If
             Target.Value = strResult
         Else
             Target.Value = Target.Value
         End If
         TargetOldText = Target.Value
     Else
         blockedEvent = False
     End If
 Else
     TargetOldText = ""
 End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
TargetOldText = Target.Value
End Sub

Private Sub Selectionsort(ByRef data As Variant)
   Dim OG&, i&, j&, k&, h As Variant
   OG = UBound(data)
   For i = 0 To OG - 1
       h = data(i)
       k = i
       For j = i + 1 To OG
           If data(j) < h Then
               h = data(j)
               k = j
           End If
       Next j
       data(k) = data(i)
       data(i) = h
   Next i
End Sub


Gruß Uwe
Antworten Top
#9
Hallo Uwe,
hab noch das Problem mit dem Kennwort, wenn ich statt dem Eintrag  PASSWORT ein neues Wort einfüge kommt immer noch -falsches kennwort-.-

Gruß Fred
Antworten Top
#10
Sorry wenn ich mich falsch ausgedrückt habe es kommt die Meldung, konnte nicht gelöscht werden da Passwort falsch war.
Antworten Top


Gehe zu:


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