VB für Excel - Einlesen ASCII-Datei

  • #1
M

MasterQ

Bekanntes Mitglied
Themenersteller
Dabei seit
06.03.2006
Beiträge
139
Reaktionspunkte
0
Hallo,

da ich so gut wie keine Ahnung von VB in Excel und Konsorten habe, möchte ich hier mal nachfragen, ob einer eine Lösung für mein Problem hat oder zumindest mich in die richtige Richtung stupsen kann.

Ich habe immer wieder die Aufgabe in Excel bestimmte ASCII-Dateien einzuladen. Diese sind wie folgt aufgebaut:

1. Zeile Header
2. bis letzte Zeile zwei Spalten (X- und Y-Werte)

folgendes müsste das Script leisten:

*) FileDialogBox zur Auswahl der Datei(en)
*) Die Anzahl der Zeilen ist Variabel.
*) Der ursprüngliche Header (1. Zeile, ein Wort) müsste durch den Filenamen inkl. Pfad ersetzt werden.
*) Dezimalpunkt (Period) in Dezimalkomma umwandeln

Optional:

*) Auswahl, ob erste und zweite Spalte in einer Excel-Spalte landen soll oder nur die zweite (Y).
*) Gleichzeitiges Einlesen mehrerer Dateien in ein Sheet

Gibt es so was irgendwo?

Mir wäre mit einer rudimentären Struktur schon geholfen, die ich dann mit meinen spärlichen Kenntnissen erweitern kann. Nur bei Null anfangen kann ich nicht. Da kenn ich mich zu wenig aus.

Wäre froh, mir könnte hier einer helfen

Gruß

MQ
 
  • #2
Mit dem Makrorecorder sollte sich auch ohne Kenntnisse in kurzer Zeit ein halbwegs funktionierendes (wenn auch unsauberes) Makro zurecht frickeln lassen.

*) FileDialogBox zur Auswahl der Datei(en)
[\Quote]
Da hilft Dir der Makrorecorder allerdings nicht weiter.
Tipp:
DateiPfadUndName = Application.GetOpenFilename()

Für Import der Datei, Formatierung, etc kannst Du den Makrorecorder zu Hilfe nehmen. Damit bekommst Du einen Überblick über die von Dir benötigten Funktionen und Methoden, die Du dann aneinander reihen kannst.
Probier erstmal; falls Du nicht weiterkommst poste Deinen bisherigen->code'
 
  • #3
Hallo,

mit dem Makrorekorder kann man schon einiges erschlagen. Ich denke, dass ich mich so langsam voranhangeln kann.

*) Hat jemand einen Tipp für ein brauchbares Online-Tutorial für VB bzw VB-Script?
*) Ich hätte gerne einen eigenen Menüpunkt in der Leiste oben, von dem ich das Makro aufrufen kann. Mit dem Makrorecorder werden die Scripts dem aktuellen Worksheet zugeordnet. Wie krieg ich die da raus und in die Menüleiste?

Mir steht Visual Studio 2008 zur Verfügung. In wie weit könnte mir das weiterhelfen bzw. wie und wo gibt es da Überschneidungen zum VB-Editor, der mit Excel 2003 mitkommt?

Ich habe hier ein Script von einem Dritten, das ähnliches leistet wie das was ich vor habe. Leider wird ein anderes Format gelesen und das Script ist Passwortgeschützt. Es gibt ein kleines Setup.exe, was dieses Script in die Menüleiste katapuliert. Genau sowas hätte ich für mein Script gerne auch.


Gruß

MQ
 
  • #4
Ich hätte gerne einen eigenen Menüpunkt in der Leiste oben, von dem ich das Makro aufrufen kann. Mit dem Makrorecorder werden die Scripts dem aktuellen Worksheet zugeordnet. Wie krieg ich die da raus und in die Menüleiste?
Schau mal in Excel unter ->Extras->Anpassen->Befehle-Makros. Ich glaube da ist eine benutzerdef. Schaltfläche, der Du ein Makro zuweisen kannst. Wenn Du die Datei auf einem anderen Rechner öffnest, gibt es den Button nicht.

Wenn Du die Buttons gerne mit der Datei weitergebn möchtest hast Du hier 2 Links:



Wie krieg ich die da raus und in die Menüleiste?
Füge ein Modul in Dein Projekt ein. Da den Code rein.
 
  • #5
Ich bin nun soweit, dass ich eine vorliegende Datei korrekt einlesen kann.

Aufgrund des Befehls opentext wird eine neue Arbeitsmappe geöffnet, was ich eigentlich nicht will. Eigentlich möchte ich, dass die eingelesenen Daten in dem Sheet landen, in dem das Makro aufgerufen wird.

Meine Lösung bisher war, zu versuchen, die Daten in der neuen Datei herauszukopieren und die jetzt neu geöffnete Datei zu löschen.

Mir gelingt es allerdings nicht, die Daten in das Zielblatt zu kopieren. Die Spalte A der Quelle wird korrekt in die Zwischenablage kopiert. Das kann ich prüfen. Doch die Auswahl einer Spalte im Zielblatt scheitert mit Fehlermeldung 1004. Zur Not muss ich Zelle für Zelle kopieren, doch das ist zu umständlich. Ich verstehe im Moment nicht, warum ich mit select einen Fehler produziere.

Ich kann im Zielsheet nix selektieren!


Code:
Option Explicit

Sub Testmodul1()
'
' 090310 
'

Dim f As Variant
Dim fn() As Variant
Dim wb As Workbook
Dim ws As Worksheet
Dim wbZiel As Workbook
Dim wsZiel As Worksheet
Dim wcZiel As Range

Set wbZiel = ThisWorkbook
Set wsZiel = wbZiel.ActiveSheet

FormCasImport.Show

If FormCasImport.CheckMulti.Value = True Then
 fn = Application.GetOpenFilename(MultiSelect:=True)
Else
 f = Application.GetOpenFilename(MultiSelect:=False)
 ReDim fn(0)
 fn(0) = f
End If
 
For Each f In fn

Workbooks.OpenText f, _
          Origin:=xlWindows, _
          StartRow:=1, _
          DataType:=xlDelimited, _
          TextQualifier:=xlDoubleQuote, _
          ConsecutiveDelimiter:=False, _
          Tab:=True, _
          Semicolon:=False, _
          Comma:=False, _
          Space:=False, _
          Other:=False, _
          FieldInfo:=Array(Array(1, xlGeneralFormat), Array(2, xlGeneralFormat)), _
          DecimalSeparator:=., _
          ThousandsSeparator:= 
          
Next

Set wb = Workbooks(Workbooks.Count)
Set ws = wb.ActiveSheet
ws.Range(a1).Activate
ActiveCell.Value = 
ws.Range(B1).Activate
ActiveCell.Value = wb.FullName

ws.Columns(1).Select
ws.Columns(1).Copy
wsZiel.Columns(1).Select
ws.Paste

End Sub

Warum klappt das nicht?


MQ
 
Thema:

VB für Excel - Einlesen ASCII-Datei

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben