VBA-Problem: Fehler beim Kompilieren - Nicht genügend Speicher

  • #1
K

klexy

Bekanntes Mitglied
Themenersteller
Dabei seit
04.05.2002
Beiträge
802
Reaktionspunkte
0
Ort
Bayern
Tja, und das kurz vor dem Wochenende:

Ich möchte eine TXT-Datei mit 73 Spalten nach Excel importieren. So sieht das Makro aus, das ich durch Aufzeichnen erstellt habe. Bei der Aufzeichnung hat der Import tadellos funktioniert:
Code:
  Dim Dateiname_txt As String
  Dateiname_txt = C:\blabla\Dateiname.txt
  
  Application.CutCopyMode = False
  ChDir C:\blabla
  If Dir(Dateiname_txt) <>  Then
  Workbooks.OpenText FileName:=Dateiname_txt _
    , Origin:=xlWindows, startRow:=1, DataType:=xlDelimited, TextQualifier _
    :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
    False, Comma:=False, Space:=False, Other:=True, OtherChar:=|, _
    FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array _
    (6, 1), Array(7, 2), Array(8, 1), Array(9, 2), Array(10, 1), Array(11, 2), Array(12, 2), _
    Array(13, 2), Array(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1), Array( _
    19, 1), Array(20, 1), Array(21, 1), Array(22, 1), Array(23, 1), Array(24, 1), Array(25, 1), _
    Array(26, 1), Array(27, 1), Array(28, 1), Array(29, 1), Array(30, 1), Array(31, 1), Array( _
    32, 1), Array(33, 1), Array(34, 1), Array(35, 1), Array(36, 1), Array(37, 1), Array(38, 1), _
    Array(39, 1), Array(40, 1), Array(41, 1), Array(42, 1), Array(43, 1), Array(44, 1), Array( _
    45, 1), Array(46, 1), Array(47, 1), Array(48, 1), Array(49, 1), Array(50, 1), Array(51, 1), _
    Array(52, 1), Array(53, 1), Array(54, 1), Array(55, 1), Array(56, 1), Array(57, 1), Array( _
    58, 1), Array(59, 1), Array(60, 1), Array(61, 1), Array(62, 1), Array(63, 1), Array(64, 1), _
    Array(65, 1), Array(66, 1), Array(67, 1), Array(68, 1), Array(69, 1), Array(70, 1), Array( _
    71, 1), Array(72, 1), Array(73, 1))
  End If
Wenn ich den gleichen Import über das Makro mach, bricht es mir mit der Fehlermeldung Fehler beim Kompilieren - Nicht genügend Speicher ab und markiert das Wort Array von der Spalte 58.

Was tun? Die TXT-Datei ist eine Abfrage, die ich nicht beeinflussen kann.
 
  • #2
Hallo klexy,

in FieldInfo verträgt Excel leider nur 51 Felder  :mad:

Aber das ist nicht so schlimm  :D

Für in der Matrix nicht angegebene Felder setzt Excel die Formatierung ->Standard'. Also kann man bei deinem Makro eine ganze Menge Angaben weglassen, da die letzte->nicht Standard'-Formatierung in Feld 13 ist.
Code:
Sub TXTImportExcel97()
  Dim Dateiname_txt As String
  Dateiname_txt = C:\ExcelWord_Main\Test_Excel\Test_Excel_TXTImport\Test73Spalten.txt
  
  If Dir(Dateiname_txt) <>  Then
  Workbooks.OpenText _
    FileName:=Dateiname_txt, _
    Origin:=xlWindows, _
    StartRow:=1, _
    DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, _
    Tab:=True, _
    Semicolon:=False, _
    Comma:=False, _
    Space:=False, _
    Other:=True, _
    OtherChar:=|, _
    FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array _
        (6, 1), Array(7, 2), Array(8, 1), Array(9, 2), Array(10, 1), Array(11, 2), Array(12, 2), _
        Array(13, 2))
   ->Felder werden ab 1 gezählt
   ->Die Felder 9,11,12,13 sollen als Text (also 2) importiert werden
   ->Für alle anderen Felder wird Standard als Formatierung benutzt (Voreinstellung)
  Else
    MsgBox Import-Datei nicht vorhanden. & vbLf & Dateiname_txt
  End If
End Sub
So klappt das auch bei Excel 97.

Laut Dokumentation ist nur die Angabe von Feldern notwendig, die vom Standard abweichen.  Das bekommt Excel97 aber nicht gebacken. Es kommt dann bei den Spalten mit der Formatierung durcheinander. Es formatiert damit die ersten 5 Spalten als Text, statt der angegebenen Spaltennummern. Kannst es ja mal unter 2003 ausprobieren.
Code:
Sub TXTImportLautDokumentation()
  Dim Dateiname_txt As String
  Dateiname_txt = C:\ExcelWord_Main\Test_Excel\Test_Excel_TXTImport\Test73Spalten.txt
  
  If Dir(Dateiname_txt) <>  Then
  Workbooks.OpenText _
    FileName:=Dateiname_txt, _
    Origin:=xlWindows, _
    StartRow:=1, _
    DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, _
    ConsecutiveDelimiter:=False, _
    Tab:=True, _
    Semicolon:=False, _
    Comma:=False, _
    Space:=False, _
    Other:=True, _
    OtherChar:=|, _
    FieldInfo:=Array(Array(7, 2), Array(9, 2), Array(11, 2), Array(12, 2), Array(13, 2))
   ->Felder werden ab 1 gezählt
   ->Die Felder 7,9,11,12,13 sollen als Text (also 2) importiert werden
   ->Für alle anderen Felder wird Standard als Formatierung benutzt (Voreinstellung)
  Else
    MsgBox Import-Datei nicht vorhanden. & vbLf & Dateiname_txt
  End If
End Sub

Gruß Matjes :)
 
  • #3
Danke Matjes,
das werd ich am Montag gleich mal probieren.
Wir haben nur Excel 97 und ich hoffe, das Ding damit schaukeln zu können.

Mir langt es schon, daß wir neulich wegen von anderern Programme auf Word 2000 umstellen mussten. Das Ding hat nur Nachteile gegenüber Word 97. Aber dazu werde ich vielleicht später mal ein Posting einstellen.
 
  • #4
Funktioniert einwandfrei, wenn man die Array-Definitionen nur bis Spalte 13 definiert.
Der Rest bleibt dann automatisch auf Standard.

Zum Glück sind die Daten, die als Text definiert werden müssen, nicht am Ende der Tabelle.
 
  • #5
Unter Excel 2003 funktionieren beide Versionen. Das entspricht dann auch der Dokumentation  ;)

Gruß Matjes :)
 
Thema:

VBA-Problem: Fehler beim Kompilieren - Nicht genügend Speicher

ANGEBOTE & SPONSOREN

Statistik des Forums

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