Unterschied Application.FindFile <=> Öffnen-Dialog

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: Unterschied Application.FindFile <=> Öffnen-Dialog
von: MarcusK
Geschrieben am: 18.11.2003 17:25:03

Hallo zusammen,

ich benutze ein VBA-Makro, in dem mit Application.FindFile eine Datei (txt-Format mit TAB als Trennzeichen) geöffnet wird. Aus der geöffneten Datei werden Spalten kopiert und in das aktive Sheet eingefügt.
Problem: die Zahlenkonvertierung stimmt nicht. Steht im TXT-File z.B. 1600,123 dann wird dies als 1.600.123 im neuen Sheet (also das, das über den FindFile-Dialog neu geöffnet wurde) angezeigt. Das nachfolgende Copy'n'Paste trägt diese Werte dann natürlich auch falsch ins aktive Sheet ein.
Wenn ich die TXT-Datei dagegen ganz normal über den Datei Öffnen-Dialog öffne, stimmen die Werte!
Woran kann das liegen? Ich hab mit Formatierungen, festen Dez.stellen etc. rumprobiert, aber alles ohne Erfolg.
Anbei ein paar Werte (erste Spalte) und dahinter die Werte, wie sie dann (z.T. falsch) im Excel-Sheet stehen:

840 ==> 840
1600 ==> 1600
840,1 ==> 840,1
1600,1 ==> 1600,1
840,12 ==> 840,12
1600,12 ==> 1600,12
840,123 ==> 840.123 !!!Fehler!!!
1600,123 ==> 1.600.123 !!!Fehler!!!
0 ==> 0
2 ==> 2
0,1 ==> 0,1
2,1 ==> 2,1
0,01 ==> 0,01
2,01 ==> 2,01
0,001 ==> 0,001
2,001 ==> 2.001 !!!Fehler!!!

Alle Werte in der Spalte 'falsch', die Kommata haben, werden links ausgerichtet, die anderen rechts. Interessant ist der Unterschied zwischen 0,001 (wird richtig interpretiert) und 2,001 (wird zu 2.001); analog 840,123 (wird zu 840.123) und 1600,123 (wird zu 1.600.123).

Für Hilfe wäre ich dankbar, da ich das Makro dringend brauche. Habe hier im Forum und im Web leider auch nichts entsprechendes gefunden.

Gruß,
Marcus

Bild


Betrifft: Leidiges Excel 97 Problem ...
von: Volker Croll
Geschrieben am: 18.11.2003 18:23:36

Hallo Marcus,

es ist in der Urversion von Excel 97 so, das das Makro (bei Aufruf aus dem Programmtext) die US-Version benutzt, die das Komma als Dezimalkennzeichen nicht kennt. Dort ist das Komma das Tausenderkennzeichen und der Punkt das Dezimalkennzeichen.

Beim Handbetrieb wird die deutsche .dll benutzt, deshalb da kein Problem.

Folgende Loesungen sind moeglich:

Entweder Office/Excel-97-Service-Release-1 und -2 installieren; dauert allerdings etwas laenger.

Dazu Office-97-SR1 und -SR2 bei Microsoft downloden (sind aber recht gross) oder die Microsoft Jahr 2000 CD raussuchen, da ist's auch drauf.

Oder wenn man unabhaengig davon sein moechte, welche Excel 97 Version beim Anwender laeuft:

- Kommas durch Punkt ersetzen.

- Fuer die Spalten, in denen die "Text"-Zahlen stehen, Hilfsspalten einfuegen und dort jeden Wert mit 1 multiplizieren, z.B. Formel für B1: =A1*1 , dann mit B1 weiterrechnen (geht selbst bei mehreren tausend Zahlen recht schnell)

Gruss Volker


Bild


Betrifft: AW: Unterschied Application.FindFile <=> Öffnen-Dialog
von: Nepumuk
Geschrieben am: 18.11.2003 18:24:58

Hallo Marcus,
schon mal mit der GetOpenFilename-Methode versucht? Würde mich interessieren, Ob es da einen Unterschied gibt. Folgendes könntest du auch noch versuchen. Da musst du aber noch den Dateifilter auf txt - Dateien anpassen.

Option Explicit
Private Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long
Private Declare Function GetFileNameFromBrowseW Lib "shell32" Alias "#63" (ByVal hwndOwner As Long, ByVal lpstrFile As Long, ByVal nMaxFile As Long, ByVal lpstrInitialDir As Long, ByVal lpstrDefExt As Long, ByVal lpstrFilter As Long, ByVal lpstrTitle As Long) As Long
Private Declare Function GetFileNameFromBrowseA Lib "shell32" Alias "#63" (ByVal hwndOwner As Long, ByVal lpstrFile As String, ByVal nMaxFile As Long, ByVal lpstrInitialDir As String, ByVal lpstrDefExt As String, ByVal lpstrFilter As String, ByVal lpstrTitle As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Sub start()
    Dim sSave As String
    sSave = Space(255)
    If IsWinNT Then
        GetFileNameFromBrowseW FindWindow("xlmain", vbNullString), StrPtr(sSave), 255, StrPtr(CurDir), StrPtr("xls"), StrPtr("Excel files (*.xls)" + Chr$(0) + "*.xls" + Chr$(0) + "All files (*.*)" + Chr$(0) + "*.*" + Chr$(0)), StrPtr("Öffnen")
    Else
        GetFileNameFromBrowseA FindWindow("xlmain", vbNullString), sSave, 255, CurDir, "xls", "Excel files (*.xls)" + Chr$(0) + "*.xls" + Chr$(0) + "All files (*.*)" + Chr$(0) + "*.*" + Chr$(0), "Öffnen"
    End If
    sSave = Trim(sSave)
    sSave = Mid(sSave, 1, Len(sSave) - 1)
    MsgBox sSave
End Sub
Private Function IsWinNT() As Boolean
    Dim myOS As OSVERSIONINFO
    myOS.dwOSVersionInfoSize = Len(myOS)
    GetVersionEx myOS
    IsWinNT = (myOS.dwPlatformId = 2)
End Function


Code eingefügt mit: Excel Code Jeanie


Gruß
Nepumuk


Bild


Betrifft: AW: Unterschied Application.FindFile <=> Öffnen-Dialog
von: MarcusK
Geschrieben am: 18.11.2003 18:38:13

Hallo Volker und Nepumuk,

danke für die schnellen und ausführlichen Antworten. Ich werde das Ganze morgen testen - sofern nicht was anderes dazwischenkommt.
Über Erfolg oder Nichterfolg werde ich wieder posten.
Bis dann und nochmal danke.

Ciao,
Marcus


Bild


Betrifft: AW: Unterschied Application.FindFile <=> Öffnen-Dialog
von: MarcusK
Geschrieben am: 21.11.2003 10:04:21

Hallo zusammen,

hat eine Weile gedauert, bis ich die Vorschläge testen konnte.
Also:
1. SR2 war schon installiert. Das Problem besteht also trotz SR2
2. Kommas durch Punkte ersetzen bringt leider auch nicht die Lösung. "840,123" und "840.123" werden immer als "840.123" interpretiert.
3. Die Idee mit der "GetOpenFilename-Methode" hört sich gut an. Leider bin ich wie gesagt absoluter VBA-Novize. Daher komme ich da auch nicht weiter.

Ich werde jetzt weiter rumprobieren und die eingelesenen Werte bis zu einer Lösung von Hand korrigieren (stöhn).
Danke jedenfalls für Eure Hilfe.

Gruß,
Marcus



Bild

Beiträge aus den Excel-Beispielen zum Thema " Unterschied Application.FindFile <=> Öffnen-Dial"