Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBA Code bricht bei Befehl Speichern unter ab

Frage Entwicklung VB for Applications

Mitglied: Blu3Scr33n

Blu3Scr33n (Level 1) - Jetzt verbinden

24.10.2013, aktualisiert 14:35 Uhr, 2927 Aufrufe, 14 Kommentare

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

01.
Sub ExportCSV() 
02.
  
03.
Dim Bereich As Object, Zeile As Object, Zelle As Object 
04.
Dim strTemp As String 
05.
Dim strDateiname As String 
06.
Dim strTrennzeichen As String 
07.
Dim strMappenpfad As String 
08.
Dim blnAnfuehrungszeichen As Boolean 
09.
Dim Speicherpfad As String 
10.
Dim Speichername As String 
11.
 
12.
  
13.
strMappenpfad = ActiveWorkbook.FullName 
14.
 
15.
Speicherpfad = "SPEICHERORT" 
16.
  
17.
strDateiname = InputBox("Bitte den Namen der CSV-Datei angeben.", "CSV-Export") 
18.
If strDateiname = "" Then Exit Sub 
19.
  
20.
strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ";") 
21.
If strTrennzeichen = "" Then Exit Sub 
22.
  
23.
Set Bereich = ActiveSheet.UsedRange 
24.
 
25.
Speichername = Speicherpfad & strDateiname 
26.
  
27.
ActiveWorkbook.SaveAs Filename:=Speichername 
28.
 
29.
ChDrive "T" 
30.
ChDir "SPEICHERORT" 
31.
 
32.
Open strDateiname For Output As #1 
33.
  
34.
For Each Zeile In Bereich.Rows 
35.
    For Each Zelle In Zeile.Cells 
36.
        If blnAnfuehrungszeichen = True Then 
37.
            strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen 
38.
        Else 
39.
            strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen 
40.
        End If 
41.
    Next 
42.
    If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1) 
43.
    Print #1, strTemp 
44.
    strTemp = "" 
45.
Next 
46.
  
47.
  Close #1 
48.
 
49.
  Set Bereich = Nothing 
50.
  MsgBox "Export erfolgreich. Datei wurde exportiert nach" & vbCrLf & strDateiname 
51.
  
52.
End Sub
Kann mir jemand mit dem Code helfen? Ich habe keine Ahnung, warum er abbricht.

Beste Grüße

Blu3Scr33n
Mitglied: 106543
24.10.2013 um 14:24 Uhr
Hi,

mit welchem Laufzeitfehler bricht der Code denn ab ?

Grüße
Exze
Bitte warten ..
Mitglied: derinderinderin
24.10.2013 um 14:27 Uhr
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.
Bitte warten ..
Mitglied: Blu3Scr33n
24.10.2013 um 14:32 Uhr
Hallo Exze

Laufzeit '70':
Zugriff verweigert

Gruß Blu3Scr33n
Bitte warten ..
Mitglied: Blu3Scr33n
24.10.2013 um 14:33 Uhr
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
Bitte warten ..
Mitglied: 106543
24.10.2013 um 14:40 Uhr
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
Bitte warten ..
Mitglied: derinderinderin
24.10.2013 um 14:41 Uhr
Aah ich verstehe

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?
Bitte warten ..
Mitglied: Blu3Scr33n
24.10.2013 um 14:43 Uhr
Ich laufe hier auf nem Thin Client. In diesem Zusammenhang gibt es für mich kein Laufwerk C:
Das Laufwerk, wo die CSV gespeichert werden soll ist ein Netzlaufwerk. Für die entsprechenden Pfade habe ich allerdings Zugriffsrechte.
Bitte warten ..
Mitglied: Blu3Scr33n
24.10.2013 um 14:45 Uhr
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
Bitte warten ..
Mitglied: 106543
24.10.2013 um 14:48 Uhr
Hi,

du schreibst ja
01.
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
Bitte warten ..
Mitglied: Blu3Scr33n
24.10.2013 um 14:56 Uhr
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
Bitte warten ..
Mitglied: 106543
24.10.2013 um 15:00 Uhr
Hi,

um komplett Excel zu schließen, bräuchtest du
01.
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
01.
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
Bitte warten ..
Mitglied: Blu3Scr33n
24.10.2013 um 15:12 Uhr
Hy Exze,

Wenn ich
01.
 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
Bitte warten ..
Mitglied: Blu3Scr33n
24.10.2013 um 15:21 Uhr
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:
01.
 Sub ExportCSV() 
02.
  
03.
Dim Bereich As Object, Zeile As Object, Zelle As Object 
04.
Dim strTemp As String 
05.
Dim strDateiname As String 
06.
Dim strTrennzeichen As String 
07.
Dim strMappenpfad As String 
08.
Dim blnAnfuehrungszeichen As Boolean 
09.
Dim Speicherpfad As String 
10.
Dim Speichername As String 
11.
 
12.
  
13.
strMappenpfad = ActiveWorkbook.FullName 
14.
 
15.
Speicherpfad = "T:\OTC_Derivate\20_Dokumentation\07_Trade_Repository\EMIR\02 Mapping\Meldevarianten\BTG\Testfiles\" 
16.
  
17.
strDateiname = InputBox("Bitte den Namen der CSV-Datei angeben.", "CSV-Export") 
18.
If strDateiname = "" Then Exit Sub 
19.
  
20.
strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ";") 
21.
If strTrennzeichen = "" Then Exit Sub 
22.
  
23.
Set Bereich = ActiveSheet.UsedRange 
24.
 
25.
Speichername = Speicherpfad & strDateiname 
26.
  
27.
 
28.
   With ActiveWorkbook.WebOptions 
29.
        .RelyOnCSS = True 
30.
        .OrganizeInFolder = True 
31.
        .UseLongFileNames = True 
32.
        .DownloadComponents = False 
33.
        .RelyOnVML = False 
34.
        .AllowPNG = True 
35.
        .ScreenSize = msoScreenSize1024x768 
36.
        .PixelsPerInch = 96 
37.
        .Encoding = msoEncodingUTF8 
38.
    End With 
39.
    With Application.DefaultWebOptions 
40.
        .SaveHiddenData = True 
41.
        .LoadPictures = True 
42.
        .UpdateLinksOnSave = True 
43.
        .CheckIfOfficeIsHTMLEditor = True 
44.
        .AlwaysSaveInDefaultEncoding = False 
45.
        .SaveNewWebPagesAsWebArchives = True 
46.
    End With 
47.
    ActiveWorkbook.SaveAs Filename:=Speichername _ 
48.
        , FileFormat:=xlCSV, CreateBackup:=False 
49.
 
50.
  Set Bereich = Nothing 
51.
  MsgBox "Export erfolgreich. Datei wurde exportiert nach" & vbCrLf & strDateiname 
52.
  
53.
End Sub
Bitte warten ..
Mitglied: Blu3Scr33n
24.10.2013 um 15:22 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
VB for Applications
gelöst VBA-Makro verschwindet nach Speichern (5)

Frage von lupi1989 zum Thema VB for Applications ...

Microsoft Office
Kreuztabelle Access + VBA Code (7)

Frage von Dr.Cornwallis zum Thema Microsoft Office ...

VB for Applications
gelöst Xml-Datei laden bzw. auf Festplatte kopieren und per VBA in eine Access-Tabelle speichern (22)

Frage von machohunk zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...