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

Nummern per Makro in Liste einordnen

Nummern per Makro in Liste einordnen
14.07.2007 12:21:00
Matthias
Hi!
Vor einiger Zeit hab ich mit viel Hilfe aus diesem Forum ein Makro gebastelt, das Nummern aus einer Liste automatisch in bestimmte Zellen auf einem anderen Tabellenblatt einordnet. Hier der Archiv-Beitrag: https://www.herber.de/forum/archiv/804to808/t807118.htm#807118 . Es geht dabei um eine Liste von Zeichnungs- und Stücklistennummern, in die neue Nummern automatisch importiert werden sollen. Dabei stehen in den Spalten die Baugrößen einer Maschine "ESV", in den Zeilen stehen die Beschreibungstexte der Zeichnungen bzw. Stücklisten. Das Makro sucht die passende Baugröße und den passenden Beschreibungstext und ordnet die Zeichnungsnummmer (beginnt immer mit 200...) und die Stücklistennummer (beginnt immer mit 300...) in die richtigen Zellen ein. So weit klappt das prima, siehe https://www.herber.de/bbs/user/43574.xls .
Nun haben wir aber eine analoge Liste für eine andere Maschine "HR", wo auch dieses Makro zum Einsatz kommen soll.
Problem: Die Größenbezeichnung ist bei dieser Maschine anders, sie besteht aus zwei Zahlen mit einem Schrägstrich dazwischen, z.B. 26/32, also kein rein numerischer Wert mehr. Deswegen gibt es in diesem Teil des Codes ein Problem:
Spalte = WorksheetFunction.Match(CInt(Left(Sheets("import. Nummern").Cells(i, 4).Value, 3)), Sheets("Gesamtliste").Rows(3), 0)
d.h. Excel findet die passende Spalte nicht.
Hier die Datei für die Maschine "HR": https://www.herber.de/bbs/user/44075.xls
Leider weiß ich an dieser Stelle mangels VBA-Kenntnissen nicht weiter. Bin für jede Hilfe dankbar!!
Gruß Matthias

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nummern per Makro in Liste einordnen
14.07.2007 12:47:02
Peter
Hallo Matthias,
lösche im Makro das CInt - das heißt nämlich Convert to Integer, also als Ganzzahl - und das Klammernpaar : also in
Spalte = WorksheetFunction.Match(Left(Sheets("import. Nummern").Cells(i, 4).Value, 3), Sheets("Gesamtliste").Rows(3), 0)
und versuche es damit erneut.
Gruß Peter

AW: Nummern per Makro in Liste einordnen
14.07.2007 14:22:44
Matthias
Hi!
Hab es mal so geändert. Leider kommt immer noch eine Fehlermeldung, wenn ich das Makro ausführe: Laufzeitfehler '1004'. Die Match-Eigenschaft des WorksheetFunction-Objekts kann nicht zugeordnet werden.
Irgendwelche Ideen?
Matthias

AW: Nummern per Makro in Liste einordnen
14.07.2007 15:01:00
Daniel
Hi
die MATCH-Funktion sucht nach einer genauen genauen Übereinstimmung, die es in deinem Fall aber nicht gibt, da du den Suchbegriff auf 3 Zeichen reduzierst.
in diesem Fall must du den Suchbegriff um einen Platzhalter ergänzen: (normalerweise ein * für eine bliebige Zeichenfolge.

Spalte = WorksheetFunction.Match(Left(Sheets("import. Nummern").Cells(i, 4).Value, 3) & "*", Sheets("Gesamtliste").Rows(3), 0)


Gruß, Daniel

Anzeige
AW: Nummern per Makro in Liste einordnen
14.07.2007 16:29:47
Matthias
Hi!
Danke für den Tipp mit den 3 Zeichen, ich habe nun einfach die Suche auf 5 Zeichen erweitert, so dass jetzt z.B. Nummern der Baugröße 32/27 schon richtig zugeordnet werden!
Jetzt kommt aber Stufe 2 meines Problems (wollte nicht schon alles gleich am Anfang schreiben):
Es soll eine Unterscheidung statt finden, wie die Nummern einsortiert werden, und zwar abhängig von der Baugrößenbezeichnung. Dies soll wie folgt aussehen (4 Fälle):
(1) Baugröße lautet z.B. "32/27" - Die Nummern sollen nur in die Spalten mit genau dieser Baugröße eingetragen werden (was ja auch schon funktioniert).
(2) Baugröße lautet "32/-" - Steht ein Strich hinter dem Schrägstrich, sollen die betreffenden Nummern in alle Spalten eingeorndet werden, die mit "32/" beginnen (d.h. 32/27, 32/33 usw.)
(3) Baugröße lautet "-/27" - Steht ein Strich vor dem Schrägstrich, sollen die betreffenden Nummern in alle Spalten eingeordnet werden, die mit "/27" enden (d.h. 16/27, 20/27, 24/27 usw.)
(4) Baugröße ist leer bzw. fehlt - Die betreffenden Nummern sollen in alle Spalten eingeordnet werden, die im Bereich Tab_Baugröße liegen (Name ist in der Datei definiert).
Hier die Datei: https://www.herber.de/bbs/user/44080.xls
Wenn das jemand hinkriegen würde, wäre ich ein glücklicher Mensch :-)
Gruß Matthias

Anzeige
AW: Nummern per Makro in Liste einordnen
14.07.2007 17:22:56
Daniel
Hi
warum hast du den Fehler in der Beispieldatei nicht gleich korregiert?
wenn Punkt 1 Funktionsfähig ist, dann hätte man sich gleich vorstellen können, wie es aussieht.
Gruß, Daniel

AW: Nummern per Makro in Liste einordnen
14.07.2007 19:40:04
Matthias
Hi,
der Fehler ist korrigiert: Bei der Baugröße, die zu einer genauen Übereinstimmung führt (d.h. 32/27), werden die Nummern richtig zugeordnet. Nur in den anderen drei Fällen halt noch nicht, deswegen die Fehlermeldung beim Ausführen des Codes...
Matthias

AW: Nummern per Makro in Liste einordnen
14.07.2007 17:48:00
Daniel
Hi
also das ganze in dein Makro einbauen ist mir jetzt zu mühselig, aber hier ein Beispiel für eine Schleife, die die Zeile 3 durchsucht und entsprechend deinen vorgaben entscheidet, ob die Daten eingefügt werden müssen oder nicht.
das musst du dann in dein Makro irgendwie einbauen.
Gruß, Daniel

Sub test()
Dim SuchText() As String
Dim SpaltenText() As String
Dim Zelle As Range
SuchText = Split("16/-", "/")
For Each Zelle In Sheets("Gesamtliste").Range("C3:AX3")
SpaltenText = Split(Zelle.Value, "/")
If (SpaltenText(0) = SuchText(0) Or SuchText(0) = "-") And (SpaltenText(1) = SuchText(1) Or  _
SuchText(1) = "-") Then
MsgBox "Suchtext : " & SuchText(0) & "/" & SuchText(1) & Chr(10) & "Spaltentext: " &  _
Zelle.Value & Chr(10) & Chr(10) & "Werte einfügen in Spalte " & Zelle.Address
Else
MsgBox "Suchtext : " & SuchText(0) & "/" & SuchText(1) & Chr(10) & "Spaltentext: " &  _
Zelle.Value & Chr(10) & Chr(10) & "Werte nicht einfügen in Spalte " & Zelle.Address
End If
Next
End Sub


Anzeige
AW: Nummern per Makro in Liste einordnen
15.07.2007 09:12:00
fcs
Hallo Mathias,
ich hab den Code im Modul1 deiner Datei zum Eintragen der Dokument- und Seriennummer angepasst.
Wegen Problemen mit der Erkennung Groß-/Kleinschreibung (hr bzw. HR) in einigen Benennungstexten musste ich zwei weitere Zeilen anpassen.
In der angehängten Textdatei mit dem Code hab ich die geänderten Zeilen markiert.
https://www.herber.de/bbs/user/44085.txt
Gruß
Franz

AW: Nummern per Makro in Liste einordnen
15.07.2007 12:25:35
Matthias
Hallo Franz,
wow - ich bin sprachlos. Code ins Modul kopiert, ausgeführt, läuft! Hätte nicht gedacht, dass das so gut klappt. Besten Dank also erst mal.
Wie immer gibt's aber noch ne Kleinigkeit zu meckern: Fall Nr. 4 (Baugröße ist leer) funktioniert mit diesem Makro noch nicht. Wie oben geschrieben, sollen in diesem Fall die entsprechenden Nummern in alle Spalten eingeordnet werden, die im Bereich Tab_Baugröße liegen, d.h. also hier die Spalten C bis AX.
Hier mal die Datei mit angepassten Materialkurztexten im Blatt "import. Nummern": https://www.herber.de/bbs/user/44088.xls
Wenn das noch klappen würde, wäre es perfekt!
Gruß Matthias

Anzeige
AW: Nummern per Makro in Liste einordnen
15.07.2007 18:14:00
Matthias
Hi noch mal,
hab noch was vergessen: Aus Gründen der Sicherheit muss es gewährleistet sein, dass die Nummern nur dann in die Gesamtliste kopiert werden, wenn die Ziel-Zellen leer sind, d.h. es sollen keine Zellen überschrieben werden. Sobald also bei einer Nummer mindestens eine Ziel-Zelle nicht leer ist, sollte diese Nummer nicht in die Gesamtliste kopiert werden. Ich glaube Du hattest diesen Code heute Morgen rausgeschmissen, dieser Sicherheitsmechanismus sollte aber doch drinbleiben.
Grüße
Matthias

AW: Nummern per Makro in Liste einordnen
15.07.2007 18:56:00
fcs
Hallo Mathias,
in deiner Beispieldatei war keine Prüfung auf vorhandenen Einträge vorhanden. Ich hab eine Prüfung vor dem Eintragen eingefügt und in der Importliste gibt es einen entsprechenden Eintrag.
Bei leerer Baugröße werden die Dok- und Seriennummer jetzt bei allen Baugrößen eingetragen.
Dazu bitte den Code für Case 1 wie folgt anpassen.
Gruß
Franz

Case 1 ' in Gesamtliste einmal gefunden
'#### Neu Anfang 20070715
'Prüfen ob Einträge vorhanden
With wksGesamt
For Each Zelle In .Range("Tab_Baugröße")
If Not IsEmpty(.Cells(Reihe, Zelle.Column)) Then
wksNrn.Cells(i, 8) = "nein, Einträge schon vorhanden"
GoTo weiter01
End If
Next
End With
'Nummern eintragen
With wksNrn
Suchtext(0) = .Cells(i, 4) 'Baugröße aus Importliste
If InStr(1, Suchtext(0), "/") > 0 Then
Suchtext(1) = Left(.Cells(i, 4), InStr(1, .Cells(i, 4), "/") - 1) 'Linker Teil Baugröß _
e
Suchtext(2) = Mid(.Cells(i, 4), InStr(1, .Cells(i, 4), "/") + 1) 'Rechter Teil Baugröß _
e
End If
End With
With wksGesamt
ForEnde = False
For Each Zelle In .Range("Tab_Baugröße")
If (Zelle.Column - .Range("Tab_Baugröße").Column) Mod 2 = 0 Then 'nur jede 2. Spalte  _
prüfen
Eintragen = False
If Zelle.Value = Suchtext(0) Then
Eintragen = True
ForEnde = True 'Bei eaxakter Übereinstimmung der Baugröße Schleife beenden
ElseIf Suchtext(0) = "" Then
Eintragen = True
ElseIf Suchtext(1) = "-" _
And Suchtext(2) = Mid(Zelle.Value, InStr(1, Zelle.Value, "/") + 1) Then
Eintragen = True
ElseIf Suchtext(1) = Left(Zelle.Value, InStr(1, Zelle.Value, "/") - 1) _
And Suchtext(2) = "-" Then
Eintragen = True
End If
If Eintragen = True Then
.Cells(Reihe, Zelle.Column) = wksNrn.Cells(i, 1)
.Cells(Reihe, Zelle.Column + 1) = wksNrn.Cells(i, 2)
wksNrn.Cells(i, 8) = "ja"
End If
If ForEnde = True Then Exit For
End If
Next Zelle
End With
'#### Neu ende 20070715
Case Else


Anzeige
AW: Nummern per Makro in Liste einordnen
15.07.2007 20:39:00
Matthias
Hi Franz,
danke für den Code, diesmal meckert Excel allerdings, und zwar bei der Stelle "GoTo weiter01". Die Fehlermeldung ist "Sprungmarke nicht definiert". Was ist da los?
Gruß Matthias

AW: Nummern per Makro in Liste einordnen
15.07.2007 20:52:00
fcs
Hallo Mathias,
die Sprungmarke hatte ich in der Eile vergessen.
Hier der Rest vom Code
Gruß
Franz

'#### Neu ende 20070715
Case Else
wksNrn.Cells(i, 8) = "nein, kommt " & Merker & " mal vor"
End Select
weiter01:
Next i
End Sub


AW: Nummern per Makro in Liste einordnen
15.07.2007 21:58:19
Matthias
Hi,
vielen, vielen Dank! Das Makro funktioniert damit perfekt, meine Frage ist beantwortet!
Was man -abgesehen von der Funktion- noch einbauen könnte, wäre eine MsgBox, die nach dem Ausführen des Makros erscheint und die Ergebnisse zusammenfasst, z.B. so:
"x Materialien konnten erfolgreich in die Gesamtliste eingeordnet werden.
y Materialien konnten nicht eingeordnet werden und müssen nachgetragen werden."
Dies würde die Benutzerfreundlichkeit ein wenig steigern.
Wenn jemand noch Lust hat... :-)
Schönen Abend noch
Matthias

Anzeige
AW: Nummern per Makro in Liste einordnen
15.07.2007 23:49:02
fcs
Hallo Mathias,
hier dann auch noch die Importstatistik als Message-Box.
Den Text kannst dann ja noch zurechtstricken. Code am Ende des bisherigen Makros einbauen.
Gut's Nächtle aus dem Vorspessart
Franz

End Select
weiter01:
Next i
'Auswertemeldung erzeugen
Dim AnzJa As Integer, AnzNicht As Integer, AnzMehrfach As Integer, AnzVorhand As Integer
With wksNrn
For Zeile = 2 To lZ
If InStr(1, .Cells(Zeile, 8).Value, "ja") > 0 Then AnzJa = AnzJa + 1
If InStr(1, .Cells(Zeile, 8).Value, "nicht gefunden") > 0 Then AnzNicht = AnzNicht + 1
If InStr(1, .Cells(Zeile, 8).Value, "mal vorkommt") > 0 Then AnzMehrfach = AnzMehrfach + 1
If InStr(1, .Cells(Zeile, 8).Value, "schon vorhanden") > 0 Then AnzVorhand = AnzVorhand + 1
Next
End With
Inhalt = "Erfolgreich übertragene Nummern:  " & AnzJa & vbLf
Inhalt = Inhalt & "Nicht übertragen, da nicht gefunden:  " & AnzNicht & vbLf
Inhalt = Inhalt & "Nicht übertragen, da mehrfach vorkommend: " & AnzMehrfach & vbLf
Inhalt = Inhalt & "Nicht übertragen, da Einträge vorhanden: " & AnzVorhand & vbLf
MsgBox Prompt:=Inhalt, Buttons:=vbOKOnly, Title:="Statistik Nummernimport"
End Sub


Anzeige
AW: Nummern per Makro in Liste einordnen
22.07.2007 18:28:00
Matthias
Hi Franz,
sorry, meine Antwort hat etwas gedauert...Dein Code funktioniert aber einwandfrei, nun bekommt man eine Übersicht am Ende des Makros. Ich hab das Ganze in den letzten Tagen noch mal ein wenig getestet. Man muss dazu wissen, dass es fatal wäre, wenn in dieser Liste plötzlich Nummern an falscher Stelle stehen würden, deswegen muss ich alle Eventualitäten einkalkulieren.
Wenn der passende Text nicht gefunden wird, meldet das Makro "nein, da Text nicht gefunden" und die Nummern werden nicht eingeordnet - so weit so gut. Was aber, wenn die passende Baugröße (Zeile 3 Gesamtliste) nicht gefunden wird? Hier scheint mir noch eine Schwachstelle zu sein, wenn man "unsinnige" Baugrößen (z.B. "0815", "Test123") eingibt. Die Nummern sollten auch hier nur bei absoluter Übereinstimmung in die Gesamtliste eingeordnet werden. Vielleicht kannst Du Dir das bei Gelegenheit noch mal anschauen.
Schönen Abend und Gruß aus dem Münsterland
Matthias
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige