Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
972to976
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
972to976
972to976
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

" Intelligente Gültigkeit " etwas erweitert

" Intelligente Gültigkeit " etwas erweitert
udo
Hallo ihr Lieben,
könnt mir bitte einer von Euch bei einem Problemchen helfen, ich komm grad leider nich weiter :
Hab 2 Tabellenblätter .
Blatt 1 is der Eingabe Bereich,
Blatt 2 dient als Vorgabebereich für eine automatisierte Gültigkeit.
Blatt1:
( 3 Spalten - E,F,G - jeweils von Zeile 7-1000) dient zum Eingeben von TextWerten
Blatt2:
( 3 Spalten - F, H, J - von Zeile 7- 1000 ) dient als Vorgabebereich.
bei Eingabe soll also Spalte E(Blatt1) mit F(Blatt2) verglichen werden, F(Blatt1) mit H(Blatt2), und G(Blatt1) mit J(Blatt2 ).
- wenn jeweils neuer Eintrag in einer der drei Spalten erkannt wurde, soll dieser dann in die entsprechende Vorgabe Spalte auf Blatt2 dann eingetragen werden.
Folgendes Makro funktioniert auch schon ganz gut , wenn die Zelle in der EingabeSpalte mit
Return bestätigt wird, nach den Eingeben ( Excel auf bei Return - Sprung nach rechts eingestellt ) .
Ich sollte es aber auch schon beim Auswählen der Spalte haben , also wenn ich per linker Maustaste eine Zelle dieser Spalten anklicke ( ohne dass ich erst was reinschreibe ), sprich da stünde schon was drinne, und das wird bei Anwahl der Zelle gleich nochmals geprüft, bislang funktionierts nur beim verlassen der Zelle, und dass auch nur wenn man Text eingegeben hat.
Wäre Euch mordsmässig dankbar ;-)
Gruß udo
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Private Sub Worksheet_Change(ByVal Target As Range)
Dim WsI As Worksheet
Dim C As Range
Set WsI = Worksheets("Grunddaten")
On Error GoTo Ende:
'----------------------------------------------------------------------------------------------- _
_
_
_
_
'vergleiche Spalte E ( Column 5 ) im Zeilenbereich von Zeile 7 bis 10000 alle Einträge ausser
'leere Zellen sollen ignoriert werden.
If Target.Validation.InCellDropdown Then
With WsI
'Suche im Tabellenblatt "Grunddaten" , und dort im Bereich F7:F10000 nach also  _
gleichen Einträgen
'wird kein neuer Eintrag gefunden bleibt alles wie gehabt,
'wird ein neuer Eintrag erkannt, soll er in den Vorgabebereich ( Gültigkeitsbereich   _
_
_
_
_
F7:F10000 ) mit eingeschrieben werden
Set C = .Range("F7:F10000").Find(ActiveSheet.Cells(ActiveCell.Row, 5), , , xlWhole)
If C Is Nothing Then
If MsgBox("Neuer Eintrag wurde erkannt. ( " & Target & " ) in die Vorgabe mit ü _
_
_
_
_
bernehmen ?" _
, vbYesNo, "") = vbNo Then Exit Sub
.Range("F65536").End(xlUp).Offset(1) = Target
.Range("F7:F10000").Sort .Range("F7"), xlAscending
End If
End With
End If
'----------------------------------------------------------------------------------------------- _
_
_
_
_
If Target.Validation.InCellDropdown Then
With WsI
Set C = .Range("H7:H10000").Find(Cells(ActiveCell.Row, 6), , , xlWhole)
If C Is Nothing Then
If MsgBox("Neuer Eintrag wurde erkannt. ( " & Target & " ) in die Vorgabe mit ü _
_
_
_
_
bernehmen ?" _
, vbYesNo, "") = vbNo Then Exit Sub
.Range("H65536").End(xlUp).Offset(1) = Target
.Range("H7:H10000").Sort .Range("H7"), xlAscending
End If
End With
End If
'----------------------------------------------------------------------------------------------- _
_
_
_
_
If Target.Validation.InCellDropdown Then
With WsI
Set C = .Range("J7:J10000").Find(Cells(ActiveCell.Row, 7), , , xlWhole)
If C Is Nothing Then
If MsgBox("Neuer Eintrag wurde erkannt. ( " & Target & " ) in die Vorgabe mit ü _
_
_
_
_
bernehmen ?" _
, vbYesNo, "") = vbNo Then Exit Sub
.Range("J65536").End(xlUp).Offset(1) = Target
.Range("J7:J10000").Sort .Range("J7"), xlAscending
End If
End With
End If
Ende:
Application.ScreenUpdating = True
End Sub


5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: " Intelligente Gültigkeit " etwas erweitert
05.05.2008 08:08:00
Beverly
Hi Udo,
mal ungetestet: schreibe den selben Code ins Worksheet_SelectionChange Ereignis.


AW: " Intelligente Gültigkeit " etwas erweitert
udo
Hi , und vielen Dank für die schnelle Hilfe,
aber leider passt da dann was nicht,
bekomme dort mit demselben Code dann den neu erkannten Eintrag, zB in Spalte 1 (E...) auf
Blatt 2 in alle 3 Vorgabespalten reingeschrieben.
Dies sollte dort dann aber auch nur in der ersten ( dort Spalte F ) reingeschrieben werden.
Hintergrund ist, dass im 2. Blatt in den 3 Spalten verschiedene Vorgabewerte aufgeführt sind.
?
Trotzdem Danke schon mal
LG udo

Anzeige
fast geschafft, noch kleiner Fehler
udo
Hallo nochmals,
hab den Code mal folgendermaßen umgeändert, ( für Selection Change ereignis )
jetzt funktionierts fast ganz, nur eine Kleinigkeit noch nicht, er überträgt die neu erkannten werte nach dem Bestätigungsfenster dann nicht in Blatt 2 (" Grunddaten " ).
Sieht Jemand von euch woran das liegen könnte ...
LG & Dank im Voraus
udo
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dim WsI As Worksheet
Dim C As Range
Set WsI = Worksheets("Grunddaten")
On Error GoTo Ende:
If Target.Cells = "" Then GoTo weiter:
'------------------------------------------------------------------------------------------------------------
If Target.Value = Cells(ActiveCell.Row, 5) Then
With WsI
Set C = .Range("F7:F10000").Find(ActiveSheet.Cells(ActiveCell.Row, 5), , , xlWhole)
If C Is Nothing Then
If MsgBox("Neuer Eintrag wurde erkannt. ( " & Target & " ) in die Vorgabe mit übernehmen ?" _
, vbYesNo, "") = vbNo Then Exit Sub
.Range("F65536").End(xlUp).Offset(1) = Cells(ActiveCell.Row, 5)
.Range("F7:F10000").Sort .Range("F7"), xlAscending
End If
End With
'GoTo weiter:
End If
'-------------------------------------------------------------------------------------------------------------
If Target.Value = Cells(ActiveCell.Row, 6) Then
With WsI
Set C = .Range("H7:H10000").Find(Cells(ActiveCell.Row, 6), , , xlWhole)
If C Is Nothing Then
If MsgBox("Neuer Eintrag wurde erkannt. ( " & Target & " ) in die Vorgabe mit übernehmen ?" _
, vbYesNo, "") = vbNo Then Exit Sub
.Range("H65536").End(xlUp).Offset(1) = Target
.Range("H7:H10000").Sort .Range("H7"), xlAscending
End If
End With
'GoTo weiter:
End If
'---------------------------------------------------------------------------------------------------------------
If Target.Value = Cells(ActiveCell.Row, 7) Then
With WsI
Set C = .Range("J7:J10000").Find(Cells(ActiveCell.Row, 7), , , xlWhole)
If C Is Nothing Then
If MsgBox("Neuer Eintrag wurde erkannt. ( " & Target & " ) in die Vorgabe mit übernehmen ?" _
, vbYesNo, "") = vbNo Then Exit Sub
.Range("J65536").End(xlUp).Offset(1) = Target
.Range("J7:J10000").Sort .Range("J7"), xlAscending
End If
End With
End If
weiter:

Anzeige
AW: fast geschafft, noch kleiner Fehler
05.05.2008 11:35:45
Beverly
Hi Udo,
mal eine generelle Frage: wie kann ein Wert als neu erkannt werden, wenn er schon in der Zelle ist und doch offensichtlich vorher bereits durch das Change-Ereignis geprüft wurde? Mir ist der Sinn des ganzen nicht klar.


lieben Dank, habs hinbekommen ... hier
udo
... wäre mal noch der Code, falls sich nachträglich nochmals Jemand damit beschäftigen sollte, wollte.
Danke Karin, es war der richtige Ansatz, den Code sowohl im Change Ereignis als auch im Selection Change Ereignis anzuführen.
Lieben Dank nochmals & schöne Grüsse aus dem Süden der Republik
udo
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Ende:
'Application.MoveAfterReturnDirection = xlDown
'Application.MoveAfterReturnDirection = xlToRight
Application.ScreenUpdating = False
Dim WsI As Worksheet
Dim C As Range
Set WsI = Worksheets("Grunddaten")
'----------------------------------------------------------------------------------------------- _
If Target.Validation.InCellDropdown Then
With WsI
Set C = .Range("F7:F10000").Find(ActiveSheet.Cells(ActiveCell.Row, 5), , , xlWhole)
If C Is Nothing Then
If MsgBox("Neuer Eintrag wurde erkannt. ( " & Target & " ) in die Vorgabe mit ü _
bernehmen ?" _
, vbYesNo, "") = vbNo Then Exit Sub
.Range("F65536").End(xlUp).Offset(1) = Target
.Range("F7:F10000").Sort .Range("F7"), xlAscending
End If
End With
GoTo Ende:
End If
'----------------------------------------------------------------------------------------------- _
If Target.Validation.InCellDropdown Then
With WsI
Set C = .Range("H7:H10000").Find(Cells(ActiveCell.Row, 6), , , xlWhole)
If C Is Nothing Then
If MsgBox("Neuer Eintrag wurde erkannt. ( " & Target & " ) in die Vorgabe mit ü _
bernehmen ?" _
, vbYesNo, "") = vbNo Then Exit Sub
.Range("H65536").End(xlUp).Offset(1) = Target
.Range("H7:H10000").Sort .Range("H7"), xlAscending
End If
End With
GoTo Ende:
End If
'----------------------------------------------------------------------------------------------- _
If Target.Validation.InCellDropdown Then
With WsI
Set C = .Range("J7:J10000").Find(Cells(ActiveCell.Row, 7), , , xlWhole)
If C Is Nothing Then
If MsgBox("Neuer Eintrag wurde erkannt. ( " & Target & " ) in die Vorgabe mit ü _
bernehmen ?" _
, vbYesNo, "") = vbNo Then Exit Sub
.Range("J65536").End(xlUp).Offset(1) = Target
.Range("J7:J10000").Sort .Range("J7"), xlAscending
End If
End With
GoTo Ende:
End If
Application.ScreenUpdating = True
'Application.MoveAfterReturnDirection = xlDown
'Application.MoveAfterReturnDirection = xlToRight
Ende:
End Sub



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim WsI As Worksheet
Dim WsII As Worksheet
Dim C As Range
Set WsI = Worksheets("Grunddaten")
Set WsII = Worksheets("01")
On Error GoTo Ende:
If Target.Cells = "" Then GoTo weiter:
'----------------------------------------------------------------------------------------------- _
If Target.Column = 5 Then
With WsI
Set C = .Range("F7:F10000").Find(Cells(ActiveCell.Row, 5), , , xlWhole)
If C Is Nothing Then
If MsgBox("Neuer Eintrag wurde erkannt. ( " & Target & " ) in die Vorgabe mit ü _
bernehmen ?" _
, vbYesNo, "") = vbNo Then Exit Sub
.Range("F65536").End(xlUp).Offset(1) = Target
.Range("F7:F10000").Sort .Range("F7"), xlAscending
End If
End With
End If
'----------------------------------------------------------------------------------------------- _
If Target.Column = 6 Then
With WsI
Set C = .Range("H7:H10000").Find(Cells(ActiveCell.Row, 6), , , xlWhole)
If C Is Nothing Then
If MsgBox("Neuer Eintrag wurde erkannt. ( " & Target & " ) in die Vorgabe mit ü _
bernehmen ?" _
, vbYesNo, "") = vbNo Then Exit Sub
.Range("H65536").End(xlUp).Offset(1) = Target
.Range("H7:H10000").Sort .Range("H7"), xlAscending
End If
End With
End If
'----------------------------------------------------------------------------------------------- _
If Target.Column = 7 Then
With WsI
Set C = .Range("J7:J10000").Find(Cells(ActiveCell.Row, 7), , , xlWhole)
If C Is Nothing Then
If MsgBox("Neuer Eintrag wurde erkannt. ( " & Target & " ) in die Vorgabe mit ü _
bernehmen ?" _
, vbYesNo, "") = vbNo Then Exit Sub
.Range("J65536").End(xlUp).Offset(1) = Target
.Range("J7:J10000").Sort .Range("J7"), xlAscending
End If
End With
End If
End Sub


Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige