Discussion:
Textimport Assistent in Makro benutzen
(zu alt für eine Antwort)
el
2007-09-18 08:46:30 UTC
Permalink
Hallo zusammen,

ich importiere aus einem Textfile 3Spalten, die mit Tabstopp- getrennt
sind und als Zahlentrennzeichen ein "." haben, in eine Excel-Tabelle.
Mit Hilfe des Textimport Assistenten werden die notwendigen
Konvertierungen vollzogen.

Die Schritte, die ich mache sind Folgende:
1.) Kopieren der gewünschten Textauswahl mit "Strg+C" aus einem Editor
2.) In das Excelsheet mit "Str+V" diese Auswahl in eine ausgewählte
Spalte kopieren
3.) Textimport Assistenten aktivieren
3.1) Schritt1 des Textkonvertierungs-Assistenten: Getrennter Import
3.2) Schritt2 des Textkonvertierungs-Assistenten: Als Trennzeichen
Tabstopp auswählen
3.3) Schritt3 des Textkonvertierungs-Assistenten: Dezimaltrennzeichen
"."; 1000er-Trennzeichen " " ;Spalte 1 und 3 sollen übersprungen
werden und nur Spalte 2 soll importiert werden

Fertig.

Dies klappt sehr gut mit dem Textimport-Assistenten. Allerdings muss
ich das für sehr viele Fälle (weit mehr als 100)machen. Und es ist
noch nicht sicher, ob die zu importierenden Datensätze schon in
Ordnung sind. Deshalb möchte ich gerne in einem Makro Schritt2 und die
Einstellungen für den Textimport-Assistenten / Textkonvertierungs-
Assistenten speichern und mit einem Tastenaufruf diesen Kopier und
Konvertierungsvorgang automatisieren.

Leider werden die Einstellungen, die ich im Assistenten vornehme nicht
im Makro aufgezeichnet. Gibt es eine Möglichkeit dies doch zu machen?
Oder wie kann ich in VBA das gleiche erreichen?
Wie würdet Ihr das machen?


Freue mich auf Eure Vorschläge.

Mit freundlichen Grüßen,
El
stefan onken
2007-09-18 13:37:56 UTC
Permalink
Post by el
Hallo zusammen,
ich importiere aus einem Textfile 3Spalten, die mit Tabstopp- getrennt
sind und als Zahlentrennzeichen ein "." haben, in eine Excel-Tabelle.
Mit Hilfe des Textimport Assistenten werden die notwendigen
Konvertierungen vollzogen.
1.) Kopieren der gewünschten Textauswahl mit "Strg+C" aus einem Editor
2.) In das Excelsheet mit "Str+V" diese Auswahl in eine ausgewählte
Spalte kopieren
3.) Textimport Assistenten aktivieren
3.1) Schritt1 des Textkonvertierungs-Assistenten: Getrennter Import
3.2) Schritt2 des Textkonvertierungs-Assistenten: Als Trennzeichen
Tabstopp auswählen
3.3) Schritt3 des Textkonvertierungs-Assistenten: Dezimaltrennzeichen
"."; 1000er-Trennzeichen " " ;Spalte 1 und 3 sollen übersprungen
werden und nur Spalte 2 soll importiert werden
Fertig.
Dies klappt sehr gut mit dem Textimport-Assistenten. Allerdings muss
ich das für sehr viele Fälle (weit mehr als 100)machen. Und es ist
noch nicht sicher, ob die zu importierenden Datensätze schon in
Ordnung sind. Deshalb möchte ich gerne in einem Makro Schritt2 und die
Einstellungen für den Textimport-Assistenten / Textkonvertierungs-
Assistenten speichern und mit einem Tastenaufruf diesen Kopier und
Konvertierungsvorgang automatisieren.
Leider werden die Einstellungen, die ich im Assistenten vornehme nicht
im Makro aufgezeichnet. Gibt es eine Möglichkeit dies doch zu machen?
Oder wie kann ich in VBA das gleiche erreichen?
Wie würdet Ihr das machen?
Freue mich auf Eure Vorschläge.
Mit freundlichen Grüßen,
El
hallo El,
wie startest du denn den den Assistenten? Über Daten/Text in Spalten?
Was mich jedoch wundert, ist, dass das Makro deine Einstellungen nicht
aufzeichnet. Oder verstehst du das etwas falsch? Wenn du nach der
Aufzeichnung das Makro über Extras/Makro/Makros startest, wird der
Assistent wie aufgezeichnet ausgeführt, allerdings ohne ihn dabei
einzublenden. Im aufgezeichneten Code findest du dann Codewörter wie
DecimalSeparator:=".", ThousandsSeparator:= " ". Der Assistent selber
kann durch ein Makro nicht verändert werden.
Probier also mal, nach den kopieren deiner Daten dein Makro über
Extras/Makro/Makros zu starten.

Gruß
stefan
el
2007-09-18 14:13:44 UTC
Permalink
Hallo Stefan,

vielen Dank für Deine Antwort.
Post by stefan onken
wie startest du denn den den Assistenten?
Nachdem ich "Str+V" zum Einfügen der Daten aus der Zwischenablage
gedrückt habe und somit alle Spalten(auch die, die ich nicht benötige)
mit ihrer "falschen" Formatierung im Excelsheet sehe, klicke ich auf
den "Einfügen-Optionen"-Button, der unterhalb der eingefügten Elemente
erscheint und klicke auf "Text Import Assistenten verwenden". Dadurch
wird der Textkonvertierungs-Assistent geöffnet und ich vollziehe die
Punkte 3.1 bis 3.3.

Habe gerade nochmals ein Makro aufgezeichnet. Bekomme aber nur
folgendes in meinem Makro:

--------------------------------------------------------
Sub Makro1()
'
' Makro1 Makro
' Makro am 18.09.2007 von El aufgezeichnet
'

'
ActiveSheet.PasteSpecial Format:="Unicode-Text", Link:=False, _
DisplayAsIcon:=False
End Sub

--------------------------------------------------------

Da fehlen aber alle Einstellungen, die ich während der Aufzeichnung
vorgenommen habe. Habe wie von Dir vorgeschlagen das Makro so
ausgeführt. Aber es wird alles hineinkopiert, auch die Spalten, die
ich nicht möchte und dazu die falsche Formatierung.

Ist es eventuell möglich diesen Textimport-Assistenten anders zu
starten? Vielleicht nimmt er dann diese Einstellungen doch auf.

Wer das Problem mal nachspielen möchte, kann das mit dem folgenden
reduzierten Datensatz gerne einmal ausprobieren:
----------------------------------------------------------

pt_out_core 121512.000000
pt_out_mix 121346.000000
pt_out_byp 126627.000000

W_out_core 24.589700
W_out_mix 13.814700
W_out_byp 120.735000
Summe 159.140000
W_out 161.574000
Abweichung_W 1.506520 %
------------------------------------------------------

Bin schon auf Eure Anrregungen gespannt.

Grüße,
El
stefan onken
2007-09-18 15:08:08 UTC
Permalink
hallo El,
Post by el
Nachdem ich "Str+V" zum Einfügen der Daten aus der Zwischenablage
gedrückt habe und somit alle Spalten(auch die, die ich nicht benötige)
mit ihrer "falschen" Formatierung im Excelsheet sehe, klicke ich auf
den "Einfügen-Optionen"-Button, der unterhalb der eingefügten Elemente
erscheint und klicke auf "Text Import Assistenten verwenden". Dadurch
wird der Textkonvertierungs-Assistent geöffnet und ich vollziehe die
Punkte 3.1 bis 3.3.
aaah, da ist er! Danke fürs Augen öffnen ;)
Post by el
Da fehlen aber alle Einstellungen, die ich während der Aufzeichnung
vorgenommen habe. Habe wie von Dir vorgeschlagen das Makro so
ausgeführt. Aber es wird alles hineinkopiert, auch die Spalten, die
ich nicht möchte und dazu die falsche Formatierung.
ok, ist bei mir auch so.
Post by el
Ist es eventuell möglich diesen Textimport-Assistenten anders zu
starten? Vielleicht nimmt er dann diese Einstellungen doch auf.
ich sehe im Moment nur die Möglichkeit über Datei/öffnen, Textdatei
auswählen, dann kommt der Assistent ja automatisch. Änderungen dort
werden im Makro aufgezeichnet. In VBA wird das dann in
Workbooks.OpenText umgesetzt. Allerdings sind dann Strg+C und Strg+V
nicht mehr möglich, und die importierten Daten sind dann in einer
neuen Datei und müssten noch an die richtige Stelle kopiert werden
(per VBA aber auch möglich). Andererseits könnte man das Makro um
einen Dateiauswahldialog (GetOpenFilename) erweitern und so in einer
Schleife mehrere Dateien auf einmal einlesen.

Wenn du Strg+C und Strg+V jedoch behalten willst, müsste man die
eingefügten Daten der Spalte 2 in einer Schleife (zB mit For-Next)
Zelle für Zelle mit VBA-Funktionen wie Replace() überarbeiten, um
einen Punkt durch ein Komma zu ersetzen usw., und dann Spalte 1 und 3
löschen (Columns(x).Delete)


Gruß
stefan
Post by el
Wer das Problem mal nachspielen möchte, kann das mit dem folgenden
----------------------------------------------------------
pt_out_core 121512.000000
pt_out_mix 121346.000000
pt_out_byp 126627.000000
W_out_core 24.589700
W_out_mix 13.814700
W_out_byp 120.735000
Summe 159.140000
W_out 161.574000
Abweichung_W 1.506520 %
------------------------------------------------------
Bin schon auf Eure Anrregungen gespannt.
Grüße,
El
el
2007-09-19 08:52:36 UTC
Permalink
Hallo Stefan,

Deine Antwort hat mir sehr fürs Verständnis geholfen. Vielen Dank!
Trotzdem bin ich nicht wirklich weitergekommen:(
Post by stefan onken
Wenn du Strg+C und Strg+V jedoch behalten willst, müsste man die
eingefügten Daten der Spalte 2 in einer Schleife (zB mit For-Next)
Zelle für Zelle mit VBA-Funktionen wie Replace() überarbeiten, um
einen Punkt durch ein Komma zu ersetzen usw., und dann Spalte 1 und 3
löschen (Columns(x).Delete)
Ja, ich möchte/muss eigentlich schon "Strg+C" und "Strg+V"
beibehalten. Gibt es keine Möglichkeit dieses
"ActiveSheet.PasteSpecial" mit dem "Workbooks.OpenText" zu
kombinieren?

Alternativ wäre mir noch eine andere Vorgehensweise eingefallen. Bei
der ich allerdings auch nicht weiterkomme.

Aufbau beim Einfügen der kopierten Daten in mein Excelsheet:
1.) Die drei Spalten werden in einem Bereich eingetragen, den ich
nicht benötige.
2.) Spalte1 und 2 wird gelöscht
3.) Formatierung der Spalten muss auf Text stehen, damit mir Excel
nicht meine Zahlen zerlegt
4.) Ersetzen (Strg+H) der "." mit "," in der übrigen Spalte
5.) letzte Spalte wird nun in die eigentlich ausgewählte Zelle
kopiert.

voilà

Allerdings habe ich Probleme mit 3. und 5.. Excel überschreibt immer
die Formatierung und ich weiss nicht wie ich in VBA es programiere,
dass die Auswahl an die Stelle kopiert wird, an der ich es gerne
hätte.

Bis jetzt sieht es so aus:
---------------------------------------------------------------------
Sub uebersicht_einfuegen_final()
'
' uebersicht_einfuegen_final Makro
' Makro am 19.09.2007 von El aufgezeichnet
'
' Tastenkombination: Strg+w
'
Range("IT3").Select
ActiveSheet.Paste
Range("IT:IT,IV:IV").Select
Selection.ClearContents
Columns("IU:IU").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False,
_
ReplaceFormat:=False
Range("IU3:IU74").Select
Selection.Cut
ActiveCell.Offset(0, 0).Range("A1").Select
ActiveSheet.Paste
End Sub
-------------------------------------------------------------------------------------------------
das ist ja schon sehr gut. Allerdings wie bekomme ich nun die Daten in
die gewünschten Zelle. Kann man die ausgewählte Zellenposition
irgendwie zwischen speichern und dann nachdem das obere Makro
durchlaufen ist wieder laden?

Bin schon auf Eure Anregungen gespannt.

Gruß,
Elmar
stefan onken
2007-09-19 13:52:24 UTC
Permalink
hallo Elmar,
Post by el
1.) Die drei Spalten werden in einem Bereich eingetragen, den ich
nicht benötige.
2.) Spalte1 und 2 wird gelöscht
3.) Formatierung der Spalten muss auf Text stehen, damit mir Excel
nicht meine Zahlen zerlegt
4.) Ersetzen (Strg+H) der "." mit "," in der übrigen Spalte
5.) letzte Spalte wird nun in die eigentlich ausgewählte Zelle
kopiert.
voilà
Allerdings habe ich Probleme mit 3. und 5.. Excel überschreibt immer
die Formatierung und ich weiss nicht wie ich in VBA es programiere,
dass die Auswahl an die Stelle kopiert wird, an der ich es gerne
hätte.
---------------------------------------------------------------------
Sub uebersicht_einfuegen_final()
'
' uebersicht_einfuegen_final Makro
' Makro am 19.09.2007 von El aufgezeichnet
'
' Tastenkombination: Strg+w
'
Range("IT3").Select
ActiveSheet.Paste
Range("IT:IT,IV:IV").Select
Selection.ClearContents
Columns("IU:IU").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False,
_
ReplaceFormat:=False
Range("IU3:IU74").Select
Selection.Cut
ActiveCell.Offset(0, 0).Range("A1").Select
ActiveSheet.Paste
End Sub
---------------------------------------------------------------------------­----------------------
das ist ja schon sehr gut. Allerdings wie bekomme ich nun die Daten in
die gewünschten Zelle. Kann man die ausgewählte Zellenposition
irgendwie zwischen speichern und dann nachdem das obere Makro
durchlaufen ist wieder laden?
zum Zellenformat: probier mal statt Bearbeiten/Einfügen (VBA:
ActiveSheet.Paste) Bearbeiten/Inhalte einfügen/Text (VBA:
ActiveSheet.PasteSpecial Format:="Text")
Zellenposition merken ist prinzipiell möglich, indem man
Sheet_SelectionChange nutzt, aber nur für 1 Schritt. Klickt man
versehentlich eine falsche Zelle, funktioniert der Merker nicht mehr.
Codebsp http://tinyurl.com/2zh5yj Besser wäre mE, im Makro die Daten
in eine zuvor neu erstellte Tabelle einzufügen (Sheets.Add), dort zu
bearbeiten und dann auf die vorherige Tabelle zurückzuwechseln (indem
man die neu erstellte Tabelle wieder löscht). Dann kannst du die vor
dem Makro ausgewählte Zelle über ActiveCell ansprechen.

Gruß
stefan
el
2007-09-28 08:15:51 UTC
Permalink
Hallo und vielen Dank an alle, die mir geholfen haben. Hatte leider in
den letzten Tage keine Zeit mehr mich darum zu kümmern, da meine
Versuche leider Probleme machen und ich mich gerade darum kümmern
muss.

Nochmals vielen Dank!

Werde eure Ratschläge demnächst ausprobieren.

Gruß,
Elmar

Wolfgang Habernoll
2007-09-19 09:04:55 UTC
Permalink
Hallo el
Post by el
Nachdem ich "Str+V" zum Einfügen der Daten aus der Zwischenablage
gedrückt habe und somit alle Spalten(auch die, die ich nicht benötige)
mit ihrer "falschen" Formatierung im Excelsheet sehe, klicke ich auf
den "Einfügen-Optionen"-Button, der unterhalb der eingefügten Elemente
erscheint und klicke auf "Text Import Assistenten verwenden". Dadurch
hier *nicht* sondern die jetzt den Makrorecorder einschalten, dann die
eingefüge Spalte markieren, und in Daten->Text_in_Spalten den Assistenten
öffnen. Jetzt werden deine Schritte aufgezeichnet.
--
mfG
Wolfgang Habernoll

[ Win XP Home SP-2 , XL2002 ]
el
2007-09-19 10:50:10 UTC
Permalink
Hallo Wolfgang,

vielen Dank. Hattest Recht, dass man so die Eingaben aufzeichnen kann.
Allerdings kann man so nur eine Spalte bearbeiten. Dafür müsste ich
beim Einfügen meiner Daten das automatisierte Aufteilen unterbinden.
Damit die Daten nur in einer Spalte stehen. Dann könnte ich den
Assistenten wieder benutzen.

Aber wie verhindere ich das Aufteilen auf 3 Spalten?


Gruß,
Elmar
Loading...