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.

Dateiimport über Dialog
#11
Top Uwe, danke.

Habe das verarbeiten können.

Neues Problem: Ich führe verschiedene txt-Files jeweils mit Daten in mehreren Spalten zusammen. Normalerweise haben alle Files die gleiche erste Spalte, dh. im Fall einer technischen Zeichnung wären das die Benennungen von Maßen. In der 2. bzw. 3. Spalte sind jeweils Werte vermerkt. In dem Gesamttabellenblatt, in welchem sie zusammengeführt werden, steht dann eben ganz links die Benennung und dann in den folgenden Spalten die verschiedenen Werte aus den Txt-Files.

Gibt es eine Möglichkeit, dass mir jedes mal, wenn eine neue Benennung dazu gekommen ist, in dem Gesamtblatt eine neue Zeile hinzugefügt und die Benennung eingefügt wird? Ich möchte dabei keine Änderung der bestehenden Sortierung haben sondern direkt an der Stelle eine Zeile mit der neuen Benennung einführen.

Bsp:
txt1:
BA;1;10;
CA;1;10;
DS;1;34;

BB;3
C;3

txt2:
BA;2;4;
CA;3;44;
FF;3;231;
DS;1;33;
GG;


BB;3
C;3

txt3:
BA;3;32;
CA;3;3;
GG;


BB;3
C;3

GESAMT:
BA;
CA;
FF;
DS;
GG;

BB;
C;


Ich kann nicht einfach danach gehen, welche txt die längste Spalte hat, sondern muss wirklich immer alle txts auf Vorhandensein der Spaltenwerte vergleichen.
Kann ich mir die Spaltenwerte der 1. Spalte aus allen txt Files sortieren , diese in das Gesamttabellenblatt einfügen lassen und dann über SVERWEIS wiederum zu den Einzeltabellenblättern verweisen?
Wäre klasse wenn mir jmd helfen kann.

Mein Code sieht bis jetzt so aus:
die
Code:
Sub Import_txt1()

With Sheets("txt1").QueryTables(1)
   .TextFilePromptOnRefresh = True
   On Error Resume Next
   .Refresh
   On Error GoTo 0
End With

Application.ScreenUpdating = False

Dim i As Long
Dim Start As String
Dim Ende As String
Dim Temp As String
Dim erlaubt As String
Start = Time
erlaubt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!§$%&/[]()=?*#ß\ÄÖÜ@,-_:.+;<>°'"""

Sheets("txt1").Select
Range("D1:E100").Select

   For Each C In Selection
       With C
           Temp = ""
           For i = 1 To Len(.Text)
               If InStr(1, erlaubt, Mid(.Text, i, 1), vbTextCompare) > 0 Then
                   Temp = Temp & Mid(.Text, i, 1)
               End If
           Next i
           .Value = Temp
       End With
       Next C
       
Sheets("Tablet drawing").Select

Application.ScreenUpdating = True
Ende = Time

End Sub

Gruß und danke,
Vince
Antworten Top
#12
Hi,

also ich weiß jetzt ungefähr, dass ich eine Datenzusammenführung brauche.

Ich bin zu schlecht, um zu programmieren, kann mir aber die Vorgehensweise folgendermaßen vorstellen:

Meine Ausgangsdaten: txt-Files, welche von der Struktur her gleich aufgebaut sind: Name, Abkürzung, Wert, Toleranz unten, Toleranz oben.
Nur ist es jetzt so, dass die txt-Files nicht immer die gleichen Parameter vorhanden sind. Dh. es kann vorkommen, dass z.B. ein txt ein Parameter mehr hat als alle anderen.
Die Reihenfolge sollte bei der Zusammenführung aber immer gewahrt bleiben. Es soll keine alphabetische Sortierung sein! Ich möchte eine Gesamtliste mit allen Parametern haben.

Jedes TxtFile wird per Button auf einem separatem Tabellenblatt importiert und angepasst.

Ganz links befindet sich ein Gesamttabellenblatt, welches alle Parameter enthält. Je nach dem ob ein Tabellenblatt ein Parameter beinhaltet, soll natürlich der Wert des jeweiligen Blatts in das Gesamtblatt mitgeführt werden.
Mit Formeln komme ich hier absolut nicht weiter, da ich nicht einfach das längste Tabellenblatt nehmen und annehmen kann, dass dort alle möglichen Parameter vorhanden sind.
Ergo kommt es eben vor, dass ein Parameter nur von einem Tabellenblatt geliefert wird und alle anderen Tabellenblätter damit keine Werte lieferun und somit leer bleiben.

Meine Vorgehensweise wäre:
1) Separate Einbindung der txt-Files über Buttons (Query tables)
2) Zusammenführung aller Parameter aus alles Tabellenblättern in Gesamtblatt zu PARAMETERSPALTE 
3) Löschen der doppelten Parameter
4) Neben Parameternamen sollen nun Abkürzung, Wert, Toleranz unten, Toleranz oben aus den Tabellenblättern mitgeführt werden.

Anbei meine Excel mit den txt-Import-Makros. wäre klasse wenn mir jemand bei diesem Thema helfen kann.

Gruß

Vince


Angehängte Dateien
.xlsm   Tablet_t4_to_t7.xlsm (Größe: 47,81 KB / Downloads: 2)
Antworten Top
#13
Der Import sowie Datenanpassung ist in der obigen Excel als Makro hinterlegt und auch absolut nicht das Problem.
Ich weiß auch wie die Vorgehensweise der Sortierung ist, nur kann ich es nicht umsetzen.

1) Ich kopiere mir aus dem ersten tabellenblatt die erste Spalte in ein neues Tabellenblatt 'EXTRA'.
2) Nun vergleiche ich diese mit der ersten Spalte des zweites Tabellenblatts, indem ich mir Zelle für Zelle nacheinander rausnehme und schaue, ob diese Zelle vorhanden ist. Ist sie vorhanden, passiert nichts. Die Zeilennummer in dem neuen Tabellenblatt soll jedoch gespeichert werden. Ist sie nicht vorhanden, soll sie nach der Zeile der letzten vorhandenen Zelle eingefügt werden. usw.
3) Vergleich mit der ersten Spalte des dritten, vierten, etc. Tabellenblatts.

Dies ist meines Wissens nach die einzige Möglichkeit, wie ich die bisherige Reihenfolge beibehalte und dabei alle Werte zusammenführe.

Kann mir jmd mit der Schleife zum Zellenvergleich und -einsortierung helfen?

Hier mal der Ansatz für das neue Makro zur Sortierung:

Code:
Sub SORT()
'
' SORT Makro
'
'SCHRITT1
'
   Sheets("teil4").Select
   Columns("A:A").Select
   Range("A4").Activate
   Selection.Copy
   Sheets("EXTRA").Select
   Columns("A:A").Select
   ActiveSheet.Paste

'SCHRITT2

'SCHRITT3
End Sub
Antworten Top
#14
Hi,

könnte mir jmd über den Code schauen und sagen, ob es in etwa stimmt?
Ist das so richtig mit dem Einfügen der neuen Zeile und kopieren des aktuellen Werts, nach welchem in der Liste gesucht wurde?

Ich habe noch Probleme bei der Speicherung der Zeile des zuletzt registrierten vorhandenen Parameters siehe
Code:
       zeile_vorhanden = ?



Code:
Sub SORT()
'
' SORT Makro
'

'
   Sheets("teil4").Select
   Columns("A:A").Select
   Range("A4").Activate
   Selection.Copy
   Sheets("EXTRA").Select
   Columns("A:A").Select
   ActiveSheet.Paste
   
Dim zeile As Long
Dim zeilemax_EXTRA As Long
Dim zeilemax_teil4 As Long
Dim zelle_vorhanden As Long


zeilemax_EXTRA = EXTRA.Cells(Rows.Count, 1).End(xlUp).Row   '[Ermitteln der Zeilenanzahl in EXTRA]
zeilemax_teil4 = teil4.Cells(Rows.Count, 1).End(xlUp).Row   '[Ermitteln der Zeilenanzahl in teil4]


For zeile = 1 To zeilemax_teil4
   
   wert_teil4 = teil4.Cells(zeile, 1).Value
   
   Set SuBe = Sheets("EXTRA").Range("A1:A107"). _
         Find(s, lookat:=xlWhole)
   
   If Not SuBe Is Nothing Then
       ' Parameter vorhanden.
       ' ZEILENNUMMER von EXTRA FÜR FOLGENDE ABFRAGEN DAUERHAFT MERKEN, BIS SIE GENUTZT WIRD
       zeile_vorhanden = ?
       
   Else
       ' Parameter nicht vorhanden: unter letzten vorhandenen Wert einfügen und einsetzen
       Rows(zeile_vorhanden).Insert Shift:=x1Down
       teil4.Cells(zeile, 1).Copy Destination:=EXTRA.Cells(zeile_vorhanden, 1)
       
   End If
Next zeile

End Sub

Grüße
Vince
Antworten Top
#15
hat niemand eine Idee?
Antworten Top
#16
Hallo Vince,

wenn Du Dir eine Variable über einen Makrolauf hinaus merken willst, musst Du sie entweder in einer globalen Variable speichern oder an anderer geeigneter Stelle, z.B. auf einem Blatt. Dim zelle_vorhanden As Long müsste also aus dem Makro raus und an den Anfang des Moduls, z.B. als Dim ..., dann gilt das auf Modulebene, oder als Public zelle_vorhanden As Long für das Projekt.

Über diese Zeile und die nächste kommst Du drüber?
zeilemax_EXTRA = EXTRA.Cells(...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top


Gehe zu:


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