Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Bei Übereinstimmung ersetzen, sonst neue Zeile

Betrifft: Bei Übereinstimmung ersetzen, sonst neue Zeile von: A.G.
Geschrieben am: 24.11.2015 23:59:23

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?

  

Betrifft: AW: Bei Übereinstimmung ersetzen, sonst neue Zeile von: Michael
Geschrieben am: 27.11.2015 16:28:14

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


  

Betrifft: AW: Bei Übereinstimmung ersetzen, sonst neue Zeile von: A.G.
Geschrieben am: 27.11.2015 22:37:02

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.


  

Betrifft: Überarbeitet von: Michael
Geschrieben am: 28.11.2015 15:54:38

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


  

Betrifft: AW: Überarbeitet von: A.G.
Geschrieben am: 29.11.2015 16:24:12

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! :)


  

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




 

Beiträge aus den Excel-Beispielen zum Thema "Bei Übereinstimmung ersetzen, sonst neue Zeile "