1.3k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo an alle Anwesenden,

habe mal wieder eine recht einfaches Problem mit einem steinigen Lösungsweg.
Wer kann mir helfen die Steibne zu beseitigen?

Hier meine Problemschilderung:

Habe eine Liste in welcher sich in der Spalte A:A Artikelnummer befinden.
Ich möchte mir nun ein Makro basteln, welches doppelte Einträge erkennt und mir über eine Msg-Box die Meldung ausgibt "Artikel "A0....." bereits angelegt".
Um nicht ganz mit leeren Händen da zu stehen habe ich hier meine bisherigen Bearbeitungsstatus angehangen.

Public Sub Vergleichen()
Dim lngZeile As Long
Dim lngZeilenSprung As Long
Dim strSuchwert As String

lngZeile = Cells(Rows.Count, 1).End(xlUp).Row

For lngZeilenSprung = lngZeile To 1 Step -1
strSuchwert = Cells(lngZeilenSprung, 1).Value
If strSuchwert <> "" Then
If Application.WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(lngZeile, 1)), strSuchwert) <> 1 Then
MsgBox ActiveCell.Value & " ist schon " & Anz & " - mal vorhanden"

End If
End If

Next lngZeilenSprung

End Sub

Wer kann mir helfen dieses "Wirrwarr" zur entfizzeln?

Vielen Dank und Grüsse,

Kappa

5 Antworten

0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

schreibe die Zeile aso:
MsgBox Cells(lngZeilenSprung, 1).Value & " ist schon " & _
Application.WorksheetFunction.CountIf(Range(Cells(1, 1), Cells(lngZeile, 1)), strSuchwert) & _
" - mal vorhanden"

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo Karin,

echt super dein Lösungsvorschlag.
Das Makro bringt den erwünschten Effekt.

Was jetzt nur noch hinkt an dem Code ist die Tatsache, dass die MsgBox nicht aufpoppt sowie die doppelt eingetragene Artikel-Nr. eingeschrieben wird,sondern erst nachdem ich dem Makro den Befehl zur Ausführung gebe.
Des weitern ploppt die Meldung "Artikel...." doppelt auf.

Was kann man an dem Code umschreiben, dass diese kleinen Mankos bereinigt werden?

Vielen Dank und Grüsse,

Kappa
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

das ist aber eine andere Aufgabenstellung. Kopiere dazu folgenden Code ins Codemodul des Tabellenblattes:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns(1)) Is Nothing Then
If Target.Count = 1 Then
If Application.CountIf(Columns(1), Target) > 1 Then _
MsgBox Target & " ist schon " & Application.CountIf(Columns(1), Target) - 1 & _
" - mal vorhanden"
End If
End If
End Sub

Falls die gerade gemachte Eingabe bei der auszugebenden Anzahl mit gezählt werden soll, dann lasse "- 1" weg.

Bis später,
Karin
0 Punkte
Beantwortet von
Hallo Karin,

stehe momentan ein wenig auf dem Schlauch.
Zur Erläuterung:
-> habe den Hauptteil des von mir angehangenen Codes aus anderen Quellen entnommen.
Befinde mich nämlich noch in einem absoluten Anfängerstadium was Makros angeht.
Habe nun das Problem den Kopfteil des Codes zu entziffern.
Ist er überhaupt zweckdienlich für meine Anforderungen oder ist es schon zu viel des Guten?
Reicht für das beschriebene Problem die von Dir angebotene Lösung völlig aus?
Würde mich über eine Übersetzung freuen bevor ich mich für eine der Lösungen entscheide.

Vielen Dank und Grüße,

Kappa
0 Punkte
Beantwortet von beverly Experte (3.5k Punkte)
Hi,

wie du von dir geposteten Code startest, geht leider aus keinem deiner Beiträge hervor.
Er durchläuft alle Zeilen der Spalte A und prüft - das geschieht in der For...Next Schleife - ob der Suchbegriff mehrfach vorhanden ist. Deshalb erscheint die MsgBox auch mehrmals - immer dann, wenn eine Zelle mit dem Suchbegriff gerade durchlaufen wird, gleichgültig ob es die erste, zweite, fünfte oder zehnte ist.

In deinem Beitrag vn 22.05.2012, 13:13 schreibst du jedoch, dass die MsgBox immer nur dann angezeigt werden soll, wenn du ins Tabellenblatt etwas einträgst - genau das macht der von mir gepostete Code, d.h. du benötigst deinen Code nicht.

Bis später,
Karin
...