Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

VBA - Code

Betrifft: VBA - Code von: BuStue
Geschrieben am: 26.02.2013 14:30:51

Hallo Leute,
ich bin am verzweifeln. Folgender VBA Code (Import von mehr als 65536 Datensätzen) läuft unter Excel 2007 einwandfrei
unter 2003 läuft ein Fehler auf:

Sub CSVImportGroß()

On Error GoTo Ende

Dim Ergebnis As String, Dateiname As String, DateiNum As Integer, Zähler As Double
    
Dateiname = Application.GetOpenFilename("Textdateien (*.csv), *.csv")
    
Application.ScreenUpdating = False

If Dateiname = "" Then End
    DateiNum = FreeFile()
    
    Open Dateiname For Input As #DateiNum
    Workbooks.Add template:=xlWorksheet

    Zähler = 1

    Do While Seek(DateiNum) <= LOF(DateiNum)
        Application.StatusBar = "Importiere Zeile " & _
            Zähler & " von " & Dateiname
'           Zähler & " von " & FileName

    Line Input #DateiNum, Ergebnis
        If left(Ergebnis, 1) = "=" Then
        ActiveCell.Value = "'" & Ergebnis
            Else
            ActiveCell.Value = Ergebnis
        End If
        With ActiveCell
            .TextToColumns Destination:=.Range("A1"), DataType:=xlDelimited, _
                TextQualifier:=xlTextQualifierNone, _
                ConsecutiveDelimiter:=False, _
                Tab:=False, _
                Semicolon:=False, _
                Comma:=False, _
                Space:=False, _
                Other:=True, _
                FieldInfo:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2) _
, Array(6, 2), Array(7, 2), Array(8, 2), Array(9, 2), Array(10, 2), Array(11, 2), Array(12, 2), Array(13, 2)), _
                DecimalSeparator:=".", _
                ThousandsSeparator:=" "
               'Array (Spalte, 2 = Textformat)
        End With
        If ActiveCell.Row = 65536 Then
            ActiveWorkbook.Sheets.Add After:=Sheets(ActiveWorkbook.Sheets.Count)
                Else
                ActiveCell.Offset(1, 0).Select
    End If
    Zähler = Zähler + 1
    Loop
Close

For Zähler = 1 To ActiveWorkbook.Sheets.Count
    Sheets(Zähler).Select
    Worksheet.Range("A1").Select
Next Zähler

Sheets(1).Select



Application.ScreenUpdating = True
Application.StatusBar = False



Ende:
MsgBox _
"Es ist ein Fehler aufgetreten!" & Chr(13) & _
"Daten sind nicht zuverlässig!" & Chr(13) & _
"Bitte versuchen Sie es erneut.", vbCritical + vbOKOnly, "Fehler"
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

-----
Bei If left(Ergebnis, 1) kommt der Komplierungsfehler Falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft.

Was kann man hier machen, damit das Script auch unter Excel 2003 läuft.

MfG Burghard

  

Betrifft: So etwas sollte eigentl nur ... von: Luc:-?
Geschrieben am: 26.02.2013 14:42:17

…passieren, wenn Objekte/Eigenschaften/Anweisungen benutzt wurden, die es unter Xl11 noch nicht gibt, Burghard;
ansonsten ist mir das kleine left verdächtig (sehe gerade, hast du auch angegeben!). Das würde der VBE normalerweise auf Left ändern. Evtl sind in den xl11VBE-Verweisen irgendwelche DLLs als NICHT VORHANDEN gekennzeichnet → ggf hilft auch VBA.Left.
Gruß Luc :-?


  

Betrifft: AW: So etwas sollte eigentl nur ... von: BuStue
Geschrieben am: 26.02.2013 15:23:22

Hallo Luc:-?,
recht vielen Dank für Deine schnelle Antwort.
VBA.Left hat geholfen.
Mfg
Burghard

(PS.: das hätte ich nie herausgefunden)


  

Betrifft: Ja, das haben wir immer wieder mal! ;-) owT von: Luc:-?
Geschrieben am: 26.02.2013 15:31:40

:-?