Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Makro läuft nicht über Befehlsschaltfläche





Frage

Ich habe mir ein kleines Makro geschrieben, um eine .xls in eine .csv umzuwandeln. Wenn ich das Makro über den Befehl Extras-Makros-Ausführen laufen lasse funktioniert es einwandfrei. Über eine benutzerdefinierte Befehlsschaltfläche, dem das Makro zugewiesen ist klappt es nicht. Es wird zwar ohne Fehlermeldung ausgeführt, aber die CSV-Datei wird nicht richtig erstellt, d.h. die Daten werden nicht zeilenweise durch ; getrennt, sondern wie in einer xls spaltenweise. Wer kann mir weiterhelfen ? Ich arbeite mit Excel 2000. Der Programmcode lautet: Sub InCSV_konvertieren() ' ' InCSV_konvertieren Makro ' Makro am 29.11.2003 von KM1 aufgezeichnet ' ' ActiveWorkbook.Save Range("A1").Select Kill "C:\Auto2\import\impcarca\impcarst.csv" ActiveWorkbook.SaveAs Filename:="C:\Auto2\Import\Impcarca\impcarst.csv", _ FileFormat:=xlCSV, CreateBackup:=False ActiveWorkbook.Save Application.DisplayAlerts = False ActiveWorkbook.Close End Sub

Antwort 1 von _gau_

Hier eine Beispiellösung (Textdatei selbst "zusammenstricken")

Wie kann man Excel dazu zwingen, das Semikolon als Trennzeichen zu ...

[gau]

Antwort 2 von _gau_

Mir ist aufgefallen, daß bei obigem Makro jede Zeile durch ein Semikolon abgeschlossen wird. Etwas unschön. Deshalb etwas angepaßt:

Sub SaveCSV()
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim strTemp As String

Const Dateiname As String = "C:\Auto2\Import\Impcarca\impcarst.csv"
'Hier kann man ein beliebiges Trennzeichen eintragen
Const Trennzeichen As String = ";"

If Dir(Dateiname) <> "" Then Kill Dateiname

  Set Bereich = ActiveSheet.UsedRange

  Open Dateiname For Output As #1

  For Each Zeile In Bereich.Rows
    For Each Zelle In Zeile.Cells
      If InStr(1, Zelle.Text, ";") > 0 Then
        'Zellen, die ein Semikolon beinhalten in Anführungsstriche setzen
        strTemp = strTemp & """" & CStr(Zelle.Text) & """" & Trennzeichen
      Else
        strTemp = strTemp & CStr(Zelle.Text) & Trennzeichen
      End If
    Next
    'Zeile ohne das letzte Semikolon speichern
    Print #1, Mid(strTemp, 1, Len(strTemp) - 1)
    strTemp = ""
  Next

  Close #1
  Set Bereich = Nothing

End Sub

[gau]

Antwort 3 von nighty

hi alle

bei dem code einer schaltflaeche ist es besser nur den makroaufruf einzuschreiben.

Application.Run "Makro1"

gruss nighty

Antwort 4 von _gau_

Hmm...
> "Über eine benutzerdefinierte Befehlsschaltfläche, dem das Makro zugewiesen ist"
Es steht also nicht im Code irgendeiner Schaltfläche.
Er nehme an, es ist ein benutzdefiniertes Symbol in einer der Symbolleisten. Diesem Symbol wird das Makro über seinen Namen zugewiesen.

[gau]

Antwort 5 von Klaus1966

Hallo Gau,

Danke. Einfach nur perfekt.

Eine kleine Sache noch:

Ich möchte noch, dass am Ende des Makros die Arbeitsmappe und Excel geschlossen wird und eine Access Datenbank im Pfad C:\auto2\import\impcarca\impcarst.mdb geöffnet wird.

Wie kann man das sauber machen ?

Antwort 6 von _gau_

Zum Schluß ungefähr sowas dranhängen:


Dim ID As Double
Const Prog As String = "C:\Programme\Microsoft Office\Office\Msaccess.exe C:\auto2\import\impcarca\impcarst.mdb"

ID = Shell(Prog, vbMaximizedFocus)
Application.Quit

(die Deklaration der Variablen/Konstanten "ID" und "Prog" schreibt man natürlich normalerweise mit ganz an den Anfang)

[gau]

Antwort 7 von _gau_

Nachtrag:
Sollten Leerzeichen im Pfad zur Datenbank sein, dann müßte es so aussehen

Const Prog As String = "C:\Programme\Microsoft Office\Office\Msaccess.exe ""C:\Eigene Dateien\Datbank\Quiz2000.mdb"""

Verwirrend viel Anführungszeichen, oder? ;-)

[gau]

Antwort 8 von coros

Moin an alle,

auch wenn das Problem mit dem Erstellen einer CSV-Datei abgeschlossen ist, hier eine kurze Erklärung, woran das liegt und wie man das beseitigt. Das Problem liegt in Excel und zwar seit der Version 8.0 (Excel 97). In dem Makro ist zwar bei der Erstellung das Semikolon als Trennzeichen angegeben, leider wird beim Ausführen des Makros auf den US-Standard umgeschaltet. Das bedeutet, als Trennzeichen zwischen den Daten wird nur ein Koma akzeptiert und die Daten werden nicht Spaltengetrennt sondern in einer Spalte angezeigt. Abhilfe kann man durch einen Eintrag in der Registry unter

Schlüssel: HKCU\Software\Microsoft\Office\9.0\Excel\Options

Name: VBAAlwaysLoadUS

Typ: DWORD

schaffen. Man setzt den Wert in dem DWORD auf 0. Danach sollte als Trennzeichen, sowohl beim Abspeichern als auch beim Öffnen ein Semikolon akzeptiert werden und die Daten werden wieder in einzellnen Spalten ausgegeben.

Da ich dieses Problem vor gut einen Jahr ebenfalls hatte, habe ich intensiefst im Netz gesucht und bin dort auch fündig geworden, da ein Makro, welches das Trennzeichen tauscht usw. für mein bestehendes Makro nicht in Frage kam.

MfG,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 9 von _gau_

Das mit dem Reg-Eintrag "VBAAlwaysLoadUS" hatte ich auch schon probiert. Leider zeigte er bei meinem Excel2000 (unter NT4 und Win2000) keinerlei Wirkung beim Speichern über VBA.

Wäre ansonsten natürlich viel bequemer gewesen :-(

[gau]

Antwort 10 von _gau_

Jetzt hab ich auch wiedergefunden, wo ich das schonmal gelesen hatte:
http://support.microsoft.com/default.aspx?scid=kb;de;509480

Aber wie gesagt, bei mich hats nicht gehelft.

[gau]

Antwort 11 von Klaus1966

Vielen Dank noch mal an alle, besonders an gau.

Aufgabe perfekt gelöst !

Bin erst seit ein paar Tagen dabei und muss sagen, dass einem hier richtig kompetent geholfen wird.

Bis zum nächsten Problem

Klaus

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: