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

Doppelte Einträge verhindern

Doppelte Einträge verhindern
18.07.2018 20:50:39
Jürgen
Hallo liebe Forumsgemeinde,
ich hab da mal wieder ein Problem, für euch bestimmt eher weniger.
Wenn sich jemand meines Problems annehmen könnte wäre ich sehr dankbar.
Ich hab schon einiges ausprobiert und bin leider immer wieder gestrandet
Nun zu meiner Frage.
In dem unten aufgeführten Code, der sich im Tabellenblatt unter Worksheets_Change befindet, wird ein Doppelter Eintrag in der Spalte 5 (E) verhindert.
Wie ihr seht kommt erste der Hinweis, dass der Wert schon existiert und bei Bestätigen auf o.K. _ wird der eingetragene Wert wieder gelöscht.

Dim Bereich As Range
Set Bereich = Range("E2:E2000")
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Intersect(Bereich, Target) Is Nothing Then Exit Sub
If WorksheetFunction.CountIf(Bereich, Target.Value) > 1 Then
MsgBox "Doppelter Eintrag nicht zulässig" & vbNewLine & vbNewLine & "der von ihnen  _
eingebene Wert wird wieder gelöscht" & vbNewLine & vbNewLine & "Bitte überprüfen sie ihre gewä   _
_
_
hlte Leitungsführung", vbOKOnly, "Eintragung unzulässig!"
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
Target.Select
End If
Jetzt zu meinem Wunsch.
Es wäre toll, wenn nach dem Erkennen des bereits vorhandene Wertes
und das bestätigen der Meldung,
die Zelle in Spalte 5 (E) aktiviert würde in der sich der bereits
vorhandene Wert befindet.
Über eure Unterstützung würde ich sehr freuen
Jürgen

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
hier (m)eine Variante ...
18.07.2018 21:07:00
Matthias
Hallo Jürgen
In ein allgemeines Modul
z.B. Modul1:
Option Explicit
Public Wert$

in die Tabelle:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich As Range, RnG As Range
Set Bereich = Range("E2:E2000")
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Intersect(Bereich, Target) Is Nothing Then Exit Sub
Wert = Target.Value
If WorksheetFunction.CountIf(Bereich, Target.Value) > 1 Then
MsgBox "Doppelter Eintrag nicht zulässig" & vbNewLine & vbNewLine & "der von ihnen eingebene  _
Wert wird wieder gelöscht" & vbNewLine & vbNewLine & "Bitte überprüfen sie ihre gewählte Leitungsführung", vbOKOnly, "Eintragung unzulässig!"
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
    For Each RnG In Bereich
If RnG = Wert Then RnG.Select: Exit Sub
Next
Target.Select
End If
End Sub
Gruß Matthias
Anzeige
AW: hier (m)eine Variante ...
18.07.2018 21:16:14
Jürgen
Hallo Matthias,
vielen liebe Dank für die schnell Antwort,
bin leider schon wieder auf`m Sprung.
Ich werde es morgen gleich mal Testen.
Vorab schon mal ganz, ganz liebe Dank
Jürgen
AW: hier (m)eine Variante ...
19.07.2018 06:06:56
Jürgen
Hallo Matthias,
hat irgendwie nicht geklappt.
Ich erhalte die Fehlermeldung:
"Fehler beim Kompilieren"
"Mehrfachdeklaration im aktuellen Gültigkeitsbereich"
Ich glaub das liegt an meine gesamten Worksheet_Change-Code.
Hierin las ich ein Log-File mitschreiben, in dem alle Änderungen
in dem Tabellenblatt mitgeschrieben werden.
Ich leg mal den gesamten Code für Worksheet_Change bei.
Vielleicht hast ja ne Idee wie man das Problem "umschiffen" kann.
Vielen Dank schon mal im Voraus.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:="excelfreigeben"
ActiveSheet.EnableSelection = xlUnlockedCells
ActiveSheet.Protect Password:="excelfreigeben"
If Target.Row > 1000 Then Exit Sub '
Dim strDatei As String, strText As String
Dim strZeit As String, strUser As String, strZelle As String, strOld As String, strNeu As  _
String
Dim intFile As Integer, RnG As Range
Const strDELIM As String = "|"      'Logfile Delimiter - ggf. anpassen
Const lenUser As Integer = 15       'Anzahl Zeichen für Username
Const lenAdresse As Integer = 6     'Anzahl Zeichen für Zelladress
Const lenWert As Integer = 10       'min. Anzahl Zeichen für Wert alt und neu
Const FormatZeit As String = "YYYY-MM-DD hh:mm:ss" 'Format für Zeitstempel
intFile = FreeFile
With ThisWorkbook
'Logbuch in allgemeinem, öffentlichen Verzeichnis, eine Datei je User
'' strDatei = "C:\Users\Public\Test\Data" & "\LogBuch_" & Environ("Username") & "_" _
& Left(.Name, InStrRev(.Name, ".") - 1) & ".txt"
'Logbuch im Verzeichnis der Datei, eine Datei je User
''strDatei = .Path & "\LogBuch_" & Environ("Username") & "_" _
& Left(.Name, InStrRev(.Name, ".") - 1) & ".txt"
'Logbuch im Verzeichnis des Users
''42506strDatei = Environ("USERPROFILE") & "\LogBuch_" & Environ("Username") & "_" _
& Left(.Name, InStrRev(.Name, ".") - 1) & ".txt"
'Logbuch im Verzeichnis der Datei, eine Datei für alle User
strDatei = .Path & "\LogBuch_" & "_" & Left(.Name, InStrRev(.Name, ".") - 1) & ".txt"
End With
Open strDatei For Append As #intFile
If LOF(intFile) = 0 Then
'Texte in Titelzeile
With Application.WorksheetFunction
strZeit = "Zeitstempel"
strZeit = strZeit & VBA.Space(.Max(0, Len(FormatZeit) - Len(strZeit)))
strUser = "User"
strUser = strUser & VBA.Space(.Max(0, lenUser - Len(strUser)))
strZelle = "Zelle"
strZelle = strZelle & VBA.Space(.Max(0, lenAdresse - Len(strZelle)))
strOld = "alter-Wert"
strOld = strOld & VBA.Space(.Max(0, lenWert - Len(strOld)))
strNeu = "neuer-Wert"
strNeu = strNeu & VBA.Space(.Max(0, lenWert - Len(strNeu)))
strText = strZeit & strDELIM & strUser & strDELIM & strZelle & strDELIM & _
strOld & strDELIM & strNeu & strDELIM
End With
Print #intFile, strText
'Text für Trennzeile ("-" und Trennzeichen)
strText = String(Len(strZeit), "-") & strDELIM & String(Len(strUser), "-") & strDELIM  _
_
& String(Len(strZelle), "-") & strDELIM _
& String(Len(strOld), "-") & strDELIM & String(Len(strNeu), "-") & strDELIM
Print #intFile, strText
End If
For Each RnG In Target.Cells
If RnG.Value  mstrOld(RnG.Row, RnG.Column) Then
With Application.WorksheetFunction
strZeit = Format(Now, "YYYY-MM-DD hh:mm:ss")
strUser = Environ("username")
strUser = strUser & VBA.Space(.Max(0, lenUser - Len(strUser)))
strZelle = VBA.Replace(RnG.Address, "$", "")
strZelle = strZelle & VBA.Space(.Max(0, lenAdresse - Len(strZelle)))
strOld = mstrOld(RnG.Row, RnG.Column)
strOld = strOld & VBA.Space(.Max(0, lenWert - Len(strOld)))
strNeu = IIf(RnG.Value = "", "#gelöscht#", RnG.Value)
strNeu = strNeu & VBA.Space(.Max(0, lenWert - Len(strNeu)))
strText = strZeit & strDELIM & strUser & strDELIM & strZelle & strDELIM & _
strOld & strDELIM & strNeu & strDELIM
End With
Print #intFile, strText
End If
Next
Close #intFile
'Doppelte Einträge verhindern in der Spalte E
Dim Bereich As Range, RnG As Range
Set Bereich = Range("E2:E2000")
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Intersect(Bereich, Target) Is Nothing Then Exit Sub
Wert = Target.Value
If WorksheetFunction.CountIf(Bereich, Target.Value) > 1 Then
MsgBox "Doppelter Eintrag nicht zulässig" & vbNewLine & vbNewLine & "der von ihnen  _
eingebene Wert wird wieder gelöscht" & vbNewLine & vbNewLine & "Bitte überprüfen sie ihre gewählte Leitungsführung", vbOKOnly, "Eintragung unzulässig!"
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
For Each RnG In Bereich
If RnG = Wert Then RnG.Select: Exit Sub
Next
Target.Select
End If
'Doppelte Einträge Verhindern geht bis hier her
End Sub

Anzeige
2 x Dim RnG as Range im Code ...
19.07.2018 06:29:28
Matthias
Hallo
Du deklarierst die Variable RnG 2x
Gruß Matthias
AW: 2 x Dim RnG as Range im Code ...
19.07.2018 07:58:31
Jürgen
Hallo Matthias,
das dachte ich mir.
Hast du einen Lösungsansatz für mich.
Ich hab mir für den Übergang etwas zusammengebastelt, im wahrsten Sinne,
gefällt mir aber gar nicht und dient erst mal nur absolute Notlösung.
Die Lösung ist so skurril, dass ich sie hier gar nicht
abbilden möchte.
Danke
Jürgen
letztes Dim RnG as Range im Code löschen
19.07.2018 08:18:37
Matthias
Hallo
Hast du einen Lösungsansatz für mich
Na einfach einmal Dim RnG as Range löschen.
und zwar ganz unten.
Ich konnte ja nicht wissen, das Du diese Variable bereits benutzt und es schon ProgrammCode gibt
  '***********************************************************
'Doppelte Einträge verhindern in der Spalte E
Dim Bereich As Range, RnG As Range
Set Bereich = Range("E2:E2000")
If Target.Cells.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub
If Intersect(Bereich, Target) Is Nothing Then Exit Sub
Wert = Target.Value
If WorksheetFunction.CountIf(Bereich, Target.Value) > 1 Then
MsgBox "Doppelter Eintrag nicht zulässig" & vbNewLine & vbNewLine & "der von ihnen  _
eingebene Wert wird wieder gelöscht" & vbNewLine & vbNewLine & "Bitte überprüfen sie ihre gewä _
hlte Leitungsführung", vbOKOnly, "Eintragung unzulässig!"
Application.EnableEvents = False
Target.Value = ""
Application.EnableEvents = True
For Each RnG In Bereich
If RnG = Wert Then RnG.Select: Exit Sub
Next
Target.Select
End If
'Doppelte Einträge Verhindern geht bis hier her
End Sub
Desweiteren gehören alle Dim-Anweisungen ganz nach oben direkt unter Private Sub(...)
Gruß Matthias
Anzeige
AW: letztes Dim RnG as Range im Code löschen
19.07.2018 08:22:52
Jürgen
Hallo Matthias,
wie witzig,
das hat sich ja gerade überschnitten.
Ich danke dir Vielmals für deine Geduld und Mühe
die du mit mir hattest
Gruß
Jürgen
AW: letztes Dim RnG as Range im Code löschen
19.07.2018 08:26:10
Jürgen
Hallo Matthias,
ich nochmal.
wollte nur Bescheid geben, funktioniert alles prima :-)
Vielen Dank
Jürgen
AW: 2 x Dim RnG as Range im Code ...
19.07.2018 08:20:19
Jürgen
Hallo Matthias,
ich glaub ich war gerade etwas Benebelt.
Seh` ich das Richtig, dass ich
die zweite RnG As Range Variable

'Doppelte Einträge verhindern in der Spalte E
Dim Bereich As Range, RnG As Range
Set Bereich = Range("E2:E2000")

einfach nur weglassen muss?
ich probier` es jedenfalls mal aus
Gruß
Jürgen
Anzeige
Beitragsüberschneidung ;-) owT
19.07.2018 08:21:30
Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige