簡體   English   中英

盡管分隔符設置為分號,但宏仍以逗號分隔.csv

[英]macro separates .csv by comma, despite separator set to semicolon

在下面的代碼中,盡管逗號分隔符設置為false並且分號分隔符設置為true,但宏仍會打開.csv,並用分號和逗號分隔值(至少看起來像這樣做)。

我試圖切換代碼的​​順序,但無濟於事。 在以下線程中可以找到代碼的歷史記錄和用途: 在循環通過.csv文件時,VBA運行時錯誤'1004' 請在這里告訴我我做錯了什么或想念什么?

(與問題相關的主題。)

Dim wrk As Workbook
Dim Sh As Worksheet
Dim findMatch As Range, searchInColumn As Range
Dim i As Long, j As Long, k As Long
Dim chosenFile As Integer
Dim xlFileName As String
Dim chooseFiles As Office.FileDialog

Set DictChanged = CreateObject("Scripting.Dictionary")
Set DictToBeDone = CreateObject("Scripting.Dictionary")

Application.ScreenUpdating = False


Set chooseFiles = Application.FileDialog(msoFileDialogFilePicker)

    With chooseFiles

        .AllowMultiSelect = True
        .Title = "Please select the file."
        .InitialFileName = "c:\"
        .InitialView = msoFileDialogViewList
        .Filters.Add "All", "*.*"

    End With


If chooseFiles.Show = -1 Then
    For k = 1 To chooseFiles.SelectedItems.Count
        xlFileName = chooseFiles.SelectedItems(k)

        Set wrk = Application.Workbooks.Open(xlFileName)
        Set Sh = wrk.Worksheets(1)               

        If InStr(1, wrk.Name, ".csv") Then

            Sh.Range(Range("A1"), Range("A1").End(xlDown)).TextToColumns _
            DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=True, Comma:=False, Space:=False, Other:=False

        End If
End If

所描述的問題出現在可見代碼內。 在要求的輸出階段以下:

輸出階段:

初始文件

+ --------- + --------- + --------- + ------------------ + ------------ + ----------------- + | 第1列| 第2列| 第3列| 第4列| 第5列| 第6列| + --------- + --------- + --------- + ------------------ + ------------ + ----------------- + | 123456 | 654321 | SomeID | ValuesWithComma | SomeValues | 其他價值| + --------- + --------- + --------- + ------------------ + ------------ + ----------------- + | 123456 | 654322 | SomeID | 價值觀,用逗號| SomeValues | 其他價值| + --------- + --------- + --------- + ------------------ + ------------ + ----------------- + | 123456 | 654323 | SomeID | 價值觀,用逗號| SomeValues | 其他價值| + --------- + --------- + --------- + ------------------ + ------------ + ----------------- + | 123456 | 654324 | SomeID | Val,uesWithComma | SomeValues | 其他價值| + --------- + --------- + --------- + ------------------ + ------------ + ----------------- + | 123456 | 654325 | SomeID | ValuesWithComma | SomeValues | 其他價值| + --------- + --------- + --------- + ------------------ + ------------ + ----------------- + | 123456 | 654326 | SomeID | ValuesWithComma | SomeValues | 其他價值| + --------- + --------- + --------- + ------------------ + ------------ + ----------------- + | 123456 | 654327 | SomeID | ValuesWithComma | SomeValues | 其他價值| + --------- + --------- + --------- + ------------------ + ------------ + ----------------- + | 123456 | 654328 | SomeID | ValuesWithComma | SomeValues | 其他價值|

2.AfterPickingFileInFileDialog

+ ------------------------------------------------- ---------------- + --------------------------------- -------- + | column1; column2; column3; column4; column5; column6 | 第2列| + ------------------------------------------------- ---------------- + --------------------------------- -------- + | 123456; 654321; SomeID; ValuesWithComma; SomeValues; SomeOtherValues | 654321 | + ------------------------------------------------- ---------------- + --------------------------------- -------- + | 123456; 654322; SomeID;值| WithComma; SomeValues; SomeOtherValues | + ------------------------------------------------- ---------------- + --------------------------------- -------- + | 123456; 654323; SomeID;值| WithComma; SomeValues; SomeOtherValues | + ------------------------------------------------- ---------------- + --------------------------------- -------- + | 123456; 654324; SomeID; Val | uesWithComma; SomeValues; SomeOtherValues | + ------------------------------------------------- ---------------- + --------------------------------- -------- + | 123456; 654325; SomeID; ValuesWithComma; SomeValues; SomeOtherValues | 654325 | + ------------------------------------------------- ---------------- + --------------------------------- -------- + | 123456; 654326; SomeID; ValuesWithComma; SomeValues; SomeOtherValues | 654326 | + ------------------------------------------------- ---------------- + --------------------------------- -------- + | 123456; 654327; SomeID; ValuesWithComma; SomeValues; SomeOtherValues | 654327 | + ------------------------------------------------- ---------------- + --------------------------------- -------- + | 123456; 654328; SomeID; ValuesWithComma; SomeValues; SomeOtherValues | 654328 | + ------------------------------------------------- ---------------- + --------------------------------- -------- +

3.AfterLastCondition

+ --------- + --------- + --------- + ----------------- + - ----------- + ----------------- + | 第1列| 第2列| 第3列| 第4列| 第5列| 第6列| + --------- + --------- + --------- + ----------------- + - ----------- + ----------------- + | 123456 | 654321 | SomeID | ValuesWithComma | SomeValues | 其他價值| + --------- + --------- + --------- + ----------------- + - ----------- + ----------------- + | 123456 | 654322 | SomeID | 價值觀| | | + --------- + --------- + --------- + ----------------- + - ----------- + ----------------- + | 123456 | 654323 | SomeID | 價值觀| | | + --------- + --------- + --------- + ----------------- + - ----------- + ----------------- + | 123456 | 654324 | SomeID | Val | | | + --------- + --------- + --------- + ----------------- + - ----------- + ----------------- + | 123456 | 654325 | SomeID | ValuesWithComma | SomeValues | 其他價值| + --------- + --------- + --------- + ----------------- + - ----------- + ----------------- + | 123456 | 654326 | SomeID | ValuesWithComma | SomeValues | 其他價值| + --------- + --------- + --------- + ----------------- + - ----------- + ----------------- + | 123456 | 654327 | SomeID | ValuesWithComma | SomeValues | 其他價值| + --------- + --------- + --------- + ----------------- + - ----------- + ----------------- + | 123456 | 654328 | SomeID | ValuesWithComma | SomeValues | 其他價值| + --------- + --------- + --------- + ----------------- + - ----------- + ----------------- +

@Tim Williams和@ Nick.McDermaid指出您的代碼存在問題。 尚不清楚您要實現什么。 但是,關於打開分號分隔的文本文件,您可以將文件重命名為.txt並像

xlFileName = chooseFiles.SelectedItems(k)
        TmpFlName = Path & "TmpCsv.txt"
        If Dir(TmpFlName) <> "" Then Kill TmpFlName
        FileCopy xlFileName, TmpFlName
        Workbooks.OpenText Filename:=TmpFlName, Origin:= _
        1250, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
        , Space:=False, Other:=False, TrailingMinusNumbers:=True, Local:=False

問題是定界符選項僅在使用.txt文件而不使用.csv

感謝上面的@Ahmed AU的回答和評論,我編輯了代碼,現在看來可以正常工作了。 應該可以使用.csv和.xlmx文件。 這是代碼的更長版本:

Sub FixCSV()

Dim wrk As Workbook
Dim Sh As Worksheet
Dim findMatch As Range, searchInColumn As Range
Dim i As Long, j As Long, k As Long, lastRow As Long, lastColumn As Long
Dim chosenFile As Integer
Dim xlFileName As String
Dim chooseFiles As Office.FileDialog

Set chooseFiles = Application.FileDialog(msoFileDialogFilePicker)

    With chooseFiles       
        .AllowMultiSelect = True
        .Title = "Please select the file."
        .InitialFileName = "c:\"
        .InitialView = msoFileDialogViewList
        .Filters.Add "All", "*.*"            
    End With           

If chooseFiles.Show = -1 Then
    For k = 1 To chooseFiles.SelectedItems.Count
        xlFileName = chooseFiles.SelectedItems(k)

            If InStr(1, xlFileName, ".csv") Then
                TmpFlName = path & "TmpCsv.txt"
                If Dir(TmpFlName) <> "" Then Kill TmpFlName
                FileCopy xlFileName, TmpFlName
                Workbooks.OpenText FileName:=TmpFlName, origin:= _
                1250, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
                ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False _
                , Space:=False, Other:=False, TrailingMinusNumbers:=True, Local:=False

                Set wrk = Application.Workbooks("TmpCsv.txt")
                Set Sh = wrk.Worksheets(1)
            Else
                Set wrk = Application.Workbooks.Open(xlFileName)
                Set Sh = wrk.Worksheets(1)
            End If

        lastRow = Sh.Cells(Sh.Rows.Count, "A").End(xlUp).Row
        lastColumn = Sh.Cells(1, Sh.Columns.Count).End(xlToLeft).Column           

       i = 2           
       Do Until i = lastRow                          
          'do something          
       Loop

    If InStr(1, wrk.Name, "TmpCsv.txt") Then             
        wrk.SaveAs FileName:=xlFileName, FileFormat:=xlCSV, Local:=True
        wrk.Close False
        Kill TmpFlName
    Else
        wrk.Close 'savechanges:=true
    End If

    Next k
End If

End Sub

在另存為.csv時,逗號作為分隔符彈出,再次破壞了文件-user2726096的此回答: https ://stackoverflow.com/a/18492514/10348607幫助我解決了問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM