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 
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 
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‘.
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‘.
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