Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
also, es geht immer zuerst um die Zeile 8 oder den Eintrag beim ersten Auftreten von "Sachnummer Lieferant :" (gibt es 2x). Die Syntax ist in jedem Fall gleich, also nicht mal so und mal "Snr. Lieferant :" oder mal ohne Doppelpunkt ... ?
Die Termine werden abgegrenzt durch "---..." nach "Abruf Termin" und "---..." vor "Summe Bedarf", das gibt es auch nur 1x im Zwischenspeicher?
Korrekt?
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 06.03.2017
Version(en): 2007
Hallo,
also die Syntax is immer gleich. Also Sachnummer Lieferant.
Aber die eigentliche Nummer variiert. Bei einigen xxxx bei anderen xxxx/xx
Der Aufbau des Dokuments ist immer gleich, da diese Textdatei von einer Verwaltungssoftware erzeugt wird und nicht vom Kunden kommt.
Allerdings kann es vorkommen, das das erste Datum 2 mal vorkommt. Als Sofortbedarf und als Termin. Da sollte dann entweder die Mengen summieren oder den Sofortbedarf um eins zurrückdatieren, in diesen Fällen greife ich zur zeit noch manuell ein.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, hier mal ein weiterer Schritt. Wenn Du Deine Daten in der Zwischenablage hast, müsste Dir dieser Code die Lieferantennummer ausgeben. Code: Option Explicit Public Sub TextFromClipB() 'Variablendeklarationen 'Objekt, Variant, Long Dim oData As New DataObject, arrData, iCnt& 'Bei Fehler gehe zu Fehlerbehandlung 'z.B. Grafik statt text On Error GoTo errorhandler 'Daten aus der Zwischenablage holen oData.GetFromClipboard 'Daten anhand Zeilenvorschub in Array splitten arrData = Split(oData.GetText, vbLf) 'Schleife ueber alle Elemnte des Arrays For iCnt = 0 To UBound(arrData) 'Wenn der Kennstring enthalten ist, dann If InStr(1, arrData(iCnt), "¦Sachnummer Lieferant :") > 0 Then 'Lieferantennummer extrahieren und ausgeben MsgBox Replace(Replace(Replace(arrData(iCnt), "¦Sachnummer Lieferant :", ""), " ", ""), "|", "") 'Ende Wenn der Kennstring enthalten ist, dann End If 'Ende Schleife ueber alle Elemnte des Arrays Next errorhandler: End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 06.03.2017
Version(en): 2007
Danke. Werd ich morgen mal testen.
Registriert seit: 06.03.2017
Version(en): 2007
Hallo, leider kommt es bei der Ausführung zum Fehler.
Dim oData As New DataObject, arrData, iCnt& der Rote text ist im Editor markiert.
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo,
den Hinweis auf Online-Excel bezüglich der Objekt-Bibliothek hast Du schon beachtet?
Gruß Stefan Win 10 / Office 2016
Registriert seit: 06.03.2017
Version(en): 2007
Hallo,
ja, aber es geht ja darum, das Excel die Datei in der Zwischenablage richtig zuordnet und entsprechend abspeichert. Im Moment mache ich das ja mit einzelnen Macros die ich manuell auslöse.
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo, Code: Public Sub TextFromClipB() 'Variablendeklarationen 'Objekt, Variant, Long Dim oData As New DataObject, arrData, iCnt& 'Bei Fehler gehe zu Fehlerbehandlung 'z.B. Grafik statt text On Error GoTo errorhandler 'Daten aus der Zwischenablage holen oData.GetFromClipboard 'Daten anhand Zeilenvorschub in Array splitten arrData = Split(oData.GetText, vbLf) 'Schleife ueber alle Elemnte des Arrays For iCnt = 0 To UBound(arrData) 'Wenn der Kennstring enthalten ist, dann If InStr(1, arrData(iCnt), "Sachnummer Lieferant :") > 0 Then 'Lieferantennummer extrahieren und ausgeben ' MsgBox Replace(Replace(Replace(arrData(iCnt), "Sachnummer Lieferant :", ""), " ", ""), "|", "") Auto7518 Replace(Replace(Replace(arrData(iCnt), "Sachnummer Lieferant :", ""), " ", ""), "|", "") 'Ende Wenn der Kennstring enthalten ist, dann End If 'Ende Schleife ueber alle Elemnte des Arrays Next errorhandler: End Sub
Sub Auto7518(strTabellenblatt As String) ' ' Auto7518 Makro ' Static bolSchonGestartet As Boolean Dim vntAbfrage As Variant
If bolSchonGestartet Then vntAbfrage = MsgBox("Wollen Sie das Programm ein zweites Mal starten?", vbYesNo, "Abfrage") If vntAbfrage = vbNo Then Exit Sub With Worksheets(strTabellenblatt) .Visible = True .Range("A2:A233").ClearContents .Range("A2").PasteSpecial xlPasteAll If MsgBox("Anpassungen notwendig?", vbYesNo + vbQuestion) = vbYes Then Unload UserForm2 .Activate Range("A35").Select Exit Sub End If Sheets("Termineingabe").Activate .Visible = False End With bolSchonGestartet = True End Sub
Gruß Stefan Win 10 / Office 2016
Registriert seit: 06.03.2017
Version(en): 2007
20.06.2017, 11:54
(Dieser Beitrag wurde zuletzt bearbeitet: 20.06.2017, 11:54 von M.Wichmann.)
Hallo,
falls das wer gelesen hat, das habe ich verworfen mit der Funktion, geht ja ehh nicht ^^
Registriert seit: 06.03.2017
Version(en): 2007
20.06.2017, 12:13
(Dieser Beitrag wurde zuletzt bearbeitet: 20.06.2017, 13:12 von M.Wichmann.)
Hallo Stefan, danke für deinen Code. Aber der bricht auch mit Fehler ab. Aber ich denke ich habe eine Lösung gefunden. Ich speichere den Text in einer Temp-Tabelle. Dort lese ich die Artikelnummer aus und ändere Per WENN eine Zelle. Diese Zelle wird per Worksheet_Change überwacht und startet das entsprechende Makro um die Datei ins richtige Blatt zu kopieren. Erste Tests waren auch erfolgreich. Das mag zwar nicht gerade Profilike sein, aber das ist für mich als Anfänger gut umsetzbar. Zumal es ja auch zur Zeit gut 10 Möglichkeiten gibt. Es wäre aber schön, wenn mir noch einmal jemand zeigen könnte, wie ich am besten die Möglichkeiten in einem makro verbinden kann. momentaner Code um eine Zelle zu überwachen: Code: Private Sub Worksheet_Change(ByVal Target As Range) If Range("J1").Value > 0 Then Call Makro2 MsgBox "Makro 2 wurde gestartet" End If End Sub
Ich bin noch am Überlegen ob ich alles in dieser Zelle mache, also Teil1 =1, Teil2=2 usw Oder für jedes Teil eine extra Zelle auf 1. Hat sich erledigt, habe je Fall eine Zelle und die Kombination der einzelnen Fälle habe ich auch hinbekommen
|