Excel VBA Fehlermeldung "Typen unverträglich" & relativer Pfad

Allan Sche Sar

Lt. Commander
Registriert
Jan. 2004
Beiträge
1.912
Ich habe wieder ein Problem mit der VBA in Excel - genauer sind es zwei.

Das Hauptproblem ist, dass beim Ausführen des MakroCodes für die Grenzwertüberschreitung der Fehler "Laufzeitfehler: '13': Typen unverträglich" erscheint.
Wenn ich die Import CSC so bearbeite, dass nur Daten vom 24.2 bis 28.2.2015 betrachtet werden, wird der Code korrekt ausgeführt.
Wisst ihr wo der Fehler liegt?

Das zweite Problem ist ein Problem der Verbesserung. Derzeit ist der Pfad absolut angegeben (nicht in der Datei im Anhang). Dieser soll aber relativ angegeben sein. Dies funktioniert, wenn die CSV Datei im gleichen Ordner liegt. Aber diese liegt eigentlich ein Ordner höher und dann im Unterorder CSV - siehe Anhang.
Aber mit dem in Netz gefunden Anleitungen funktioniet es nicht. Könnt ihr mir da weiter helfen?
 

Anhänge

ich schließe mich dir mal an.
genau den selben fehler habe ich bei einer exceltabelle auch.
Hier ist das Problem, dass sie mal für eine ältere Officeversion programmiert wurde und wir hier gerade auf office 2013 umgestellt haben. nun funktioniert das vba makro nicht mehr.

ich habe 0 ahnung von der programmierung. vielleicht hilft schon die einzelne zeile, die bei debuggen highlightet wird.

Code:
If Sheets("Schichtenmuster").Cells(iRowSch, iColSch) = 1 Then

weiter vorne werden die variablen deklariert als
Code:
Dim iColSch, iRowSch, iSch, iCount As Integer

sry fürs kapern deines threads. vielleicht kann uns beiden ja geholfen werden :)
 
thisworkbook.Path & "\.\CSV\" & "dateiname.endung"

Wäre es nicht einfacher gewesen mit Excel das ganze als OpenText (oder wie auch immer das hieß zumindest per Interop-Bibliotheken) das als Workbook einzulesen und dann Filter drüber zu jagen?
Wenn immer gleiche Intervalle vorliegen wäre es meiner Meinung nach einfach eine Pivot-Tabelle zu machen die dann Tageweise summiert,
da wäre eine Wenn-Formel in einer Hilfsspalte eine einfach Lösung (in der Art: Wenn Grenzwert überschritten dann 00:30:00 sonst 00:00:00)
Ich vermute der Fehler liegt bei CDBL() dort würde ich mal eine Fehlerbehandlung einbauen
Ergänzung ()

Wenn >
Sheets("Schichtenmuster").Cells(iRowSch, iColSch)
leere Zelle ist gibt es vermutlich einen Fehler, das kenne ich zumindest von
benamten Bereichen so, immer brav in der UsedRange bleiben X)
 
alxtraxxx - keine Frage, dass die Arbeit im VBA nicht notwendig ist, aber die Datei ist nicht von mir erstellt wurde. Ich soll nur versuchen den Fehler zu eliminieren - aber das klappt nicht so wie gehofft.

alxtraxxx schrieb:
thisworkbook.Path & "\.\CSV\" & "dateiname.endung"
Das funktioniert leider nicht. Mein fertiges Ergebnis sieht dann so aus:
Code:
Temperatures_PATH = ThisWorkbook.Path & "\.\CSV\" & "komakrass8.csv"
Und heraus kommt der String: "C:\Users\[Benutzername]\Desktop\Kühlzelle\Grenzwertüberschreitung 2014\.\CSV\komakrass8.csv"
Es müsste aber eigentlich lauten: "C:\Users\[Benutzername]\Desktop\Kühlzelle\CSV\komakrass8.csv"

Warum klappt das bei mir nicht?
 
Zuletzt bearbeitet:
Ich wundere mich nur…

Dim iColSch, iRowSch, iSch, iCount As Integer
Dass da ColSch, RowSch & Sch nicht als i wie Integer geDIMt werden ist bekannt?

Weiterhin
Temperatures_PATH = ThisWorkbook.Path & "\.\CSV\" & "komakrass8.csv"
Warum sollte bei einem String der «\.\CSV\» enthält bitteschön nicht »"C:\Users\[Benutzername]\Desktop\Kühlzelle\Grenzwertüberschreitung 2014\.\CSV\komakrass8.csv"« herauskommen?

Die Unverträglichen Typen könnte die oben als VARIANT geDIMten Variablen sein.

CN8
 
cumulonimbus8 schrieb:
Warum sollte bei einem String der «\.\CSV\» enthält bitteschön nicht »"C:\Users\[Benutzername]\Desktop\Kühlzelle\Grenzwertüberschreitung 2014\.\CSV\komakrass8.csv"« herauskommen?

Ich habe nur die Anleitung von alxtraxxx ausgeführt. Im Netz hatte ich immer gefunden das, wenn man ".." schreibt VBA erkennt, dass es ein Ordner nach oben gehen soll - fande es zwar komisch, wie VBA dies in einem String erkennt, aber okay. Versuchen kann man es ja mal, dachte ich mir. Aber es geht nicht.
Daher frage ich unter anderem, wie man es umsetzen kann.
 
So was Ulkiges wie relative Pfade mitten in Pfadstrukturen habe ich noch nie versucht… Könnte aber gehen.

Jedenfalls: .\ mit nur einem Punkt definiert «diesen» Ordner wo ich bin, erst ..\ definiert «eine Ebene aufwärts», ..\..\ wäre 2x hoch.
Workbooks.Open kann ich bei einer Konstruktion wie »"D:\Eigene Dateien\Excel\..\..\Aktion\007.xls"« nicht zur Mitarbeit bewegen (wenigstnes nicht in XL2010), an WIN+R verfüttert klappt das aber tatsächlich.

Ich vermute, du wirst wohl oder übel die Pfade per Stringschnitzelei herausarbeiten müssen.

CN8
 
C:\Users\[Benutzername]\Desktop\Kühlzelle\Grenzwertüberschreitung 2014\.\CSV\komakrass8.csv"
Es müsste aber eigentlich lauten: "C:\Users\[Benutzername]\Desktop\Kühlzelle\CSV\komakrass8.csv"
Wieso müsste das so lauten? Deine Angabe ist kein relativer Pfad, Du wolltest aber einen relativen Pfad :)
Probiers mal mit .. statt . , das sollte selbst wenn du den Pfad im Dateiexplorer eintippst funktionieren.
Bei mir funktioniert das sowohl mit Excel 2007 als auch mit 2010, habs auch mit Application.OpenText probiert, klappte
einwandfrei, sofern mach die Rechte auf dem anderen Ordner hat
 
Natürlich ist es am Ende ein absoluter Pfad, aber dieser soll relativ zum Pfad der Excel Datei bestimmt werden. Denn sofern sich der übergeordnete Ordner (Hier Kühlzelle) ändern, muss das VBA Code nicht verändert werden.

Bei mir klappt es nicht. Kannst du mir mal bitte den Code schicken, mit dem es bei dir geklappt hat?
 
Meine Antwort bleibe die selbe: den Pfad der Mappe ermitteln und tumb den 2. \ von rechts suchen um mit dem Rest des Pfades ab dort zu operieren. Ich mache das auch nur so weil ich aus eine Angabe die eine Art Name in einer Pfadstruktur ist dessen Mutterverzeichnis brauche.

CN8
 
Also wenn ich einen Button in Deine entpackte Grenzwertüberschreitungen C4_KZ8_Supermarkt.xls einbaue
der

Application.Workbooks.OpenText ThisWorkbook.Path & "\..\CSV\" & "test.csv"

ausführt und ich vorher im Ordner CSV die test.csv ablege funktioniert das bei mir tadelos.
Dein Ordner CSV ist zumindest in der ZIP leer, was dazu beitragen könnte, weshalb es nicht funktioniert.
Oder irgendwelche Excel-Sicherheitseinstellungen verhindern da was.
 
Der Ordner war deswegen leer, weil dies nur zur Veranschaulichung der Ordnerstruktur dienen sollte. Warum es bei mir nicht klappt ist aber komisch.

Könnt ihr mit noch bei den Fehlertyp 13 helfen?
 
Mea culpa. Das klappt tatsächlich. Wie angegeben mit CSV oder schnöde mit Workbooks.Open auch mit Mappen.
Irgendwas habe ich da falsch stehen gehabt, vermutlich habe ich mich im Pfad und mit den Namen verhaspelt.

Man lernt halt immer wieder was dazu :)

CN8
 
Hallo ihr,

ich habe mich noch mal den Fehlertyp 13 angenommen.
Der Fehler tritt bei dem Teilcode in Zeile 33 auf - also, sobald diese abgearbeitet werden soll.

Code:
If IsNumeric(arrsplit(5)) Then
        
        'Text in Zahl umwandeln
        arrsplit(5) = CDbl(arrsplit(5))
        
        
        If InStr(arrsplit(0), Split(januar, ",")(0)) Then
            arrsplit(0) = Line(1) & "." & Split(januar, ",")(1) & "." & Line(3)
        ElseIf InStr(arrsplit(0), Split(februar, ",")(0)) Then
            arrsplit(0) = Line(1) & "." & Split(februar, ",")(1) & "." & Line(3)
        ElseIf InStr(arrsplit(0), Split(maerz, ",")(0)) Then
            arrsplit(0) = Line(1) & "." & Split(maerz, ",")(1) & "." & Line(3)
        ElseIf InStr(arrsplit(0), Split(april, ",")(0)) Then
            arrsplit(0) = Line(1) & "." & Split(april, ",")(1) & "." & Line(3)
        ElseIf InStr(arrsplit(0), Split(mai, ",")(0)) Then
            arrsplit(0) = Line(1) & "." & Split(mai, ",")(1) & "." & Line(3)
        ElseIf InStr(arrsplit(0), Split(juni, ",")(0)) Then
            arrsplit(0) = Line(1) & "." & Split(juni, ",")(1) & "." & Line(3)
        ElseIf InStr(arrsplit(0), Split(juli, ",")(0)) Then
            arrsplit(0) = Line(1) & "." & Split(juli, ",")(1) & "." & Line(3)
        ElseIf InStr(arrsplit(0), Split(august, ",")(0)) Then
            arrsplit(0) = Line(1) & "." & Split(august, ",")(1) & "." & Line(3)
        ElseIf InStr(arrsplit(0), Split(september, ",")(0)) Then
            arrsplit(0) = Line(1) & "." & Split(september, ",")(1) & "." & Line(3)
        ElseIf InStr(arrsplit(0), Split(oktober, ",")(0)) Then
            arrsplit(0) = Line(1) & "." & Split(oktober, ",")(1) & "." & Line(3)
        ElseIf InStr(arrsplit(0), Split(november, ",")(0)) Then
            arrsplit(0) = Line(1) & "." & Split(november, ",")(1) & "." & Line(3)
        ElseIf InStr(arrsplit(0), Split(dezember, ",")(0)) Then
            arrsplit(0) = Line(1) & "." & Split(dezember, ",")(1) & "." & Line(3)
        End If
        
        arrCSVData(cordY, 0) = CDate(arrsplit(0)) ' 07.08.2013
        arrCSVData(cordY, 1) = arrsplit(3) ' Storage oder Defrosting
        arrCSVData(cordY, 2) = arrsplit(5) ' -21,0
        arrCSVData(cordY, 3) = Line(4)     ' 1:00
        
        cordY = cordY + 1
        
    End If
Ergänzung ()

Wisst ihr was den Fehler dort genau ausführt?
Ergänzung ()

Nachtrag zum Nachtrag. Der Fehler tritt nur im Monat März auf. Normalerweise läuft der Code bis zum Entsprechenden Monat (z.B.: 11 für März) und soll dan zu Zeile 33 springen und dort weiterarbeiten.
Das funktioniert auch bei allen Monaten außer März. Dieser scheint der Code nicht zuerkennen und bringt dann die Fehlermeldung, dass die Typen unverträglich sind, weil er eben keinen Monat finden konnte.

Aber warum erkennt er den März nicht? Könnt ihr mir das erklären?

P.S.: Entschuldigt den Doppelpost, aber ich konnte irgendwie den Beitrag vorher nicht mehr editieren.
 
Schnellschuss: ist was mit der Variable maerz faul; stolpert irgendwas Anderes über das ä im wirklichen Monatsnamen?

Ich habe mit den relativen Pfaden schon meine Bauchlandungen gehabt; selbst die Ausgabe es Befehlsinhalts (Debug.Print) liefert augenscheinlich saubere Angaben, nur war offenbar das Ziel nicht das was es sein sollte…

CN8
 
Es werden extra keine Umlaute in der CSV Datei verwendet, aber das bringt mich auf die Idee einmal Umlaute zu verwenden - auch wenn es komisch klingt.
Ergänzung ()

Okay den Fehler mit dem Monat März habe ich beseitigt. So sieht nun der korrekte Code aus:
Code:
Const januar = "Jan,01"
Const februar = "Feb,02"
Const maerz = "Mrz,03"
Const april = "Apr,04"
Const mai = "Mai,05"
Const juni = "Jun,06"
Const juli = "Jul,07"
Const august = "Aug,08"
Const september = "Sep,09"
Const oktober = "Okt,10"
Const november = "Nov,11"
Const dezember = "Dez,12"

Vorher stand
Code:
Const maerz = "Mar,03"

Dadurch wurde der Monat nicht erkannt >_<


@alxtraxxx wenn ich den Code so fügen
Code:
Application.Workbooks.OpenText ThisWorkbook.Path & "\..\CSV\" & "test.csv"
mal abgesehen von der Dateiname, bekomme ich nur Fehler. Hast du diesen Code so eingebaut? Ich habe auch im Netz den von dir geschrieben Code nicht so gefunden.
Aber mit den Hilfen aus dem Netz, habe ich deinen Code auch nicht zum laufen bekommen.
Kannst du mir daher einmal den Code genau schreiben?
 
Zuletzt bearbeitet:
Ich kann dir hier wiederum nur sagen, dass wenn genau da (eins hoch, weiter in CSV) die test.csv steht geht sie auf. Habe ich (wie gesagt) schmerzlich lernen müssen. Heißt da was anders als genau so gibts einen Unfall.
CN8
 
Du musst noch ein paar Parameter mehr angeben vermutlich,
siehe https://msdn.microsoft.com/de-de/library/office/ff837097.aspx

Immer Delimiter also Trennzeichen und Textqualifier angeben, gibt auch noch
die Möglichkeit bei CSV eine zusätzliche Datei im Verzeichnis abzulegen in der alle
Felder + Datentype deklariert werden, aber in der Regel reicht es die Parameter zu setzen

Welchen Fehler bekommst Du denn?
 
Mhh jetzt erscheint keine Fehlermeldung (anderer PC). Aber ich muss ja den Ausdruck noch einer variable zuweisen

Wenn ich das so versuche:
Code:
Temperatures_PATH = Application.Workbooks.OpenText ThisWorkbook.Path & "\..\CSV\" & "test.csv"
erhalte ich die Fehlermeldung: "Fehler beim Kompilieren: Syntaxfehler" Aber ich erkenne nicht, die korrekte Syntax für diese Zeile - also Zuweisung der Variable Temperatures_PATH mit dem Code.
 
Wenn Du den Pfad einer Variablen zuweisen willst musst Du Application.Workbooks.OpenText weglassen.
 
Zurück
Oben