das anzupassen ist eigentlich kein Problem. Es muss lediglich ein optionaler Parameter hinzugefügt werden um die unterschiedlichen Strukturen zu verarbeiten. Auch wenn da schon eine Anpassung von Ws-53 per PQ dir vorgeschlagen wurde, hänge ich meine Änderung der Prozedur nebst Aufrufe mit ran.
Code:
Option Explicit
Sub BGW_LCL_LCR() Call Eintragen(pfadTxt:=ThisWorkbook.Path & "\12345678901_10BG10LCL10LCR - Kopie.txt", Blatt:=Foglio3, Zelle:="D15,D40,D65", Struktur:="BGW,LCL,LCR") End Sub
Sub Wash() Call Eintragen(pfadTxt:=ThisWorkbook.Path & "\10BGW.txt", Blatt:=Foglio3, Zelle:="D15") End Sub
Sub LCL() Call Eintragen(pfadTxt:=ThisWorkbook.Path & "\10LCL.txt", Blatt:=Foglio3, Zelle:="D40") End Sub
Sub Eintragen(ByVal pfadTxt As String, Blatt As Worksheet, Zelle As String, Optional Struktur As String) Dim arr, tmp, i&, j&, k&, Zellen arr = Filter(Split(CreateObject("scripting.filesystemobject").opentextfile(pfadTxt).readall, vbCrLf), "RLU") If Len(Struktur) = 0 Then ReDim arrList(1 To UBound(arr) + 1, 1 To 10) For i = LBound(arrList) To UBound(arrList) tmp = Split(Replace(arr(i - 1), " ", ""), vbTab) For j = LBound(arrList, 2) To UBound(arrList, 2) arrList(i, j) = CDbl(tmp(j)) Next j Next i Blatt.Range(Zelle).Resize(UBound(arrList, 1), UBound(arrList, 2)) = arrList Else Zellen = Split(Zelle, ",") ReDim arrList(1 To 10, 1 To 10) ReDim arrListR(1 To 10, 1 To 10) For i = LBound(arrList) To UBound(arrList) tmp = Split(Replace(arr(i - 1), " ", ""), vbTab) For j = LBound(arrList, 2) To UBound(arrList, 2) arrList(i, j) = CDbl(tmp(j)) Next j Next i Blatt.Range(Zellen(0)).Resize(UBound(arrList, 1), UBound(arrList, 2)) = arrList For i = LBound(arrList) To UBound(arrList) tmp = Split(Replace(arr(i + 9), " ", ""), vbTab) For j = LBound(tmp) + 1 To UBound(tmp) - 1 Step 2 k = k + 1 arrList(i, k) = CDbl(tmp(j)) arrListR(i, k) = CDbl(tmp(j + 1)) Next j k = 0 Next i Blatt.Range(Zellen(1)).Resize(UBound(arrList, 1), UBound(arrList, 2)) = arrList Blatt.Range(Zellen(2)).Resize(UBound(arrListR, 1), UBound(arrListR, 2)) = arrListR End If End Sub
Sub M_snb() c00="G:\" For j = 1 To 2 With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .SetText Join(Filter(Split(CreateObject("scripting.filesystemobject").opentextfile(c00 & Choose(j, "10BGW", "10LCL") & ".txt").readall, vbCrLf), "RLU"), vbCr) .PutInClipboard .GetFromClipboard Sheet1.Paste Cells(15 + 25 * (j - 1), 3) End With Next End Sub
das hatte ich auch schon bei den Anfangsvorgaben in #6 mit der Wahl Funktion für mich getestet, da der TO aber mit einzelnen Buttons arbeiten wollte wieder verworfen und die Prozedur verständlich parametrisiert.
Das eigentliche Problem dieser Vorgehensweise ist und bleibt die Nutzung des Clippboard Objektes. Es arbeitet nicht zuverlässig. Bei meinen vorhandenen Konfigurationen: O2019/Win10 PC und O2021/Win11 Laptop werden nur die Zeilenumbrüche ins Objekt geladen. Der Rest ist dann weg.
Bei deinem Rechner klappt es offenbar.
Wenn man diesen Weg gehen will bleibt nur dies via API als einzig zuverlässig funktionende Verarbeitung per Clippboard zu machen.
Wenn Textzahlen nicht stören wäre das so ein effizienter machbarer Weg.
Der letzte Stand des TO ist nun aber ein ganz anderer Aufbau der Textdatei, so dass hier der Vorteil der Parametrisierung der Prozedur für sich spricht und diese sich mit einer kleinen Erweiterung flexibel weiter nutzen lässt.
10.05.2025, 20:12 (Dieser Beitrag wurde zuletzt bearbeitet: 10.05.2025, 20:12 von snb.)
Das geht dann doch einfach so ?
Code:
Sub M_snb() For j = 1 To 2 sn = Filter(Split(CreateObject("scripting.filesystemobject").opentextfile("G:\" & Choose(j, "10BGW", "10LCL") & ".txt").readall, vbCrLf), "RLU") For jj = 0 To UBound(sn) Sheet1.Cells(15 + 25 * (j - 1) + jj, 3).Resize(, 11) = Split(sn(jj), vbTab) Next Next End Sub
- Text wird von Excel umgewandelt in Numbers. - welche andere 'Aufbau ' ?
Ich habe Deinen Beitrag mal gemeldet, Uwe. Die direkte Verlinkung funktioniert auch nicht, siehe [url= Dateiupload bitte im Forum! So geht es: Klick mich! ]
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)