big-bastian
Goto Top

XLS in CSV Problem mit VBS Fehler 13 (Typen unverträglich)

Hallo zusammen,

ich habe hier im Forum ein Super Skript zum Umwandeln von XLS in CSV gefunden welches auch super läuft. Doch jetzt habe ich den der XLS Datei eine Formel und bekomme beim umwandeln den Fehler 13 (Typen unverträglich). Wenn ich die Formel in F2 entferne läuft das Skript ohne Probleme. Kann mir jemand helfen?

1a5863557157338c1b8aa04c9f83ef44


Batch Datei für den Aufruf es VBS Skript:
@echo off & setlocal
for /f "delims=" %%i in ('cscript //nologo "C:\test\neu\xls2csv.vbs" "C:\test\neu\PERMANENTE.XLS"') do set Erg=%%i  
If "%Erg%"=="OK" goto :Weiter  
If "%Erg%" neq "" echo %Erg%  
::Fehlermeldung lesen lassen ...
pause
goto :eof
:Weiter
echo Hier geht es nach der Konvertierung weiter ... 


Hier VBS Skript:
'XLS2CSV.vbs  
Const TABELLE = "Tabelle1" 'Zu exportierende Daten in "Tabelle1" ...  
Const ABZEILE = 1          '... beginnen in Zeile 1 ...  
Const ABSPALTE = 1         '... und Spalte A ...  
Const ANZSPALTEN = 15       '... und umfassen 15 zusammenhängende Spalten.  

Const ZIELPFAD = "C:\test\neu\" 'Zielpfad mit abschließendem \ angeben  
Const TRENN = ";"          'Trennzeichen  

Dim oDatei
Set fso = CreateObject("Scripting.FileSystemObject")  
If WScript.Arguments.Count < 1 Then
	WScript.Echo "Angabe der Excel-Datei erforderlich!"  
	WScript.Quit(1)
End If

Set oArgs = WScript.Arguments
sXLDat = oArgs(0)
If Not fso.FileExists(sXLDat) Then
	WScript.Echo sXLDat & " nicht gefunden!"  
	WScript.Quit(1)
End If

sXLSDatei = fso.GetFile(sXLDat).Path 'Vollständigen Dateinamen mit Pfad ermitteln  
If LCase(Right(sXLSDatei, 4)) <> ".xls" Then  
	WScript.Echo "Angabe einer Excel-Datei (Typ .xls) erforderlich!"  
	WScript.Quit(1)
End If

sXLSPfad = Left(sXLSDatei, InStrRev(sXLSDatei, "\")) 'Pfad mit abschließendem "\"  
sXLSName = Mid(sXLSDatei, InStrRev(sXLSDatei, "\") + 1)  
sDateiName = Left(sXLSName, Len(sXLSName) - 4) 'ohne ".xls"  

DATEI = sXLSPfad & sDateiName & ".CSV" 'Zieldatei  
Set oDatei = fso.OpenTextFile(DATEI, 2, True) 'Datei immer neu erstellen  

On Error Resume Next
Set XL = WScript.CreateObject("Excel.Application")  
If Err.Number Then Fehler Err.Number, Err.Description
Set oWB = XL.Workbooks.Open(sXLSDatei)
If Err.Number Then Fehler Err.Number, Err.Description
   
iZeile = ABZEILE
With oWB.Worksheets(TABELLE)
	If Err.Number Then Fehler Err.Number, Err.Description
    Do While .Cells(iZeile, ABSPALTE).Value <> ""  
        sZeile = .Cells(iZeile, ABSPALTE).Value
        For i = 2 To ANZSPALTEN
            sZeile = sZeile & TRENN & .Cells(iZeile, ABSPALTE + i - 1).Value
        Next
        oDatei.WriteLine sZeile
		If Err.Number Then Fehler Err.Number, Err.Description
        iZeile = iZeile + 1
		If Zeile > 65536 Then Exit Do
    Loop
End With

oDatei.Close
oWB.Saved = True
XL.Application.Quit
WScript.Echo "OK"  

Sub Fehler(Fehlernummer, Fehlertext)
WScript.Echo "Fehler " & Fehlernummer & " (" & Fehlertext & ") aufgetreten!"  
oWB.Saved = True
XL.Application.Quit
WScript.Quit(Err.Number)
End Sub

Content-Key: 191088

Url: https://administrator.de/contentid/191088

Printed on: April 25, 2024 at 01:04 o'clock

Member: Biber
Biber Sep 12, 2012 updated at 14:18:32 (UTC)
Goto Top
Moin big-bastian,

ich denke, das Problem ist ein nicht ganz unverschuldetes Zusammentreffen ünglücklicher Umstände.

Die Funktion "Arbeitstag()" war bis inclusive Excel 2003 nur dann verfügbar,
wenn in der Excelmappe das AddIn "Analyse-Funktionen" (und ggf. auch noch "Analyse-Funktionen für VBA") eingebunden war.

Ab Excel 2007 ist diese Funktion ohne AddIn verfügbar.

Deine Excel-Datei mit der Endung .xls wird vermutlich als "Excel-Datei 97-2003" geöffnet - und das fehlt dieses AddIn dann.

Mögliche Abhilfe(n):
  • Die Ausgangsdatei mal nicht im Kompat-Modus, sondern als ".xlsx" speichern, falls du ein Excel 2007/2010 hast
  • im .xls-Format sicherstellen, dass die Addin-Verweise gesetzt sind
  • die Funktion "Arbeitstage" durch eine eigene Formel nachbilden, Vorlagen dafür z.B. auf excelformeln.de

So zumindest meine Vermutung - aber ich bin auch nicht der Excel/VBA-Spezialist.

Grüße
Biber