我正在尝试将表列的最后 4 个字符放入数组并转储到 L 列。我使用数组是因为它更快:
Dim arrCard() As String
.Range("TableExport[CARD]").NumberFormat = "@"
arrCard = Right(.Range("TableExport[CARD]").Text, 4)
.Range("L2:L10000") = arrCard
Run Code Online (Sandbox Code Playgroud)
然后它说
类型不匹配
这没有意义,因为 CARD 列已经是文本。这是否意味着我不能在一个范围内使用 Right()?但是我确实看到很多示例都使用这种方法(除非它们不适用于表列)
我也试过:
Dim arrCard() As Variant
Dim cardnum As Integer
.Range("TableExport[CARD]").NumberFormat = "@"
arrCard = Right(.Range("TableExport[CARD]").Text, 4)
.Range("L2:L10000") = arrCard
Run Code Online (Sandbox Code Playgroud)
然后它在第 4 行抱怨类型不匹配。TBH 我不明白,这似乎不是什么要求。
您不能在范围上使用 RIGHT,而需要在特定元素上使用它。此外,因为您将数组设置为等于一个范围,它将是一个二维数组,这就是为什么arrCard(cardnum)不起作用并且您必须使用arrCard(cardnum,1).
Dim arrCard As Variant
Dim cardnum As Long
With ThisWorkbook.Sheets(1)
.Range("CARD").NumberFormat = "@"
arrCard = .Range("CARD").Value
For cardnum = LBound(arrCard, 1) To UBound(arrCard, 1)
arrCard(cardnum, 1) = Right(arrCard(cardnum, 1), 4)
Next cardnum
.Range("L2:L10000") = arrCard
End With
Run Code Online (Sandbox Code Playgroud)