armin-k
Goto Top

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

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

Content-Key: 383098

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

Printed on: April 19, 2024 at 13:04 o'clock

Member: Kraemer
Kraemer Aug 11, 2018 at 19:33:58 (UTC)
Goto Top
Moin,

der Code ist doch kommentiert. Zeile 22 - die musst du ändern.

Gruß
Member: Armin-K
Armin-K Aug 12, 2018 at 05:52:22 (UTC)
Goto Top
Hallo Kraemer,

aber genau darum geht es, vielleicht stehe ich da auch auf der Leitung.... Aber das Script soll in der Frage den bestehenden Pfad und Dateinamen der Quelldaatei verwenden und automatisch ohne Bestätigungsabfrage speichern.
Habt Ihr da Ideen...
Member: PeterleB
PeterleB Aug 12, 2018 at 08:20:09 (UTC)
Goto Top
Activeworkbook.FullName gibt den Pfad und den Dateinamen zurück.
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
Member: emeriks
emeriks Aug 13, 2018 at 08:15:51 (UTC)
Goto Top
Hi,
indem Du statt
GetSaveAsFilename
die Methode
SaveAs
verwendest. "GetSaveAsFilename" blendet immer einen Dialog ein.

Workbook.SaveAs-Methode (Excel)

E.