Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
CSV Import, springt auf falsches Tabellenblatt
20.05.2016 13:11:24
andthen
Hallo zusammen,
ich benutze ein Makro zum Import von CSV-Dateien.

Public Sub CommandButton1_Click()
Dim str_QuelleRufnummernanreicherung As String
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
'Blattschutz aufheben
Dim i As Integer
With ThisWorkbook
For i = 1 To .Sheets.Count
.Sheets(i).Unprotect Password:=""
Next i
End With
Dim filename As Variant
Dim Sep As String
ChDrive ("G:\")
str_QuelleRufnummernanreicherung = ThisWorkbook.Sheets("Anpassung Pfade").TextBox1.Value
On Error GoTo ErrorHandler
ChDir str_QuelleRufnummernanreicherung
GoTo NoError
ErrorHandler:
MsgBox "Es ist ein Fehler aufgetreten. Springe deshalb auf das Standard-verzeichnis"
ChDir "G:\Beispiel\Beispiel\"
Resume Next
NoError:
filename = Application.GetOpenFilename(FileFilter:="Text File (*.txt),*.txt")
If filename = False Then
Exit Sub
End If
Sep = ";"
If Sep = vbNullString Then
Exit Sub
End If
ThisWorkbook.Sheets("01_Import RufNr").Range("M4").Value = filename
Debug.Print "FileName: " & filename, "Separator: " & Sep
ImportTextFile FName:=CStr(filename), Sep:=CStr(Sep)
Call ThisWorkbook.Sheets("01_Import RufNr").Range("A1:I5000").Replace(Chr(34), "")
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Private Sub ImportTextFile(FName As String, Sep As String)
ThisWorkbook.Sheets("01_Import RufNr").Range("A1:I500").ClearContents
Dim RowNdx As Long
Dim ColNdx As Integer
Dim TempVal As Variant
Dim WholeLine As String
Dim pos As Integer
Dim NextPos As Integer
Dim SaveColNdx As Integer
Application.ScreenUpdating = False
SaveColNdx = Cells(1, 1).Column
RowNdx = Cells(1, 1).Row
Open FName For Input Access Read As #1
While Not EOF(1)
Line Input #1, WholeLine
If Right(WholeLine, 1)  Sep Then
WholeLine = WholeLine & Sep
End If
ColNdx = SaveColNdx
pos = 1
NextPos = InStr(pos, WholeLine, Sep)
While NextPos >= 1
TempVal = Mid(WholeLine, pos, NextPos - pos)
Cells(RowNdx, ColNdx).Value = TempVal
pos = NextPos + 1
ColNdx = ColNdx + 1
NextPos = InStr(pos, WholeLine, Sep)
Wend
RowNdx = RowNdx + 1
Wend
EndMacro:
On Error GoTo 0
Application.ScreenUpdating = True
Close #1
End Sub

Es sind bisher mehrere Fehler aufgetreten.
Ich importiere immer 2 CSV Dateien nacheinander damit.
Bei der 2. Datei kommt es immer zu Problemen.
Das Makro kopiert die Daten in das richtige Tabellenblatt und entfernt jetzt alle Anführungszeichen.
Es springt dann in das Tabellenblatt 29 00_Wertebereinigung , trägt dort in der Zelle M1 den Dateipfad ein.
Manchmal löscht er mir dann auch auf dem Tabellenblatt 29 00 Wertebereinigung den Bereich A bis I, oder trägt dort die Daten ein.
Das Makro war ursprünglich mit ActiveSheet geschrieben, welche ich durch direkte Adressierungen ersetzt habe. Dadurch konnte ich im Vorfeld schonmal einige Fehler beheben. Er scheint jetzt aber immer noch ein Problem mit der Zuordnung der Blätter zu geben, das durch die doppelte Ausführung ausgelöst wird.
Ich kann mir leider bisher nicht erklären an welcher Stelle das Makro auf das andere Tabellenblatt wechselt.
Ich hoffe ihr könnt mir weiterhelfen
Viele Grüße
Robert

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV Import, springt auf falsches Tabellenblatt
20.05.2016 13:18:07
Daniel
Hi
dein Code enthält auch CELLS ohne Tabellenblattangabe davor.
steht der Code in einem allgemeinen Modul, setzt Excel dann das "ActiveSheet" an dieser Stelle ein,
steht der Code in einem Tabellenblattmodul, wird dann das Tabellenblatt des Moduls verwendet.
Gruß Daniel

AW: CSV Import, springt auf falsches Tabellenblatt
20.05.2016 14:05:52
andthen
Hallo Daniel,
danke für die Rückmeldung.
Es ist leider nicht mein Code, deshalb finde ich mich wenig zurecht in dem Ganzen.
Ich habe deine Anmerkungen jetzt angepasst, das Problem tritt dennoch auf.
Private Sub ImportTextFile(FName As String, Sep As String)
ThisWorkbook.Sheets("01_Import RufNr").Range("A1:I500").ClearContents
Dim RowNdx As Long
Dim ColNdx As Integer
Dim TempVal As Variant
Dim WholeLine As String
Dim pos As Integer
Dim NextPos As Integer
Dim SaveColNdx As Integer
Application.ScreenUpdating = False
'On Error GoTo EndMacro:
SaveColNdx = ThisWorkbook.Sheets("01_Import RufNr").Cells(1, 1).Column
RowNdx = ThisWorkbook.Sheets("01_Import RufNr").Cells(1, 1).Row
Open FName For Input Access Read As #1
'Application.Dialogs(xlDialogOpen).Show "C:\Test\"
While Not EOF(1)
Line Input #1, WholeLine
If Right(WholeLine, 1)  Sep Then
WholeLine = WholeLine & Sep
End If
ColNdx = SaveColNdx
pos = 1
NextPos = InStr(pos, WholeLine, Sep)
While NextPos >= 1
TempVal = Mid(WholeLine, pos, NextPos - pos)
ThisWorkbook.Sheets("01_Import RufNr").Cells(RowNdx, ColNdx).Value = TempVal
pos = NextPos + 1
ColNdx = ColNdx + 1
NextPos = InStr(pos, WholeLine, Sep)
Wend
RowNdx = RowNdx + 1
Wend
EndMacro:
On Error GoTo 0
Application.ScreenUpdating = True
Close #1
' END 01_Import RufNrTextFile
End Sub
Ist das so korrekt?
Woran könnte es noch liegen?
Viele Grüße
Robert

Anzeige
AW: CSV Import, springt auf falsches Tabellenblatt
25.05.2016 15:34:08
Michael
Hi zusammen,
kann es sein, daß im Hintergrund noch ein event-gesteuertes Makro "lauert", das für den Sprung verantwortlich ist?
Im Übrigen verstehe ich die ganze Geschichte nicht. Die beiden Zeilen:
SaveColNdx = ThisWorkbook.Sheets("01_Import RufNr").Cells(1, 1).Column
RowNdx = ThisWorkbook.Sheets("01_Import RufNr").Cells(1, 1).Row
sind relativ sinnlos. xxx.cells(1,1).Column ist IMMER 1, .Row ebenso.
Das führt aber dazu, daß jeder Import bei A1 anfängt, d.h. der zweite Import überschreibt den ersten.
Anbei Datei mit Makro und CSVs zum Testen: https://www.herber.de/bbs/user/105794.zip
Schöne Grüße,
Michael
P.S.: wenn der "Sprung" weiterhin auftritt, lade uns mal Deine Datei hoch...
Anzeige

317 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige