0

我对 VBA 脚本很陌生,但我必须执行以下操作:

  • 将 csv 文件转换为 xls 文件
  • 在保存的 xls 文件中执行以下操作: 1. 为数据运行 Text To Columns 2. 定义每列的类型(金额、日期、文本)。3. 使 Amount&Date 列中的第一个 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

谁能帮我?我知道问题是基本的,但需要一些帮助才能继续。谢谢!

4

3 回答 3

0

您提到了 Destination:=Range("A:A")。此外,您的输入和输出范围不能相同。我认为,它不应该是一个列,而应该是一个单元格

请检查 Destination:=Range("B1") 是否有效。

于 2020-02-15T09:39:36.887 回答
0

格式样式 ~> 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
于 2020-02-15T09:50:39.860 回答
0

请尝试此代码:

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。

于 2020-02-16T16:50:57.607 回答