Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1092to1096
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Konvertierung Zahlen bei Datei-Öffnen mit Makro

Konvertierung Zahlen bei Datei-Öffnen mit Makro
Patrick
Hallo zusammen,
mir liegt eine Excel-Datei vor, die mir SAP zur Verfügung stellt.
Öffne ich diese Datei normal, dann werden Zahlen ganz normal angezeigt. Öffne ich diese Datei aber mit diesem Makro:
Dim strFilename 'Dateiname
Dim wbkWorkbook As Workbook 'Arbeitsmappe
strFilename = Application.GetOpenFilename("XL Files (*.xls), *.xls")
If VarType(strFilename) = vbBoolean Then MsgBox "Abbrechen gedrückt": Exit Sub
Set wbkWorkbook = Workbooks.Open(strFilename)
dann werden Zahlen merkwürdig konvertiert. Möglicherweise liegt dies daran, dass das Makro das amerikanische Format voraussetzt, obwohl ich deutsche Formate in der Datei bekomme:
1.000 wird zu 1
400.000 wird zu 400
1.000,00 wir als Text interpretiert
1,00 wird als Text interpretiert
1 wird zu 1
Wie kann ich dem Excel-Makro sagen, dass die Datei deutsche Formate enthält? Es wäre sehr mühselig die Daten per Makro wieder zu korrigieren...
Danke!
Patrick
AW: Konvertierung Zahlen bei Datei-Öffnen mit Makro
06.08.2009 16:10:07
fcs
Hallo Patrick,
möglicherweise hilft die Umstellung von Dezimalstelle und Tausendertrennzeichen vor dem Öffnen.
Evtl. muss mann auch noch tiefer eingreifen und bei der Text-in-Spalten-Konversion eine entsprechende Formatumwandlung erzwingen. Diese ist per Makro allerdings etwas aufwendiger zu erzwingen, da es hierfür keine entsprechenden Optionsschalter gibt.
Gruß
Franz
Sub aatest()
Dim strFilename 'Dateiname
Dim wbkWorkbook As Workbook 'Arbeitsmappe
Application.DecimalSeparator = "."
Application.ThousandsSeparator = ","
strFilename = Application.GetOpenFilename("XL Files (*.xls), *.xls")
If VarType(strFilename) = vbBoolean Then MsgBox "Abbrechen gedrückt": Exit Sub
Set wbkWorkbook = Workbooks.Open(strFilename)
Application.DecimalSeparator = ","
Application.ThousandsSeparator = "."
End Sub

Anzeige
AW: Konvertierung Zahlen bei Datei-Öffnen mit Makro
06.08.2009 16:30:09
Patrick
Hmmm. Das wars leider noch nicht. Ich habe immer noch den gleichen Fehler... :-(
Danke dennoch!
AW: Konvertierung Zahlen bei Datei-Öffnen mit Makro
06.08.2009 16:45:26
Rudi
Hallo,
das ist lediglich eine .txt mit der Endung .xls.
Nimm die OpenText-Methode.
Gruß
Rudi
AW: Konvertierung Zahlen bei Datei-Öffnen mit Makro
06.08.2009 17:12:05
Patrick
Ha, das ist gut!!! Die Zahlen sind korrekt. Und es war wirklich eine txt im xls-Mantel!
Aber ich habe noch ein Problem:
Vorher hatte ich die Möglichkeit die Datei flexibel auszuwählen:
Dim strFilename 'Dateiname
Dim wbkWorkbook As Workbook 'Arbeitsmappe
strFilename = Application.GetOpenFilename("XL Files (*.xls), *.xls")
If VarType(strFilename) = vbBoolean Then MsgBox "Abbrechen gedrückt": Exit Sub
Set wbkWorkbook = Workbooks.Open(strFilename)
With wbkWorkbook 'Das ist die geöffnete Arbeitsmappe (Objekt wurde mit Set zugewiesen)
usw.
Die OpenText bekomme ich wieder nur mit statischer Datei hin!
'''''''''DIES muss wieder flexibel werden!
Workbooks.OpenText FileName:= _
"C:\Documents and Settings\mch1364a\Desktop\Statistik.xls", _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False _
, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), _
Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), 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), Array(74, 1), _
Array(75, 1), Array(76, 1), Array(77, 1), Array(78, 1), Array(79, 1), Array(80, 1))
'''''''''DIES muss wieder flexibel werden! Ende!
Anzeige
AW: Konvertierung Zahlen bei Datei-Öffnen mit Makro
06.08.2009 21:33:31
Uduuh
Hallo,
set wkb=... funktioniert mit der OpenText-Methode nicht. Du musst einen kleinen Umweg machen.
Workbooks.opentext strfilename, ....
set wkb=ActiveWorkbook
Gruß aus’m Pott
Udo

AW: Konvertierung Zahlen bei Datei-Öffnen mit Makro
06.08.2009 22:18:38
fcs
Hallo Patrick,
so sollte es funktionieren.
Die Feldinformation für das Spaltenformat kann man in einer 2-dimensionalen Arrayvariablen als Parameter übergeben. das ist etwas übersichtlicher als die aufgezeichnete Variante.
Gruß
Franz

Sub aatest()
Dim strFilename 'Dateiname
Dim wbkWorkbook As Workbook 'Arbeitsmappe
Dim arrFieldinfo(1 To 80, 1 To 2) As Long, lngSpalte As Long
strFilename = Application.GetOpenFilename("XL Files (*.xls), *.xls")
If VarType(strFilename) = vbBoolean Then MsgBox "Abbrechen gedrückt": Exit Sub
'Fieldinfo für Format der Spalten einrichten
For lngSpalte = 1 To 80
arrFieldinfo(lngSpalte, 1) = lngSpalte
Select Case lngSpalte
Case 991
arrFieldinfo(lngSpalte, 2) = 2 'Text
Case 992
arrFieldinfo(lngSpalte, 2) = 3 'Datum MTJ - Monat-Tag-Jahr
Case 993
arrFieldinfo(lngSpalte, 2) = 4 'Datum TMJ - Tag-Monat-Jahr
Case 994
arrFieldinfo(lngSpalte, 2) = 5 'Datum JMT - Jahr-Monat-Tag
Case 995
arrFieldinfo(lngSpalte, 2) = 9 'Spalte überspringen
Case Else
arrFieldinfo(lngSpalte, 2) = 1 'Standardformat
End Select
Next
'Textdatei öffnen
Workbooks.OpenText Filename:=strFilename, _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:=False, _
Space:=False, Other:=False, FieldInfo:=arrFieldinfo, DecimalSeparator:=",", _
ThousandsSeparator:="."
Set wbkWorkbook = ActiveWorkbook
With wbkWorkbook 'Das ist die geöffnete Text-Datei (Objekt wurde mit Set zugewiesen)
'usw.
.Worksheets(1).Columns.AutoFit
End With
End Sub

Anzeige
Danke!
07.08.2009 10:07:09
Patrick
Geil, genau das war´s! Danke an alle!!!
@fcs
07.08.2009 10:19:28
Rudi
Hallo Franz,
das verstehe ich nicht. Die Cases treten doch nie ein.
  For lngSpalte = 1 To 80
arrFieldinfo(lngSpalte, 1) = lngSpalte
Select Case lngSpalte
Case 991
arrFieldinfo(lngSpalte, 2) = 2 'Text
Case 992
arrFieldinfo(lngSpalte, 2) = 3 'Datum MTJ - Monat-Tag-Jahr
Case 993
arrFieldinfo(lngSpalte, 2) = 4 'Datum TMJ - Tag-Monat-Jahr
Case 994
arrFieldinfo(lngSpalte, 2) = 5 'Datum JMT - Jahr-Monat-Tag
Case 995
arrFieldinfo(lngSpalte, 2) = 9 'Spalte überspringen
Case Else
arrFieldinfo(lngSpalte, 2) = 1 'Standardformat
End Select
Next

Gruß
Rudi
Anzeige
AW: @fcs
10.08.2009 08:07:03
fcs
Hallo Rudi,
dies ist meine Standard-Routine zur Aufbereitung der Field-Info bei vielne Spalten. Wenn bestimmte Spalten der Text-Datei als Text oder Datum eingelesen werden sollen, dann müssen halt die Case-Anweisungen angepasst werden.
Da hier alle Spalten als Standard eingelesen werden sollen(Case Else) hätte man das Ganze natürlich auch etwas vereinfachen können. Dannach war mir aber nicht mehr.
Gruß
Franz

258 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige