blu3scr33n
Goto Top

VBA Code bricht bei Befehl Speichern unter ab

Hallo liebe Administratoren,

ich habe eine Excel. Diese soll per VBA in eine CSV exportiert werden und an einen bestimmten Ort X abgelegt werden. Für den Export habe ich mir hier CSV-Export Skript ein entsprechendes Makro besorgt.
Das Makro funktioniert, wenn ich nur den Export vornehmen möchte. Füge ich allerdings den "Speichern unter" Befehl hinzu, so bricht er ab in Zeile 32.
Im Code steht "SPEICHERORT" stellvertretend für den Speicherpfad. Diesen habe ich für dieses Forum allerdings anonymisiert face-wink

Sub ExportCSV()
 
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim strTemp As String
Dim strDateiname As String
Dim strTrennzeichen As String
Dim strMappenpfad As String
Dim blnAnfuehrungszeichen As Boolean
Dim Speicherpfad As String
Dim Speichername As String

 
strMappenpfad = ActiveWorkbook.FullName

Speicherpfad = "SPEICHERORT"  
 
strDateiname = InputBox("Bitte den Namen der CSV-Datei angeben.", "CSV-Export")  
If strDateiname = "" Then Exit Sub  
 
strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ";")  
If strTrennzeichen = "" Then Exit Sub  
 
Set Bereich = ActiveSheet.UsedRange

Speichername = Speicherpfad & strDateiname
 
ActiveWorkbook.SaveAs Filename:=Speichername

ChDrive "T"  
ChDir "SPEICHERORT"  

Open strDateiname For Output As #1
 
For Each Zeile In Bereich.Rows
    For Each Zelle In Zeile.Cells
        If blnAnfuehrungszeichen = True Then
            strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen  
        Else
            strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
        End If
    Next
    If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
    Print #1, strTemp
    strTemp = ""  
Next
 
  Close #1

  Set Bereich = Nothing
  MsgBox "Export erfolgreich. Datei wurde exportiert nach" & vbCrLf & strDateiname  
 
End Sub

Kann mir jemand mit dem Code helfen? Ich habe keine Ahnung, warum er abbricht.

Beste Grüße

Blu3Scr33n

Content-ID: 220330

Url: https://administrator.de/contentid/220330

Ausgedruckt am: 22.11.2024 um 15:11 Uhr

106543
106543 24.10.2013 um 14:24:28 Uhr
Goto Top
Hi,

mit welchem Laufzeitfehler bricht der Code denn ab ?

Grüße
Exze
derinderinderin
derinderinderin 24.10.2013 um 14:27:44 Uhr
Goto Top
Zeile 15 sowie Zeile 30 kommen mir seltsam vor.

"SPEICHERORT" ist kein Pfad... bzw. du hinterlegst im Quellcode keinen.
Der Variable Speicherpfad weist du den Wert "SPEICHERORT" zu.

Meines erachtens musst du in Zeile 15:

Speicherpfad = "SPEICHERORT" einen gültigen Pfad eintragen z.B.
Speicherpfad = "C:\Temp"

und dann in Zeile 30

statt
ChDir "SPEICHERORT"
dann
ChDir Speicherpfad

Frag mich nur warum er dann bei 32 stehenbleibt, nicht schon bei 30.

einfügen.
Blu3Scr33n
Blu3Scr33n 24.10.2013 um 14:32:18 Uhr
Goto Top
Hallo Exze

Laufzeit '70':
Zugriff verweigert

Gruß Blu3Scr33n
Blu3Scr33n
Blu3Scr33n 24.10.2013 um 14:33:48 Uhr
Goto Top
Hallo derInderInderin,

das hätte ich vielleicht erwähnen sollen. Wo in meinem Code "SPEICHERORT" steht, steht auch ein tatsächlicher Speicherpfad. Den habe ich jetzt nur auf Grund der Anonymisierung "SPEICHERORT" genannt.

Gruß

Blu3Scr33n
106543
106543 24.10.2013 um 14:40:21 Uhr
Goto Top
Hi,

"Zugriff verweigert" ...
da gibt´s 2 plausible Erklärungen.
1. die Datei ist bereits geöffnet und kann nicht nochmal geöffnet werden, wegen Schreibschutz
2. der User, der das Tool ausführt hat keine Berechtigung, die Datei zu öffnen (unwahrscheinlich, ich weiß ...)

Grüße
Exze
derinderinderin
derinderinderin 24.10.2013 um 14:41:15 Uhr
Goto Top
Aah ich verstehe face-wink

Ich hab das Ding mal mal mir laufen lassen. Mit Lokalem Laufwerk klappt es.
Hast du dir nochmal die Berechtigungen auf dem Ziellaufwerk angeguckt?
Klappts bei dir auch mit C:\Temp oder ählnlichen?
Blu3Scr33n
Blu3Scr33n 24.10.2013 um 14:43:53 Uhr
Goto Top
Ich laufe hier auf nem Thin Client. In diesem Zusammenhang gibt es für mich kein Laufwerk C: face-wink
Das Laufwerk, wo die CSV gespeichert werden soll ist ein Netzlaufwerk. Für die entsprechenden Pfade habe ich allerdings Zugriffsrechte.
Blu3Scr33n
Blu3Scr33n 24.10.2013 um 14:45:47 Uhr
Goto Top
Hallo Exze,

1. Die Datei kann noch garnicht geöffnet sein, da er ja aus der XLSM (Excel mit Makro) eine CSV exportieren soll. Diese wird somit erst erstellt.
2. Wie du schon selber sagst, eher unwahrscheinlich. Ich bin Ersteller der Datei und habe auch auf den Dateipfad, wo die Excel liegt Zugriffsrechte.

Gruß

Blu3Scr33n
106543
106543 24.10.2013 um 14:48:55 Uhr
Goto Top
Hi,

du schreibst ja
ActiveWorkbook.SaveAs Filename:=Speichername
das speichert zwar die Excel-Session, beendet diese aber nicht.
Ich denke laut deinem Code du willst dann glaube ich ín die selbe Excel-Datei schreiben, was natürlich so nicht möglich ist, da sie noch geöffnet ist.
Falls ich falsch liege sag Bescheid, ich blick bei deinem Code noch nicht ganz durch.

Grüße
Exze
Blu3Scr33n
Blu3Scr33n 24.10.2013 um 14:56:21 Uhr
Goto Top
Hallo Exze,

die Excel kann danach gerne geschlossen werden. Hauptsache, die CSV wird korrekt und an den korrekten Ort exportiert.
Welchen Befehl müsste ich denn dafür noch einfügen müssen?

Ich entschuldige mich für das eventuelle Code-Wirrwarr. Meine VBA-Kenntnisse sind eher rudimentär.

Grüße

Blu3Scr33n
106543
106543 24.10.2013 um 15:00:01 Uhr
Goto Top
Hi,

um komplett Excel zu schließen, bräuchtest du
Application.Quit
ACHTUNG! Das schließt _sämtliche_ Excel-Dateien, die grade offen sind.
Wenn nur das aktuelle Excel-File geschlossen werden soll, solltest du
thisworkbook.Close True
einfügen.
Das "True" am Ende bedeutet, dass die Mappe automatisch beim Beenden gespeichert wird und nicht erst nachgefragt wird.

Grüße
Exze
Blu3Scr33n
Blu3Scr33n 24.10.2013 um 15:12:38 Uhr
Goto Top
Hy Exze,

Wenn ich
 thisworkbook.close True
in Zeile 31. setze, dann schließt er die Excel und generiert auch ordnungsgemäß die CSV.
Schaue ich dann allerdings in die CSV rein, stehen dort nur Hyroglyphen.

Das muss an dem Codeteil danach liegen, der erst für die Ordnungsgemäße Zuordnung der CSV Einträge zuständig ist.
Hast du diesbezüglich eine Hilfestellung?

Grüße

Blu3Scr33n
Blu3Scr33n
Blu3Scr33n 24.10.2013 um 15:21:45 Uhr
Goto Top
So...Ich habs gelöst. Auf die nicht schöne aber funktionierende Tour.
Ich habe jetzt einfach ein Makro in Excel aufgezeichnet, dass das Speichern der Datei übernimmt und in den Code mit eingebaut.
Er sieht jetzt folgendermaßen aus:
 Sub ExportCSV()
 
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim strTemp As String
Dim strDateiname As String
Dim strTrennzeichen As String
Dim strMappenpfad As String
Dim blnAnfuehrungszeichen As Boolean
Dim Speicherpfad As String
Dim Speichername As String

 
strMappenpfad = ActiveWorkbook.FullName

Speicherpfad = "T:\OTC_Derivate\20_Dokumentation\07_Trade_Repository\EMIR\02 Mapping\Meldevarianten\BTG\Testfiles\"  
 
strDateiname = InputBox("Bitte den Namen der CSV-Datei angeben.", "CSV-Export")  
If strDateiname = "" Then Exit Sub  
 
strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ";")  
If strTrennzeichen = "" Then Exit Sub  
 
Set Bereich = ActiveSheet.UsedRange

Speichername = Speicherpfad & strDateiname
 

   With ActiveWorkbook.WebOptions
        .RelyOnCSS = True
        .OrganizeInFolder = True
        .UseLongFileNames = True
        .DownloadComponents = False
        .RelyOnVML = False
        .AllowPNG = True
        .ScreenSize = msoScreenSize1024x768
        .PixelsPerInch = 96
        .Encoding = msoEncodingUTF8
    End With
    With Application.DefaultWebOptions
        .SaveHiddenData = True
        .LoadPictures = True
        .UpdateLinksOnSave = True
        .CheckIfOfficeIsHTMLEditor = True
        .AlwaysSaveInDefaultEncoding = False
        .SaveNewWebPagesAsWebArchives = True
    End With
    ActiveWorkbook.SaveAs Filename:=Speichername _
        , FileFormat:=xlCSV, CreateBackup:=False

  Set Bereich = Nothing
  MsgBox "Export erfolgreich. Datei wurde exportiert nach" & vbCrLf & strDateiname  
 
End Sub
Blu3Scr33n
Blu3Scr33n 24.10.2013 um 15:22:38 Uhr
Goto Top
Falls irgendwem eine schönere Codevariante einfällt, nehme ich auch gerne diese.
Ich bedanke mich für die kompetente Hilfe und setze diesen Thread auf gelöst.

Beste Grüße

Blu3Scr33n