How to save semi-colon delimited csv file using VBA?

后端 未结 6 1802
轮回少年
轮回少年 2020-12-03 08:10

I copy data into a spreadsheet, use VBA to format it, then save that sheet into a CSV file.

I use the following code:

ws.SaveAs Filename:=filestr, Fi         


        
相关标签:
6条回答
  • 2020-12-03 08:40

    Just use this code: ActiveWorkbook.SaveAs "My File.csv", xlCSV, Local:=True

    (don't use: Filename:= )

    0 讨论(0)
  • 2020-12-03 08:43

    No need to declare all this variables, just add local:=true in the end of your SaveAs method, like so:

    ActiveWorkbook.SaveAs Filename:="C:/Path/TryMe.csv", FileFormat:=xlCSV, Local:=True
    
    0 讨论(0)
  • 2020-12-03 08:43

    I ran into the same issue and after contemplating trying to change the "line separator" in Regional Settings using VBA code and Kernel calls I decided it would be way more of a pain, so instead I just found some examples of using the Scripting.FileSystemObject to accomplish my needs instead.

    The following code will take an existing csv file and replace all the commas with the tilde "~" character.

    Private Sub commaReplace()
    
        Dim objFSO
        Dim filePath
        Dim migratorFileName
        Dim strFullPath1
        Dim strFullPath2
        Const ForReading = 1
        'define a TextStream object
        Dim objTS
        Dim strContents As String
    
        'note, my code actually uses the below commented out filepath
        'as the location of the workbook can be arbitrary, e.g.
        'Worksheets("FilePath").[A2:A2].Value is determined when workbook
        'is opened
        'filePath = Worksheets("FilePath").[A2:A2].Value
        filePath = "C:\Temp\"
    
        'our original file that we've exported as csv file in another section of code
        migratorFileName = "MigratorInput.csv"
        strFullPath1 = filePath + migratorFileName
    
        'the path and file name we want to save to, tilde separated vs. comma
        migratorFileName = "MigratorInput.tilde.csv"
        strFullPath2 = filePath + migratorFileName
    
        'read everything from the csv file, replacing comma with tilde
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objTS = objFSO.OpenTextFile(strFullPath1, ForReading)
        strContents = objTS.ReadAll
        strContents = Replace(strContents, ",", "~")
        objTS.Close
    
        'write everything out to another file, note, this could just overwrite
        'the original file if you pass the optional overwrite flag
        Set objTS = objFSO.CreateTextFile(strFullPath2)
        objTS.Write strContents
        objTS.Close
    
    End Sub
    

    You can then just call the commaReplace sub routine from your sub routine which is creating the csv file.

    Hope it helps someone!

    0 讨论(0)
  • 2020-12-03 08:47

    To use vbs script following construction succeded:

    .SaveAs Filename, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1

    where arguments are:

    Object Filename,
    Object FileFormat,
    Object Password,
    Object WriteResPassword,
    Object ReadOnlyRecommended,
    Object CreateBackup,
    XlSaveAsAccessMode AccessMode,
    Object ConflictResolution,
    Object AddToMru,
    Object TextCodepage,
    Object TextVisualLayout,
    Object Local
    

    SourceLink : https://msdn.microsoft.com/ru-ru/library/microsoft.office.tools.excel.workbook.saveas.aspx

    Last "1" in "SaveAs" function is equal to Local=True

    Also, the semicolon must be defined as the list separator in OS regional settings (see answers above)

    0 讨论(0)
  • 2020-12-03 08:47

    Use xlSCVMSDOS instread of xlCSV

    ActiveWorkbook.SaveAs Filename:="my File.csv", FileFormat:= xlCSVMSDOS, Local:=True
    

    It worked for me

    0 讨论(0)
  • 2020-12-03 09:01

    i've just checked this because had same problem. Filename has no functionality in this case.

    This is what worked for me:

    With ActiveWorkbook
        .SaveAs Filename:="My File.csv", FileFormat:=xlCSV, Local:=True
        .Close False
    End With
    

    In regional settings -> ; <- as list separator. It is also important not to save changes when closing -> with Close you have to use False.

    0 讨论(0)
提交回复
热议问题