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

Bei Übereinstimmung ersetzen, sonst neue Zeile

Bei Übereinstimmung ersetzen, sonst neue Zeile
24.11.2015 23:59:23
A.G.
Hallo zusammen,
vorab eine kurze Info über mich.
Ich habe eigentlich keine große Ahnung von VBA. Alle funktionierenden Markos meiner Tabelle habe ich mir in mühsamer Arbeit zusammengepfuscht. ^^
Habt Nachsicht mit mir.
Zu meine Problem
Ich habe eine UserForm in der ich Aufträge eingebe. Diese UserForm hat eigentlich an die 140 TextBoxen aber für die Problembeschreibung kürze ich das ganze erstmal auf eine TextBox.
Das eingeben, abspeichern und auch wieder aufrufen der Aufträge funktioniert soweit einwandfrei.
Was ich aber bräuchte und was ich nicht zum laufen kriege, ist das überschreiben bereits vorhandener Aufträge in Verbindung mit einer Abfrage.
Einige Eckdaten:
Arbeitsblatt = "Lieferungen"
Gesuchter Wert "Auftragsnummer" ist eine Zehnstellige Zahl und befindet sich auf dem Arbeitsblatt "Lieferungen" in Spalte B untereinander. In der UserForm wird die Auftragsnummer in der TextBox "txtAuftragsnummer" eingegeben.
Ziel:
Wenn ich einen Auftrag eingebe und speichern will, soll ein Marko die vorhandenen Aufträge durchsuchen ob die Auftragsnummer in Spalte B bereits vergeben ist.
Wenn KEINE Übereinstimmung = Neuen Auftrag in der untersten leeren Zeile anlegen.
Wenn Übereinstimmung = MsgBox "Auftrag bereits vorhanden! Überschreiben JA/NEIN?
JA = Werte überschreiben
NEIN = Nichts tun
Habe bereits einen Code zusammengeschustert, aber wenn ich absichtlich eine bereits vorhandene Auftragsnummer eingebe vergleicht er diese erst gar nicht und legt in der untersten Zeile einen Auftrag mit der selben Auftragsnummer an.
Private Sub cmbÜbernehmen_Click()
Dim Index As Long
With Sheets("Lieferungen").Activate
For Index = 4 To ActiveSheet.UsedRange.Rows.Count + 1
If InStr(LCase(ActiveSheet.Cells(Index, 2).Value), LCase(usfErfassung.txtAuftragsnummer.Value)) 0 Then GoTo Abfrage Else GoTo NeuerAuftrag
Next
Abfrage:
If MsgBox("Übereinstimmung gefunden", vbYesNo + vbQuestion, _
"Auftrag überschreiben?") = vbYes Then GoTo Überschreiben Else GoTo EndeMakro
Überschreiben:
With ActiveSheet
'Lieferantendaten
.Cells(i, 2).Value = usfErfassung.txtAuftragsnummer.Value
EndeMakro:
Exit Sub
NeuerAuftrag:
Dim intErsteLeereZeile As Long
With ActiveSheet
intErsteLeereZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 0
.Cells(intErsteLeereZeile, 2).Value = usfErfassung.txtAuftragsnummer.Value

Wo ist der Fehler?

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

Betreff
Datum
Anwender
Anzeige
AW: Bei Übereinstimmung ersetzen, sonst neue Zeile
27.11.2015 16:28:14
Michael
Hallo A.G.,
das fehlerhafte Verhalten wundert mich nicht. Gehe mal den Code mit der F8-Taste durch, dann wirst Du sehen, daß er bereits beim *ersten* Durchgang aus der For-Schleife "heraushüpft", es sei denn, die eingegebene Nummer stimmt mit der ersten Zeile des durchsuchten Bereichs überein.
Das liegt an der If-Abfrage, denn Du verläßt die Schleife bei *beiden* Zweigen.
Überhaupt ist es viel einfacher, mit .Find zu arbeiten (also entsprechend der händischen Suche in einem Tabellenblatt mit Strg+f).
Ein Beispiel dazu findest Du hier: https://www.herber.de/mailing/vb/html/xlmthfind.htm
Ich baue es Dir gerne in Deinen Code ein, aber dazu lade bitte eine Beispieldatei hoch.
Schöne Grüße,
Michael

Anzeige
AW: Bei Übereinstimmung ersetzen, sonst neue Zeile
27.11.2015 22:37:02
A.G.
Hallo Michael,
über Hilfe würde ich mich sehr freuen.
Sitze schon seit knapp 3 Wochen an diesem Problem.
Den Link hab ich mir schon angesehen. Aber wie bereits geschrieben, hab ich absolut keine Ahnung von den Sachen die da zu lesen sind.
Habe eine Beispieldatei hochgeladen.
Wäre nett wenn du da mal drüber schaust...
https://www.herber.de/bbs/user/101858.xlsm
Vielen Dank und freundlichen Gruß
A.G.

Überarbeitet
28.11.2015 15:54:38
Michael
Hallo A.G.,
ich habe mir Dein "Baby" mal zur Brust genommen und den Code "in Form gebracht" und etwas erweitert.
Mit .Find *könnte* man schauen, ob eine Auftrags-Nr. mehrfach vorkommt, das habe ich allerdings nicht eingebaut, weil es in der Praxis eigentlich auch nicht vorkommen *sollte*. Deine Beispieldaten enthalten zwar mehrfache Auftragsnummern, teils mit gleichen, teils mit unterschiedlichen Firmen, aber ich denke, das sind nur Relikte Deiner Testphase.
*Angezeigt* wird jedenfalls nur der erste Treffer, und dann kann sich der Anwender entscheiden, ob er ihn überschreiben will oder nicht.
*Angezeigt* heißt, daß ich eine weitere Abfrage eingebaut habe: wenn das Formular vollstängig ausgefüllt wurde, kann der Anwender übernehmen, wenn nicht, dann wird wirklich nur angezeigt.
Die Datei: https://www.herber.de/bbs/user/101871.xlsm
Happy Exceling,
Michael

Anzeige
AW: Überarbeitet
29.11.2015 16:24:12
A.G.
Michael...
vielleicht war das ein Kinderspiel für dich...
ABER dennoch bin ich der Meinung, dass du eine geile SAU bist!!!
Das hat meinen Tag gerettet.
Zu 100% kann ich das nicht übernehmen, aber den größten Teil.
Ich bau das so schnell es geht in meine originale Tabelle ein und lade diese dann auch noch mal hoch.
Vielleicht kann es der ein oder andere ja mal für eigene Zwecke, zweckentfremden.
Nochmals vielen Dank! :)

freut mich, danke für die Rückmeldung owT
30.11.2015 15:57:43
Michael

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige