Excel-Datei im gleichen Verzeichnis ohne Bestätigung speichern
Hallo liebes Forum,
aus einer bestehenden Excel-Datei (1 Arbeitzsblatt) möchte ich mit VBA eine gleichlautende Datei im Format *.csv erzeugen und ohne Bestätungsabfrage im gleichen Verzeichnis speichern. Ich habe im Internet einen Code für spezielle Exportfunktion gefunden, die aber den "Speichern unter" Dialog aufruft und auf eine Verzeichnisangabe bzw. Dateinamen warten. Genau das soll unterdrückt werden.
Wie beschrieben der vorhandene Code erzeugt genau die gewünschte Datei - auch schon im richtigen Format- aber der Speichervorgang ist noch manuell.
Habt Ihr vielleicht eine Lösung, ich habe auch schon probiert - kann aber die Bestätigungsanforderung nicht übergehen. Vielen Dank für die Mühe schon jetzt...
Armin
aus einer bestehenden Excel-Datei (1 Arbeitzsblatt) möchte ich mit VBA eine gleichlautende Datei im Format *.csv erzeugen und ohne Bestätungsabfrage im gleichen Verzeichnis speichern. Ich habe im Internet einen Code für spezielle Exportfunktion gefunden, die aber den "Speichern unter" Dialog aufruft und auf eine Verzeichnisangabe bzw. Dateinamen warten. Genau das soll unterdrückt werden.
Wie beschrieben der vorhandene Code erzeugt genau die gewünschte Datei - auch schon im richtigen Format- aber der Speichervorgang ist noch manuell.
Habt Ihr vielleicht eine Lösung, ich habe auch schon probiert - kann aber die Bestätigungsanforderung nicht übergehen. Vielen Dank für die Mühe schon jetzt...
Armin
Sub CSVFile_UTF8WithoutBOM()
Const adTypeText = 2
Const adModeReadWrite = 3
Const adTypeBinary = 1
Const adLF = 10
Const adSaveCreateOverWrite = 2
Const adWriteLine = 1
Dim SrcRange As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant
Dim UTFStream As Object
Dim BinaryStream As Object
' ask for file name and path
FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
' prepare UTF-8 stream
Set UTFStream = CreateObject("adodb.stream")
UTFStream.Type = adTypeText
UTFStream.Mode = adModeReadWrite
UTFStream.Charset = "UTF-8"
UTFStream.LineSeparator = adLF
UTFStream.Open
'set field separator
ListSep = ";"
'set source range with data for csv file
If Selection.Cells.Count > 1 Then
Set SrcRange = Selection
Else
Set SrcRange = ActiveSheet.UsedRange
End If
For Each CurrRow In SrcRange.Rows
'enclose each value with quotation marks and escape quotation marks in values
CurrTextStr = ""
For Each CurrCell In CurrRow.Cells
'CurrTextStr = CurrTextStr & """" & Replace(CurrCell.Value, """", """""") & """" & ListSep
CurrTextStr = CurrTextStr & "" & Replace(CurrCell.Value, "", """") & "" & ListSep
Next
'remove ListSep after the last value in line
While Right(CurrTextStr, 1) = ListSep
CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
'add line to UTFStream
UTFStream.WriteText CurrTextStr, adWriteLine
Next
'skip BOM
UTFStream.Position = 3
'copy UTFStream to BinaryStream
Set BinaryStream = CreateObject("adodb.stream")
BinaryStream.Type = adTypeBinary
BinaryStream.Mode = adModeReadWrite
BinaryStream.Open
'Strips BOM (first 3 bytes)
UTFStream.CopyTo BinaryStream
UTFStream.Flush
UTFStream.Close
'save to file
BinaryStream.SaveToFile FName, adSaveCreateOverWrite
BinaryStream.Flush
BinaryStream.Close
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 383098
Url: https://administrator.de/contentid/383098
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
4 Kommentare
Neuester Kommentar
Activeworkbook.FullName gibt den Pfad und den Dateinamen zurück.
Damit sollte sich die Zeile 22 anpassen lassen.
Bei Herbers Excel Forum gefunden:
Bei Änderungen wird nicht mehr zum Speichern aufgefordert.
Hilft das weiter?
Gruß Peter
Damit sollte sich die Zeile 22 anpassen lassen.
Bei Herbers Excel Forum gefunden:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.saved = True
End Sub
Bei Änderungen wird nicht mehr zum Speichern aufgefordert.
Hilft das weiter?
Gruß Peter
Hi,
indem Du statt
Workbook.SaveAs-Methode (Excel)
E.
indem Du statt
GetSaveAsFilename
die MethodeSaveAs
verwendest. "GetSaveAsFilename" blendet immer einen Dialog ein.Workbook.SaveAs-Methode (Excel)
E.