Application.Trim
- 我的小调查让我相信
Application.Trim
实际上适用于数组并返回修剪值的从一开始的数组。
- If
rng
是一个具有多个单元格的连续范围,表达式rng.Value
(在等式的右侧)实际上是一个包含范围内的值的基于 1 的二维数组。
Range
Sub TrimShort()
Dim rng As Range: Set rng = ActiveSheet.Range("A2:A3")
' The expression 'rng = Application.Trim(rng)' is short for:
rng.Value = Application.Trim(rng.Value)
End Sub
Sub TrimLong()
Dim rng As Range: Set rng = ActiveSheet.Range("A2:A3")
' Note that the following line is inaccurate
' i.e. it will fail if the range contains one cell only.
Dim Data1() As Variant: Data1 = rng.Value
Dim Data2() As Variant: Data2 = Application.Trim(Data1)
rng.Value = Data2
End Sub
Arrays
Sub TrimOneD()
Dim sArr() As String: sArr = Split(" A A , B B", ",") ' 1D zero-based
Dim dArr() As Variant: dArr = Application.Trim(sArr) ' 1D one-based
Debug.Print "srIndex", "sArr", "dArr"
Dim r As Long
For r = 0 To UBound(sArr)
Debug.Print r, sArr(r), dArr(r + 1)
Next r
End Sub
Sub TrimTwoD()
Dim sData() As Variant: ReDim sData(0 To 1, 0 To 1) ' 2D zero-based
sData(0, 0) = " A A "
sData(0, 1) = " B B"
sData(1, 0) = " D D "
sData(1, 1) = CVErr(xlErrNA) ' it will not fail if error value
Dim dData() As Variant: dData = Application.Trim(sData) ' 2D one-based
Debug.Print "srIndex", "scIndex", "sData", "dData"
Dim r As Long, c As Long
For r = 0 To UBound(sData, 1)
For c = 0 To UBound(sData, 2)
Debug.Print r, c, sData(r, c), dData(r + 1, c + 1)
Next c
Next r
End Sub
Results
srIndex sArr dArr
0 A A A A
1 B B B B
srIndex scIndex sData dData
0 0 A A A A
0 1 B B B B
1 0 D D D D
1 1 Error 2042 Error 2042