Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Hilfe bei erweiterung Macro
#31
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)
Antworten Top
#32
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.
Antworten Top
#33
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)
Antworten Top
#34
Danke. Werd ich morgen mal testen.
Antworten Top
#35
Hallo, leider kommt es bei der Ausführung zum Fehler.


 Dim oData As New DataObject, arrData, iCnt&      der Rote text ist im Editor markiert.
Antworten Top
#36
Hallo,

den Hinweis auf Online-Excel bezüglich der Objekt-Bibliothek hast Du schon beachtet?
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#37
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.
Antworten Top
#38
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
Antworten Top
#39
Hallo, 

falls das wer gelesen hat, das habe ich verworfen mit der Funktion, geht ja ehh nicht ^^
Antworten Top
#40
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste