Excel Problem beim Laden

Hallo @ all,

ich hebe gerade eine Frage per Mail bekommen. Leider habe ich im Moment keine Zeit, mich damit zu befassen und kenne mich ja mit Excel auch nicht so recht aus. Kann sich das mal Jemand ansehen?

Guten Abend Herr Fischer

ich möchte in excel ein makro integrieren, dieses makro soll eine csv 
datei in einer bereits existierenden arbeitsmappe als neues 
arbeitsblatt öffnen dies war auch kein problem
 mit diesem Quelltext

Private Sub CommandButton1\_Click()

 Dim wkb As Workbook
 Dim sFile As String
 Application.ScreenUpdating = False
 sFile = Range("B3").Value
 If Dir(sFile) = "" Then
 Beep
 MsgBox "Datei wurde nicht gefunden!"
 Exit Sub
 End If
 On Error GoTo ERRORHANDLER
 Application.EnableEvents = False
 Set wkb = Workbooks.Open(sFile, False)
 With ThisWorkbook
 Worksheets(1).Copy after:=.Worksheets(.Worksheets.Count)
 End With

ERRORHANDLER:
 Application.EnableEvents = True
 Application.ScreenUpdating = True


End Sub


dadurch das es eine csv datei ist hat excel diese zerfeuert und die 
werte nicht in verschiedenen spalten ausgeworfen.
Habe jetzt ein bisschen im internet geschaut und habe einen Quelltext 
gefunden der die csv Datei in verschiedenen spalten öffnet dieser :

Sub csv()
Dim i As Long
Dim z As String
Dim a As Variant
Dim n As Long
Open "c:\test.csv" For Input As #1
n = 0
While Not EOF(1)
 n = n + 1
 Line Input #1, z
 a = Split(z, ";")
 For i = 0 To UBound(a)
 Cells(n, i + 1).NumberFormat = "@"
 Cells(n, i + 1) = a(i)
 Next
Wend
Close #1
End Sub

Jetzt ´versuche ich schon seit mehreren stunden einen Quelltext aus 
den beiden zumachen aber dies gelingt mir nicht. Vielleicht können sie 
mir behilflich sein, Ich wäre ihnen sehr dankbar.

Mit Freundlichen Grüßen
Philipp Wanderer

Gruß, Rainer

Hallo Rainer, hallo Philipp,

das Problem in Deinem ursprünglichen Programm liegt einfach darin, daß Du Excel nicht sagst, wie es die CSV-Datei öffnen soll. Und solange Du das nicht tust, tut Excel sein Bestes - in diesem Fall das Falsche:

Excel soll die Daten der CSV-Datei NICHT in Spalten aufdröseln (ohne genau zu wissen, was Philipp unter „zerfeuert“ versteht): das erreicht man mittels „FORMAT:=5“ als weiteren Parameter. Dieses besagt, daß die Daten 1:1 übernommen werden sollen.

Weiterhin - denke ich - wäre es nicht schlecht, die CSV-Datei nach dem Programmende wieder zu schließen. Das macht man mit:

wkb.Close SaveChanges:=False

Hier also das komplette Programm:

Private Sub CommandButton1_Click()

Dim wkb As Workbook
Dim sFile As String
Application.ScreenUpdating = False
sFile = Range(„B3“).Value
If Dir(sFile) = „“ Then
Beep
MsgBox „Datei wurde nicht gefunden!“
Exit Sub
End If
On Error GoTo ERRORHANDLER
Application.EnableEvents = False
Set wkb = Workbooks.Open(sFile, False, Format:=5)
With ThisWorkbook
Worksheets(1).Copy After:=.Worksheets(.Worksheets.Count)
End With
wkb.Close SaveChanges:=False

ERRORHANDLER:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Viele Grüße
Martin

Hallo Martin,

herzlichen Dank für die Antwort!

Gruß, Rainer

OT Errorhandler
Hallo Rainer,
okay, hab noch ein bißchen Platz in der Tonne, platziere ich meine Lösung halt dort :smile:

Davon losgelöst, warum sehe ich „meine“ Art der Fehlerbehandlung nirgends. Ist sie nicht praktikabel, zu langsam, sonstwas?

Die Grundidee ist, vor jeder Codezeile in Variable „Mldg“ reinzuschreiben, „Problem mit Codezeile x“, und dies dann im Errorhandler anzuzeigen. Läuft der Code durch wird Mldg auf „“ gesetzt.

Ich habe es jetzt mal in den Code von Martin eingebaut.

Private Sub CommandButton1\_Click()
Dim wkb As Workbook, sFile As String, Mldg As String
Application.ScreenUpdating = False
sFile = Range("B3").Value
On Error GoTo ERRORHANDLER
Application.EnableEvents = False
Mldg = "Probleme mit der Dateiöffnung"
Set wkb = Workbooks.Open(sFile, False, Format:=5)
Mldg = "Probleme mit Thisworkbook"
With ThisWorkbook
 Mldg = "Probleme mit Blattkopierung"
 Worksheets(1).Copy After:=.Worksheets(.Worksheets.Count)
End With
Mldg = "Probleme beim Schließen der Datei"
wkb.Close SaveChanges:=False
Mldg = ""
ERRORHANDLER:
If Mldg "" Then
 Beep
 MsgBox Mldg
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Gruß
Reinhard

Hallo Reinhard,

okay, hab noch ein bißchen Platz in der Tonne, platziere ich
meine Lösung halt dort :smile:

Davon losgelöst, warum sehe ich „meine“ Art der
Fehlerbehandlung nirgends. Ist sie nicht praktikabel, zu
langsam, sonstwas?

Du hast vergessen, sie zu verraten?

Ich verstehe wieder nur ‚Bahnhof‘. :smile: Ich maile Phillip die Lösung, aber dann kann er selbst hier mitlesen. *fg*

Gruß, Rainer

Davon losgelöst, warum sehe ich „meine“ Art der
Fehlerbehandlung nirgends. Ist sie nicht praktikabel, zu
langsam, sonstwas?

Du hast vergessen, sie zu verraten?

Ich verstehe wieder nur ‚Bahnhof‘. :smile: Ich maile Phillip die
Lösung, aber dann kann er selbst hier mitlesen. *fg*

Hallo Rainer,
ach, ich hab da nur einen handschriftlichen Entwurf wie ich mir das vorstelle, müßte noch eingetippselt werden, dabei wird die Datei mit Open geöffnet und ausgewertet.
Da ich annehme daß der Code von Martin läuft braucht kein Mensch meinen Code.

Was mich weit mehr interessieren würde, deine Stellungmahme zu meiner Art der Fehlerbehandlung.

Also wie ich die Variable „Mldg“ einsetze. Warum sehe ich das nie in dieser Form woanders, muß doch Gründe haben.

Lieben Gruß
Reinhard

Hallo Reinhard,

Also wie ich die Variable „Mldg“ einsetze. Warum sehe ich das
nie in dieser Form woanders, muß doch Gründe haben.

vermutlich weil meist die Err.Description verwendet wird.

Gruß, Rainer