VBA 在范围内使用 right()

Nic*_*rey 1 excel vba

我正在尝试将表列的最后 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 我不明白,这似乎不是什么要求。

jon*_*ies 5

您不能在范围上使用 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)