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

后端 未结 6 1869
轮回少年
轮回少年 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: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!

提交回复
热议问题