макрос разделяет .csv запятой, несмотря на то, что разделитель установлен на точку с запятой - PullRequest
0 голосов
/ 02 февраля 2019

В приведенном ниже коде макрос открывает .csv со значениями, разделенными точкой с запятой и запятой (по крайней мере, похоже, что он это делает), несмотря на то, что для разделителя запятых установлено значение false, а для разделителя точек с запятой - значение true.

Я пытался изменить порядок фрагментов кода, но безрезультатно.Историю и назначение кода можно найти в этой теме: Ошибка во время выполнения VBA '1004' при циклическом просмотре файла .csv .Посоветуйте, пожалуйста, что я делаю неправильно или отсутствует здесь?

(Тема, связанная с этим вопросом.)

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

Описанные проблемы возникают в видимом коде.Ниже выходных каскадов по запросу:

Выходные каскады:

Исходный файл

+ --------- + --------- + --------- + ------------------ + ------------ + ---------------- + |column1 |колонка2 |колонка3 |column4 |колонка 5 |колонка6 |+ --------- + --------- + --------- + ------------------ +------------ + ----------------- + |123456 |654321 |SomeID |ЗначенияWithComma |SomeValues ​​|SomeOtherValues ​​|+ --------- + --------- + --------- + ------------------ +------------ + ----------------- + |123456 |654322 |SomeID |Ценности, WithComma |SomeValues ​​|SomeOtherValues ​​|+ --------- + --------- + --------- + ------------------ +------------ + ----------------- + |123456 |654323 |SomeID |Ценности, WithComma |SomeValues ​​|SomeOtherValues ​​|+ --------- + --------- + --------- + ------------------ +------------ + ----------------- + |123456 |654324 |SomeID |Val, uesWithComma |SomeValues ​​|SomeOtherValues ​​|+ --------- + --------- + --------- + ------------------ +------------ + ----------------- + |123456 |654325 |SomeID |ЗначенияWithComma |SomeValues ​​|SomeOtherValues ​​|+ --------- + --------- + --------- + ------------------ +------------ + ----------------- + |123456 |654326 |SomeID |ЗначенияWithComma |SomeValues ​​|SomeOtherValues ​​|+ --------- + --------- + --------- + ------------------ +------------ + ----------------- + |123456 |654327 |SomeID |ЗначенияWithComma |SomeValues ​​|SomeOtherValues ​​|+ --------- + --------- + --------- + ------------------ +------------ + ----------------- + |123456 |654328 |SomeID |ЗначенияWithComma |SomeValues ​​|SomeOtherValues ​​|

2.AfterPickingFileInFileDialog

+ ----------------------------------------------------------------- + ----------------------------------------- + |столбец1; столбец2; столбец3; столбец4; столбец5; столбец6 |колонка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

+ --------- + ---------+ --------- + ----------------- + ------------ + ----------------- + |column1 |колонка2 |колонка3 |column4 |колонка 5 |колонка6 |+ --------- + --------- + --------- + ----------------- + ------------ + ----------------- + |123456 |654321 |SomeID |ЗначенияWithComma |SomeValues ​​|SomeOtherValues ​​|+ --------- + --------- + --------- + ----------------- + ------------ + ----------------- + |123456 |654322 |SomeID |Ценности |||+ --------- + --------- + --------- + ----------------- + ------------ + ----------------- + |123456 |654323 |SomeID |Ценности |||+ --------- + --------- + --------- + ----------------- + ------------ + ----------------- + |123456 |654324 |SomeID |Вал |||+ --------- + --------- + --------- + ----------------- + ------------ + ----------------- + |123456 |654325 |SomeID |ЗначенияWithComma |SomeValues ​​|SomeOtherValues ​​|+ --------- + --------- + --------- + ----------------- + ------------ + ----------------- + |123456 |654326 |SomeID |ЗначенияWithComma |SomeValues ​​|SomeOtherValues ​​|+ --------- + --------- + --------- + ----------------- + ------------ + ----------------- + |123456 |654327 |SomeID |ЗначенияWithComma |SomeValues ​​|SomeOtherValues ​​|+ --------- + --------- + --------- + ----------------- + ------------ + ----------------- + |123456 |654328 |SomeID |ЗначенияWithComma |SomeValues ​​|SomeOtherValues ​​|+ --------- + --------- + --------- + ----------------- + ------------ + ----------------- +

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Благодаря ответу @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 всплывающие запятые появляются как разделители, снова уничтожая файл - этот ответ пользователя 2726096: https://stackoverflow.com/a/18492514/10348607 помог мнерешить вопрос.

0 голосов
/ 02 февраля 2019

Есть проблемы с вашим кодом, как прокомментировали @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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...