使用 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 数组。
解决方案:
如果您要将字符串分配给单个单元格,则:
一个。连接你想要的字符串变量,然后
b。 Trim() 字符串,并将其分配给您的单元格
否则,如果您要将一组字符串从一个范围复制到另一个范围,则
一个。按照 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
我有一份来自另一家公司的数据报告。我需要使用的字段之一在每一行中都有大约 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 数组。
解决方案:
如果您要将字符串分配给单个单元格,则:
一个。连接你想要的字符串变量,然后
b。 Trim() 字符串,并将其分配给您的单元格
否则,如果您要将一组字符串从一个范围复制到另一个范围,则
一个。按照 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