使用 vba 到 trim 值时类型不匹配(错误 13)

Type mismatch (Error 13) when using vba to trim values

我有一份来自另一家公司的数据报告。我需要使用的字段之一在每一行中都有大约 30 个额外的尾随空格(我不知道为什么)。我只需要处理一些列,所以我所做的是一次从一个列中选取数据,然后按照适合我的分析的顺序将其放入新的 sheet 中。为此,我不使用复制和粘贴,而是使用 worksheets("A").range("...").value = worksheets("B").range("...").value。 这可以获取我想要的列并将它们按我想要的顺序放置。重组后,我试过 trim 列中的单元格:

    Worksheets("B").Range("F2:F" & rw).Value = Trim(Worksheets("B").Range("F2:F" & rw).Value)

我已经尝试根据 google 搜索调整此行,但每次我都会在此处遇到类型不匹配(错误 13)。 rw 是我为数据所在的行数设置的变量。我做错了什么?

编辑

我添加了一个循环:

myArr = Worksheets("B").Range("F2:F" & rw).Value
For i = LBound(myArr) To UBound(myArr)
    myArr(i, 1) = Trim(myArr(i, 1))
Next i
Worksheets("B").Range("F2:F" & rw).Value = myArr

它现在可以满足我的要求。

您遇到类型不匹配(错误 13)的原因是 Trim() 仅适用于字符串,但您正试图 trim 数组。

解决方案:

  1. 如果您要将字符串分配给单个单元格,则:

    一个。连接你想要的字符串变量,然后

    b。 Trim() 字符串,并将其分配给您的单元格

  2. 否则,如果您要将一组字符串从一个范围复制到另一个范围,则

    一个。按照 BigBen 的建议进行操作,并使用循环

Trim

  • 你将不得不循环:
Option Explicit

Sub testRange()
    
    Const FirstCellAddress As String = "F2"
    
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("B")
    
    Dim LastCell As Range
    Set LastCell = ws.Cells(ws.Rows.Count, _
      ws.Range(FirstCellAddress).Column).End(xlUp)
    
    Dim rng As Range
    Set rng = ws.Range(FirstCellAddress, LastCell)
    
    Dim cel As Range
    For Each cel In rng.Cells
        cel.Value = Trim(cel.Value)
    Next cel
    
End Sub

Sub testArray()
    
    Const FirstCellAddress As String = "F2"
    
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("B")
    
    Dim LastCell As Range
    Set LastCell = ws.Cells(ws.Rows.Count, _
      ws.Range(FirstCellAddress).Column).End(xlUp)
    
    Dim rng As Range
    Set rng = ws.Range(FirstCellAddress, LastCell)
    
    Dim Data As Variant
    Data = rng.Value
    
    Dim i As Long
    For i = 1 To UBound(Data, 1)
        Data(i, 1) = Trim(Data(i, 1))
    Next i
    
    rng.Value = Data
    
End Sub