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

Eingeben wert in Spalte suchen und agieren

Eingeben wert in Spalte suchen und agieren
25.03.2009 17:27:06
Jaffi
Hallo Forum,
brauche mal wieder eure Hilfe. Komme seid 4 Stunden google nicht weiter:
Ich habe eine Tabelle in der ab B4 einge Datensätze stehen.
Nun möchte ich der Zelle B2 folgendes Makro hinterlegen was ausgeführt werden soll, wenn ein vorher definierter
Zeichensatz eingeben wird (zbsp. A?ZED - Der Zeichensatz der eingeben wird MUSS mit A beginnen, 15 Zeichen haben, und bin ZED enden.
Nun soll das Makro den eingegeben Zeichensatz in Spalte B (ab B4 bis unendlich) suchen. Findet er ihn, soll er in die Spalte A neben den gefunden Wert "gefunden" schreiben. Findet er ihn nicht, soll er mir das in einer msgbox melden und dabei Fragen "Daten einfügen?" Nein = Abruch, Ja in die erste freie Zelle in Spalte B
Nachdem der Zeichensatz in B4 eingegeben wurde und er die Spalte abgesucht hat muss das Feld für weitere Eingaben wieder leer gemacht werden...
Hm.. also eigentlich dachte ich das ich schon nen bissl was kann, aber dieses Problem wächst mir über den Kopf.
Habt Ihr einen Lösungsansatz für mich ?
Tausend Dank für eure Hilfe
Grüsse
J.

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
unklare Aufgabenstellung
25.03.2009 20:28:50
Specke
Hallo Jaffi,
Dein Aufgabenstellung ist mir nicht ganz klar.
Soll das Makro ausgeführt werden, wenn der Wert eingegeben wird (dann muss der WErt ja nicht mehr gesucht werden) oder soll das Makro auf "Knopfdruck" ausgeführt werden.
Wenn das Makro ausgeführt wird, wenn der Wert eingegeben wird, dann kann es nicht zu der Situation kommen, dass der Wert nicht gefunden wird.

Nachdem der Zeichensatz in B4 eingegeben wurde und er die Spalte abgesucht hat muss das Feld für weitere Eingaben wieder leer gemacht werden...

versteh ich überhaupt nicht
Vielleicht kannst Du Dein Problem nochmal klarer schildern oder eine Beispieldatei hochladen.
Gruß Specke

Anzeige
AW: unklare Aufgabenstellung
25.03.2009 21:16:16
Jaffi
Hallo Specke,
ich versuchs nochmal besser zu erklären ;)
Die Zelle B4 soll sozusagen ein "Überprüfungs-Suchfeld" werden, in dem ich einen eingeschränkten Zeichensatz eingebe. Wenn die Vorgaben des Zeichensatzes übereinstimmen, soll geprüft werden, ob dieser Zeichensatz in Spalte B (ab B4) vorhanden ist.
(es handelt sich um Seriennummern die mal erfasst wurden, und nun will ich in diesem Feld Physisch vorhandene Geräte bzw. Seriennummern eingeben, um zu prüfen ob diese Seriennummern schon erfasst wurden)
Ist diese Seriennummer in der Spalte vorhanden soll er mir links daneben "erfasst" schreiben. Findet er Sie nicht, soll eine msgbox aufpoppen "Seriennummer nicht vorhanden, erfassen?. Klicke ich NEIN soll er abbrechen, klicke ich JA soll er mir ans Ende des Datensatzes diese noch nicht erfasste (Also in Spalte B noch nicht vorhandene) Seriennummer einfügen.
Das er das Feld wieder leer machen soll ist eigentlich reine Nebensache, da ich ja mehrere Seriennummern prüfen will ob sie vorhanden sind. Will halt nicht immer wieder löschen ;o)
Ich hoffe das es jetzt verständlich ist, sorry wenns leicht verwirrend klingt aber Brüte schon seid Tagen über diese Tabelle für Cheffe und versteh es ja selbst kaum :)
das schlimme ist ich hab noch bis Freitag Zeit.... bin wirklich neu in diesem Thema VBA... ;)
Ganz doll lieben Dank für Deine Unterstützung
ich muss das gebacken bekommen, habe irgendwie das Gefühl das mein Job davon abhängt *schwitz*
vg
J
Anzeige
AW: unklare Aufgabenstellung
25.03.2009 21:34:16
Specke
Hallo Jaffi,
so sollte es klappen:
Option Explicit
Dim i As Integer
Dim gefunden As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
gefunden = False
With Worksheets(1)
If Target.Address = "$B$4" Then
For i = 5 To .Cells(Rows.Count, 2).End(xlUp).Row
If .Range("B" & i).Value = .Range("B4").Value Then
.Range("A" & i).Value = "erfasst"
gefunden = True
Exit For
End If
Next i
If gefunden = False Then
If MsgBox("Datensatz nicht gefunden. Eintragen?", vbYesNo) = vbYes Then
.Range("B" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).Value = .Range("B4").Value
.Range("A" & .Cells(Rows.Count, 2).End(xlUp).Row).Value = "Neueintrag"
End If
End If
Application.EnableEvents = False
.Range("B4").Value = ""
.Range("B4").Select
Application.EnableEvents = True
End If
End With
End Sub


Gruß Specke

Anzeige
AW: unklare Aufgabenstellung
25.03.2009 22:43:30
Jaffi
Specke ich Danke Dir 10000mal.
Das Doofe ich sitze zuhaus und habe natürlich die Tabelle nicht da um gleich zu testen. Ich glaube meine Frau würde mich auch töten, von daher wahrscheinlich auch besser ;))
Aber werde gleich morgen früh austesten.
Ich will dir natürlich nicht den ganzen Arm ausreissen aber ich hätte trotzdem noch 1 kleine Bitte und 2 Fragen
Zur Bitte:
Könntest Du mir mit kleinen Kommentaren im Code aufzeigen was die einzelnen Zeilen genau tun? Wie gesagt bin absoluter Anfänger und WILL verstehen was er tut...vielleicht auch für Zukünftige Projekte...das wäre unbezahlbar für mich
Die Fragen:
1. Ich kann mit dem von dir erstellten Code doch jetzt nicht sicher stellen das in B4 ein eingeschränkter Zeichensatz eingeben wird, oder? (ich will Schreibfehler vermeiden, er muss 15 Zeichen lang sein, mit A beginnen und mit ZED enden?
2. Kann ich mir den Code jetzt ganz einfach so umschreiben um mir ein zweites "Eingabe-Suchfeld" (B5) zu generieren? Die dort eingebenen Seriennummern sollen ebenfalls in Spalte B gesucht werden. Allerdings muss er nicht ganz soviel tun. Die gefundenen SNern sollen in der Zelle links daneben einfach mit "nicht mehr vorhanden" gekennzeichnet werden. Die nicht gefundenen sollen einfach eine msgbox ausgeben: "War nie da!" fertig...
Ich hoffe wirklich das das nicht zuviel verlangt ist, aber wie gesagt hab noch 2 Tage
von Deiner Hilfe beindruckt
Dankt und Grüsst demütig
J
Anzeige
AW: unklare Aufgabenstellung
25.03.2009 22:57:25
Specke
Hallo Jaffi,
zu 1.
was soll passieren, wenn der eingegebene Wert nicht mit A beginnt, nicht 15 Stellen lang ist und nicht mit ZED endet? Oder willst Du nur die 11 mittigen Stellen eingeben?
zu 2.
schau Dir den kommentierten Code an und versuch es. Wenn es nicht klappt, melde Dich nochmal.

Private Sub Worksheet_Change(ByVal Target As Range)
gefunden = False
With Worksheets(1)
'wenn Zelle B4 verändert wurde
If Target.Address = "$B$4" Then
'von Zeile 5 bis zur letzten benutzen Zeile von Spalte B
For i = 5 To .Cells(Rows.Count, 2).End(xlUp).Row
'wenn der Wert in Spalte B der aktuell durchsuchten Zeile gleich dem Wert in B4 ist
If .Range("B" & i).Value = .Range("B4").Value Then
'schreibe in Spalte A der durchsuchten Zeile "erfasst"
.Range("A" & i).Value = "erfasst"
'Variable "gefunden" setzen
gefunden = True
'Suche beenden
Exit For
End If
'nächste Zeile
Next i
'wenn kein Wert gefunden wurde (Variable "gefunden" wurde nicht gesetzt)
If gefunden = False Then
'wenn eingeblendete Msgbox mit "ja" beantwortet wird
If MsgBox("Datensatz nicht gefunden. Eintragen?", vbYesNo) = vbYes Then
'schreibe den Wert aus B4 in die erste freie Zeile in Spalte B
.Range("B" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).Value = .Range("B4").Value
'schreibe "Neueintrag" in die gleiche Zeile in Spalte A
.Range("A" & .Cells(Rows.Count, 2).End(xlUp).Row).Value = "Neueintrag"
End If
End If
'Events deaktivieren (sonst Endlosschleife)
Application.EnableEvents = False
'Inhalt aus Zelle B4 löschen
.Range("B4").Value = ""
'Zelle B4 auswählen
.Range("B4").Select
'Events aktivieren (sonst funktioniert kein Makro mehr)
Application.EnableEvents = True
End If
End With
End Sub


Gruß Specke

Anzeige
AW: unklare Aufgabenstellung
26.03.2009 11:48:51
Jaffi
Hallo Speck,
wenn der Eingebene Zahlensatz nicht mit A beginnt, 15 Stellen hat, und mit ZED endelt soll er abbrechen und msxbox ausgeben. "Keine gültige Seriennummer" Mensch daran hätte ich alleine denken müssen das das wichtig ist...
das andere teste ich gerade....
Tausend Dank Specke...
dieser Zeitdruck ist belastend, wie schaffen das ECHTE Entwickler nur ;)
AW: unklare Aufgabenstellung
26.03.2009 12:41:22
Specke
Hallo Jaffi,
dann so:

Private Sub Worksheet_Change(ByVal Target As Range)
gefunden = False
With Worksheets(1)
'wenn Zelle B4 verändert wurde
If Target.Address = "$B$4" Then
If Left(.Range("B4").Value, 1) = "A" And Len(.Range("B4").Value) = 15 And Right(.Range("B4"). _
Value, 3) = "ZED" Then
'von Zeile 5 bis zur letzten benutzen Zeile von Spalte B
For i = 5 To .Cells(Rows.Count, 2).End(xlUp).Row
'wenn der Wert in Spalte B der aktuell durchsuchten Zeile gleich dem Wert in B4 ist
If .Range("B" & i).Value = .Range("B4").Value Then
'schreibe in Spalte A der durchsuchten Zeile "erfasst"
.Range("A" & i).Value = "erfasst"
'Variable "gefunden" setzen
gefunden = True
'Suche beenden
Exit For
End If
'nächste Zeile
Next i
'wenn kein Wert gefunden wurde (Variable "gefunden" wurde nicht gesetzt)
If gefunden = False Then
'wenn eingeblendete Msgbox mit "ja" beantwortet wird
If MsgBox("Datensatz nicht gefunden. Eintragen?", vbYesNo) = vbYes Then
'schreibe den Wert aus B4 in die erste freie Zeile in Spalte B
.Range("B" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).Value = .Range("B4").Value
'schreibe "Neueintrag" in die gleiche Zeile in Spalte A
.Range("A" & .Cells(Rows.Count, 2).End(xlUp).Row).Value = "Neueintrag"
End If
End If
Else
MsgBox "Keine gültige Seriennummer"
End If
'Events deaktivieren (sonst Endlosschleife)
Application.EnableEvents = False
'Inhalt aus Zelle B4 löschen
.Range("B4").Value = ""
'Zelle B4 auswählen
.Range("B4").Select
'Events aktivieren (sonst funktioniert kein Makro mehr)
Application.EnableEvents = True
End If
End With
End Sub


Gruß Specke

Anzeige
AW: unklare Aufgabenstellung
26.03.2009 13:53:15
Jaffi
So Specke, nun bin ich mit meinem Latein am Ende. Kopf platzt und ich stehe vor einem riesen Fragezeichen :(
Ich hätte dazu sagen sollen, das auf meinem Sheet schon eine Prozedur mit der gleichen Bezeichnung läuft..
Diese befüllt mir nacheinander die Spalte B mit Seriennummern und Schreibt ein Datum daneben.
Die Kontrollfelder B2 (übrigens nicht B4 :o/) und B1 müssen dann wohl in ein und die selbe Prozedur rein...logisch!! :( man was hab ich mir da nur angetan *grummel*
Bekommt man folgende Zwei Prozeduren irgendwie zusammen in eine? Ich hab schon alles durchprobiert aber ich weis einfach noch zu wenig über VBA:
UND in den unten genannten Code fehlt mir ja noch das anfangs erwähnte 2 Kontollfeld B1-Dieses soll ja auch die Spalte B überprüfen. Wenn Zeichensatz vorhanden ein "verkauft" in die Spalte A daneben schreiben. Wenn nicht vorhanden einfach nur msgbox und nichts weiter....
Specke geb ich jetzt auf und knie vor meinem Chef nieder?
Würde lieber vor Deiner Hilfe niederknien :(

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 4 And Target.Column = 2 And Target.Value  "" Then
Application.EnableEvents = False
If Target.Value Like "A?ZED" Then
Target.Offset(0, 1).Value = Now
Else
Beep
Target.Value = ""
Target.Cells.Select
End If
Application.EnableEvents = True
End If
End Sub


----------------------------------------------------------------------------------------


Private Sub Worksheet_Change(ByVal Target As Range)
gefunden = False
With Worksheets(1)
'wenn Zelle B2 verändert wurde
If Target.Address = "$B$2" Then
If Left(.Range("B2").Value, 1) = "A" And Len(.Range("B4").Value) = 15 And Right(.Range("B4").  _
_
Value, 3) = "ZED" Then
'von Zeile 4 bis zur letzten benutzen Zeile von Spalte B
For i = 4 To .Cells(Rows.Count, 2).End(xlUp).Row
'wenn der Wert in Spalte B der aktuell durchsuchten Zeile gleich dem Wert in B2 ist
If .Range("B" & i).Value = .Range("B2").Value Then
'schreibe in Spalte A der durchsuchten Zeile "erfasst"
.Range("A" & i).Value = "erfasst"
'Variable "gefunden" setzen
gefunden = True
'Suche beenden
Exit For
End If
'nächste Zeile
Next i
'wenn kein Wert gefunden wurde (Variable "gefunden" wurde nicht gesetzt)
If gefunden = False Then
'wenn eingeblendete Msgbox mit "ja" beantwortet wird
If MsgBox("Datensatz nicht gefunden. Eintragen?", vbYesNo) = vbYes Then
'schreibe den Wert aus B2 in die erste freie Zeile in Spalte B
.Range("B" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).Value = .Range("B4").Value
'schreibe "Neueintrag" in die gleiche Zeile in Spalte A
.Range("A" & .Cells(Rows.Count, 2).End(xlUp).Row).Value = "Neueintrag"
End If
End If
Else
MsgBox "Keine gültige Seriennummer"
End If
'Events deaktivieren (sonst Endlosschleife)
Application.EnableEvents = False
'Inhalt aus Zelle B2 löschen
.Range("B2").Value = ""
'Zelle B2 auswählen
.Range("B2").Select
'Events aktivieren (sonst funktioniert kein Makro mehr)
Application.EnableEvents = True
End If
End With
End Sub


Anzeige
AW: unklare Aufgabenstellung
26.03.2009 14:09:42
Specke
Hallo Jaffi,
ungetestet:

Private Sub Worksheet_Change(ByVal Target As Range)
'wenn Zelle B4 verändert wurde
If Target.Row >= 4 And Target.Column = 2 And Target.Value  "" Then
Application.EnableEvents = False
If Target.Value Like "A?ZED" Then
Target.Offset(0, 1).Value = Now
Else
Beep
Target.Value = ""
Target.Cells.Select
End If
Application.EnableEvents = True
'wenn Zelle B2 verändert wurde
ElseIf Target.Address = "$B$2" Then
gefunden = False
With Worksheets(1)
If Target.Value Like "A?ZED" Then
'von Zeile 4 bis zur letzten benutzen Zeile von Spalte B
For i = 4 To .Cells(Rows.Count, 2).End(xlUp).Row
'wenn der Wert in Spalte B der aktuell durchsuchten Zeile gleich dem Wert in B2 ist
If .Range("B" & i).Value = .Range("B2").Value Then
'schreibe in Spalte A der durchsuchten Zeile "erfasst"
.Range("A" & i).Value = "erfasst"
'Variable "gefunden" setzen
gefunden = True
'Suche beenden
Exit For
End If
'nächste Zeile
Next i
'wenn kein Wert gefunden wurde (Variable "gefunden" wurde nicht gesetzt)
If gefunden = False Then
'wenn eingeblendete Msgbox mit "ja" beantwortet wird
If MsgBox("Datensatz nicht gefunden. Eintragen?", vbYesNo) = vbYes Then
'schreibe den Wert aus B2 in die erste freie Zeile in Spalte B
.Range("B" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).Value = .Range("B4").Value
'schreibe "Neueintrag" in die gleiche Zeile in Spalte A
.Range("A" & .Cells(Rows.Count, 2).End(xlUp).Row).Value = "Neueintrag"
End If
End If
Else
MsgBox "Keine gültige Seriennummer"
End If
'Events deaktivieren (sonst Endlosschleife)
Application.EnableEvents = False
'Inhalt aus Zelle B2 löschen
.Range("B2").Value = ""
'Zelle B2 auswählen
.Range("B2").Select
'Events aktivieren (sonst funktioniert kein Makro mehr)
Application.EnableEvents = True
ElseIf Target.Address = "$B$1" Then
gefunden = False
With Worksheets(1)
If Target.Value Like "A?ZED" Then
'von Zeile 4 bis zur letzten benutzen Zeile von Spalte B
For i = 4 To .Cells(Rows.Count, 2).End(xlUp).Row
'wenn der Wert in Spalte B der aktuell durchsuchten Zeile gleich dem Wert in B1 ist
If .Range("B" & i).Value = .Range("B1").Value Then
'schreibe in Spalte A der durchsuchten Zeile "verkauft"
.Range("A" & i).Value = "verkauft"
'Variable "gefunden" setzen
gefunden = True
'Suche beenden
Exit For
End If
'nächste Zeile
Next i
'wenn kein Wert gefunden wurde (Variable "gefunden" wurde nicht gesetzt)
If gefunden = False Then
'Msgbox
MsgBox "Datensatz nicht gefunden."
End If
Else
MsgBox "Keine gültige Seriennummer"
End If
'Events deaktivieren (sonst Endlosschleife)
Application.EnableEvents = False
'Inhalt aus Zelle B1 löschen
.Range("B1").Value = ""
'Zelle B1 auswählen
.Range("B1").Select
'Events aktivieren (sonst funktioniert kein Makro mehr)
Application.EnableEvents = True
End If
End With
End Sub


Gruß Specke

Anzeige
AW: unklare Aufgabenstellung
26.03.2009 14:19:43
Jaffi
Oh man was fürn Code...
das kann ich garnicht bei Dir gut machen
ABER er sagt "Fehler beim Kompilieren Else ohne IF :((((
AW: unklare Aufgabenstellung
26.03.2009 14:26:51
Specke
Hallo Jaffi,
die With-Klammer für das Worksheet war verrutscht ;-)

Private Sub Worksheet_Change(ByVal Target As Range)
With Worksheets(1)
'wenn Zelle B4 verändert wurde
If Target.Row >= 4 And Target.Column = 2 And Target.Value  "" Then
Application.EnableEvents = False
If Target.Value Like "A?ZED" Then
Target.Offset(0, 1).Value = Now
Else
Beep
Target.Value = ""
Target.Cells.Select
End If
Application.EnableEvents = True
'wenn Zelle B2 verändert wurde
ElseIf Target.Address = "$B$2" Then
gefunden = False
If Target.Value Like "A?ZED" Then
'von Zeile 4 bis zur letzten benutzen Zeile von Spalte B
For i = 4 To .Cells(Rows.Count, 2).End(xlUp).Row
'wenn der Wert in Spalte B der aktuell durchsuchten Zeile gleich dem Wert in B2 ist
If .Range("B" & i).Value = .Range("B2").Value Then
'schreibe in Spalte A der durchsuchten Zeile "erfasst"
.Range("A" & i).Value = "erfasst"
'Variable "gefunden" setzen
gefunden = True
'Suche beenden
Exit For
End If
'nächste Zeile
Next i
'wenn kein Wert gefunden wurde (Variable "gefunden" wurde nicht gesetzt)
If gefunden = False Then
'wenn eingeblendete Msgbox mit "ja" beantwortet wird
If MsgBox("Datensatz nicht gefunden. Eintragen?", vbYesNo) = vbYes Then
'schreibe den Wert aus B2 in die erste freie Zeile in Spalte B
.Range("B" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).Value = .Range("B4").Value
'schreibe "Neueintrag" in die gleiche Zeile in Spalte A
.Range("A" & .Cells(Rows.Count, 2).End(xlUp).Row).Value = "Neueintrag"
End If
Else
MsgBox "Keine gültige Seriennummer"
End If
End If
'Events deaktivieren (sonst Endlosschleife)
Application.EnableEvents = False
'Inhalt aus Zelle B2 löschen
.Range("B2").Value = ""
'Zelle B2 auswählen
.Range("B2").Select
'Events aktivieren (sonst funktioniert kein Makro mehr)
Application.EnableEvents = True
ElseIf Target.Address = "$B$1" Then
gefunden = False
If Target.Value Like "A?ZED" Then
'von Zeile 4 bis zur letzten benutzen Zeile von Spalte B
For i = 4 To .Cells(Rows.Count, 2).End(xlUp).Row
'wenn der Wert in Spalte B der aktuell durchsuchten Zeile gleich dem Wert in B1 ist
If .Range("B" & i).Value = .Range("B1").Value Then
'schreibe in Spalte A der durchsuchten Zeile "verkauft"
.Range("A" & i).Value = "verkauft"
'Variable "gefunden" setzen
gefunden = True
'Suche beenden
Exit For
End If
'nächste Zeile
Next i
'wenn kein Wert gefunden wurde (Variable "gefunden" wurde nicht gesetzt)
If gefunden = False Then
'Msgbox
MsgBox "Datensatz nicht gefunden."
End If
Else
MsgBox "Keine gültige Seriennummer"
End If
'Events deaktivieren (sonst Endlosschleife)
Application.EnableEvents = False
'Inhalt aus Zelle B1 löschen
.Range("B1").Value = ""
'Zelle B1 auswählen
.Range("B1").Select
'Events aktivieren (sonst funktioniert kein Makro mehr)
Application.EnableEvents = True
End If
End With
End Sub


Gruß Specke

Anzeige
AW: unklare Aufgabenstellung
26.03.2009 16:55:56
Jaffi
Jawoll!!!! Es funzt...bissl hin und her geschoben und ich habs sogar "fast" selber gesehen ;o) Specke dafür bin ich Dir bis ans Ende meines Lebens dankbar .....1000000000000000000 mal Danke schön...
Aber natürlich wie solls bei Jaffi anders sein... :( ich hab ein letztes Problem vergessen... was mache ich, wenn er beim Überprüfen (in B1) in Spalte B einen Wert findet, aber da schon "erfasst" daneben steht.... Frag nicht, aber das kann hier passieren :/ er müsste hier auch abrechen und msgbox ausgeben. Das gleiche im Überprüfungsfeld B2. Steht schon "verkauft" ebenfalls msgbox und abbruch.
Ich habe jetzt wirklich ne Stunde davor gegrübelt, aber ich habe jetzt ganz sicher nichts mehr vergessen!!!! versprochen ;o) Und dann steht die Tabelle. 1 Tag vor Zielsetzung, Dank Dir Specke.!!!
Nur noch nen bissl Schick machen, "verkauft" in Rot, "erfasst" in Grün und alles ist bestens, aber das bekomme ich, denke ich ;), selber hin ;)
vielen Dank für Deine wirklich allerletzte Hilfe
vg
J
AW: unklare Aufgabenstellung
26.03.2009 18:09:42
Specke
Hallo Jaffi,
gern geschehen. Dann schau mer mal, ob jetzt alle Sonderfälle abgedeckt sind ;-) Du hast ja noch einen Tag.

Private Sub Worksheet_Change(ByVal Target As Range)
With Worksheets(1)
'wenn Zelle B4 verändert wurde
If Target.Row >= 4 And Target.Column = 2 And Target.Value  "" Then
Application.EnableEvents = False
If Target.Value Like "A?ZED" Then
Target.Offset(0, 1).Value = Now
Else
Beep
Target.Value = ""
Target.Cells.Select
End If
Application.EnableEvents = True
'wenn Zelle B2 verändert wurde
ElseIf Target.Address = "$B$2" Then
gefunden = False
If Target.Value Like "A?ZED" Then
'von Zeile 4 bis zur letzten benutzen Zeile von Spalte B
For i = 4 To .Cells(Rows.Count, 2).End(xlUp).Row
'wenn der Wert in Spalte B der aktuell durchsuchten Zeile gleich dem Wert in B2 ist
If .Range("B" & i).Value = .Range("B2").Value Then
'wenn in Spalte A bereits "verkauft" steht
If .Range("A" & i).Value = "verkauft" Then
MsgBox "Datensatz bereits verkauft"
Else
'schreibe in Spalte A der durchsuchten Zeile "erfasst"
.Range("A" & i).Value = "erfasst"
End If
'Variable "gefunden" setzen
gefunden = True
'Suche beenden
Exit For
End If
'nächste Zeile
Next i
'wenn kein Wert gefunden wurde (Variable "gefunden" wurde nicht gesetzt)
If gefunden = False Then
'wenn eingeblendete Msgbox mit "ja" beantwortet wird
If MsgBox("Datensatz nicht gefunden. Eintragen?", vbYesNo) = vbYes Then
'schreibe den Wert aus B2 in die erste freie Zeile in Spalte B
.Range("B" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).Value = .Range("B4").Value
'schreibe "Neueintrag" in die gleiche Zeile in Spalte A
.Range("A" & .Cells(Rows.Count, 2).End(xlUp).Row).Value = "Neueintrag"
End If
Else
MsgBox "Keine gültige Seriennummer"
End If
End If
'Events deaktivieren (sonst Endlosschleife)
Application.EnableEvents = False
'Inhalt aus Zelle B2 löschen
.Range("B2").Value = ""
'Zelle B2 auswählen
.Range("B2").Select
'Events aktivieren (sonst funktioniert kein Makro mehr)
Application.EnableEvents = True
ElseIf Target.Address = "$B$1" Then
gefunden = False
If Target.Value Like "A?ZED" Then
'von Zeile 4 bis zur letzten benutzen Zeile von Spalte B
For i = 4 To .Cells(Rows.Count, 2).End(xlUp).Row
'wenn der Wert in Spalte B der aktuell durchsuchten Zeile gleich dem Wert in B1 ist
If .Range("B" & i).Value = .Range("B1").Value Then
'wenn in Spalte A bereits "erfasst" steht
If .Range("A" & i).Value = "erfasst" Then
MsgBox "Datensatz bereits erfasst"
Else
'schreibe in Spalte A der durchsuchten Zeile "verkauft"
.Range("A" & i).Value = "verkauft"
End If
'Variable "gefunden" setzen
gefunden = True
'Suche beenden
Exit For
End If
'nächste Zeile
Next i
'wenn kein Wert gefunden wurde (Variable "gefunden" wurde nicht gesetzt)
If gefunden = False Then
'Msgbox
MsgBox "Datensatz nicht gefunden."
End If
Else
MsgBox "Keine gültige Seriennummer"
End If
'Events deaktivieren (sonst Endlosschleife)
Application.EnableEvents = False
'Inhalt aus Zelle B1 löschen
.Range("B1").Value = ""
'Zelle B1 auswählen
.Range("B1").Select
'Events aktivieren (sonst funktioniert kein Makro mehr)
Application.EnableEvents = True
End If
End With
End Sub


Gruß Specke

AW: unklare Aufgabenstellung
26.03.2009 19:42:17
Jaffi
;) du glaubst garnicht wie sehr ich das hoffe ;o)
haach aber irgendwas simmt nicht.
Wenn ich in B2 eine Seriennummer überprüfe die bereits mit "verkauft" gekennzeichnet ist schimpft er zwar "Datensatz bereits verkauft" klicke ich aber ok, sagt mir eine zweite msgbox "keine Gültige Seriennummer"
Da aber das "erfasst" hochwertiger ist, da ja definitiv noch da, als das "verkauft" müsste er mir zwar die msgbox "Datensatz bereits verkauft" ausspucken aber mir trotzdem ein "erfasst" daneben schreiben. Die Daten mit erfasst bleiben in der Tabelle, die Daten mit verkauft werden komplett rausgelöscht. Deshalb muss alles was "erfasst" wurde, also wirklich physisch da ist auch mit erfasst gekennzeichnet werden.
man das ist doch... sorry Specke...ich hoffe du verstehst was ich meine?
demütig und dankbar grüsst
J
AW: unklare Aufgabenstellung
26.03.2009 20:19:05
Specke
Hallo Jaffi,
nächster Versuch:

Private Sub Worksheet_Change(ByVal Target As Range)
With Worksheets(1)
'wenn Zelle B4 verändert wurde
If Target.Row >= 4 And Target.Column = 2 And Target.Value  "" Then
Application.EnableEvents = False
If Target.Value Like "A?ZED" Then
Target.Offset(0, 1).Value = Now
Else
Beep
Target.Value = ""
Target.Cells.Select
End If
Application.EnableEvents = True
'wenn Zelle B2 verändert wurde
ElseIf Target.Address = "$B$2" Then
gefunden = False
If Target.Value Like "A?ZED" Then
'von Zeile 4 bis zur letzten benutzen Zeile von Spalte B
For i = 4 To .Cells(Rows.Count, 2).End(xlUp).Row
'wenn der Wert in Spalte B der aktuell durchsuchten Zeile gleich dem Wert in B2 ist
If .Range("B" & i).Value = .Range("B2").Value Then
'wenn in Spalte A bereits "verkauft" steht
If .Range("A" & i).Value = "verkauft" Then
MsgBox "Datensatz bereits verkauft"
End If
'schreibe in Spalte A der durchsuchten Zeile "erfasst"
.Range("A" & i).Value = "erfasst"
'Variable "gefunden" setzen
gefunden = True
'Suche beenden
Exit For
End If
'nächste Zeile
Next i
'wenn kein Wert gefunden wurde (Variable "gefunden" wurde nicht gesetzt)
If gefunden = False Then
'wenn eingeblendete Msgbox mit "ja" beantwortet wird
If MsgBox("Datensatz nicht gefunden. Eintragen?", vbYesNo) = vbYes Then
'schreibe den Wert aus B2 in die erste freie Zeile in Spalte B
.Range("B" & .Cells(Rows.Count, 2).End(xlUp).Row + 1).Value = .Range("B4").Value
'schreibe "Neueintrag" in die gleiche Zeile in Spalte A
.Range("A" & .Cells(Rows.Count, 2).End(xlUp).Row).Value = "Neueintrag"
End If
End If
Else
MsgBox "Keine gültige Seriennummer"
End If
'Events deaktivieren (sonst Endlosschleife)
Application.EnableEvents = False
'Inhalt aus Zelle B2 löschen
.Range("B2").Value = ""
'Zelle B2 auswählen
.Range("B2").Select
'Events aktivieren (sonst funktioniert kein Makro mehr)
Application.EnableEvents = True
ElseIf Target.Address = "$B$1" Then
gefunden = False
If Target.Value Like "A?ZED" Then
'von Zeile 4 bis zur letzten benutzen Zeile von Spalte B
For i = 4 To .Cells(Rows.Count, 2).End(xlUp).Row
'wenn der Wert in Spalte B der aktuell durchsuchten Zeile gleich dem Wert in B1 ist
If .Range("B" & i).Value = .Range("B1").Value Then
'wenn in Spalte A bereits "erfasst" steht
If .Range("A" & i).Value = "erfasst" Then
MsgBox "Datensatz bereits erfasst"
Else
'schreibe in Spalte A der durchsuchten Zeile "verkauft"
.Range("A" & i).Value = "verkauft"
End If
'Variable "gefunden" setzen
gefunden = True
'Suche beenden
Exit For
End If
'nächste Zeile
Next i
'wenn kein Wert gefunden wurde (Variable "gefunden" wurde nicht gesetzt)
If gefunden = False Then
'Msgbox
MsgBox "Datensatz nicht gefunden."
End If
Else
MsgBox "Keine gültige Seriennummer"
End If
'Events deaktivieren (sonst Endlosschleife)
Application.EnableEvents = False
'Inhalt aus Zelle B1 löschen
.Range("B1").Value = ""
'Zelle B1 auswählen
.Range("B1").Select
'Events aktivieren (sonst funktioniert kein Makro mehr)
Application.EnableEvents = True
End If
End With
End Sub


Gruß Specke

380 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige