Запуск text2column для столбца A: A - PullRequest
0 голосов
/ 15 февраля 2020

Я довольно новичок в сценариях VBA, но мне нужно выполнить следующие действия:

  • преобразовать файл CSV в xls one
  • в сохраненном файле xls, чтобы выполнить следующие действия: 1. Запустить текст в столбцы для данных 2. Определить тип каждого столбца (сумма, дата, текст). 3. Сделать первые 0 в столбцах «Сумма и дата» видимыми (например, «04521.6823» & для даты «05/02/2020»). Здесь я планирую использовать опцию .NumberFormat.

Я успешно преобразовал файл, но не могу выполнить часть Text2Column. Мои данные только в столбце A, разделитель ";", только на sheet1. Вот последний код, который я запустил:

 Sub text2columns()
    Dim rg As Range

    Set rg = Range("A:A").CurrentRegion

    rg.TextToColumns Destination:=Range("A:A"), ConsecutiveDelimiter:=True, DataType:=xlDelimited, Space:=True

    End Sub

Кто-нибудь может мне помочь? Я знаю, что вопросы основны c, но для продолжения нужна помощь. Спасибо!

Ответы [ 3 ]

0 голосов
/ 15 февраля 2020

Стиль Fomramt ~> 1: вкладка, 2: запятая, 3: пробел, 4: полуклон, 5: нет, 6: письмо пользователя

Sub TransToXLSFromCSV()
Dim vFile As Variant
Dim vDB
Dim fn As String
Dim strPath As String
Dim i As Long
Dim Wb As Workbook
    strPath = ThisWorkbook.Path
    vFile = Application.GetOpenFilename("Select Text Files *.txt,*.txt;*.csv", _
      Title:="Select Text Files!", MultiSelect:=True)
    If TypeName(vFile) = "Boolean" Then Exit Sub
    Application.ScreenUpdating = False

    For i = 1 To UBound(vFile)
        fn = Dir(vFile(i))
        fn = Left(fn, Len(fn) - 4)

         Set Wb = Workbooks.Open(Filename:=vFile(i), Format:=2) '<~~ Foramt style comma
         vDB = Wb.ActiveSheet.UsedRange
         Wb.Close
         Set Wb = Workbooks.Add
         With Wb
            .ActiveSheet.Range("a1").Resize(UBound(vDB, 1), UBound(vDB, 2)) = vDB
            .SaveAs Filename:=strPath & "\" & fn & ".xlsx"
            .Close (0)
         End With
    Next i
    Application.ScreenUpdating = True
End Sub
0 голосов
/ 16 февраля 2020

Попробуйте этот код, пожалуйста:

Sub text2columns()
    Dim rg As Range, arrFlInf(19) As Variant, i As Long
    For i = 0 To UBound(arrFlInf)
        Select Case i
            Case 1 - 8, 10   'Text
                arrFlInf(i) = Array(i + 1, 2)
            Case 12 - 15, 18 'date (MDY)
                arrFlInf(i) = Array(i + 1, 3)
            Case Else        'General
                arrFlInf(i) = Array(i + 1, 1)
        End Select
    Next i
    Set rg = Range("A:A")

    rg.TextToColumns Destination:=Range("A1"), _
        ConsecutiveDelimiter:=False, _
        DataType:=xlDelimited, _
        Semicolon:=True, _
        fieldInfo:=arrFlInf
End Sub

Если вам не нужен формат даты типа "MDY", вы должны изменить его в одной из следующих категорий: 4 = DMY, 5 = YMD, 6 = MYD, 7 = DYM и 8 = YDM.

0 голосов
/ 15 февраля 2020

Вы упомянули пункт назначения: = диапазон («A: A»). Кроме того, ваш диапазон ввода и вывода не может быть одинаковым. Я думаю, это не должен быть столбец, только ячейка

Пожалуйста, проверьте, работает ли Destination: = Range ("B1").

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