Excel VBA:数组上的 Application.Tranpose 出现运行时错误 438

Excel VBA:数组上的 Application.Tranpose 出现运行时错误 438

我有一个 VBA 代码,它从结构化表的一列获取数据并将其放入另一个结构化表的一列中,如下所示:

Dim TopNTickers As Variant
Dim NoOfTickers As Integer
Dim OutputTickers As Range
TopNTickers = Application.Transpose(Range("PortfolioTbl[Ticker]"))
NoOfTickers = UBound(TopNTickers)

With Range("TopNTickersTbl").ListObject.ListColumns("Ticker").Range
    Set OutputTickers = .Parent.Range(.Cells(2, 1), .Cells(NoOfTickers + 1, 1))
End With

OutputTickers = Application.Tranpose(TopNTickers)

第一个 Transpose 工作正常。它将 PortfolioTbl 表的 Ticker 列中的数据复制到 1D TopNTickers 数组中。

图片:

下一部分选择 TopNTickersTbl 表的 Ticker 列的子集。它似乎工作正常。

最后一部分给了我错误:

对象不支持属性或方法

图片:

我也尝试用 OutputTickers.Value 替换 OutputTickers,但出现同样的错误。

笔记:

上面的代码已经简化。在实际版本中,我增加了几行代码,删除了 TopNTickersTbl 的内容,然后向其中添加了与 TopNTickers 数组大小相等的行数,为数据写出阶段做准备。两个版本都发生了相同的错误,我很确定额外的代码与此错误无关。

答案1

这确实很奇怪。

我能够复制您的错误。看来我们无法将数组放入行数少于数组的表中。

我们可以先将空行添加到表,或者逐个添加数组项,让表在添加每个项时调整其大小。

我选择了后者,而且有效。

Public Sub Test1()

Dim TopNTickers As Variant
Dim NoOfTickers As Integer
Dim OutputTickers As Range
TopNTickers = Application.Transpose(Range("PortfolioTbl[Ticker]"))
NoOfTickers = UBound(TopNTickers)

With Range("TopNTickersTbl").ListObject.ListColumns("Ticker").Range
    Set OutputTickers = Range("TopNTickersTbl").ListObject.ListColumns("Ticker").Range.Parent.Range(.Cells(2, 1), .Cells(NoOfTickers + 1, 1))
End With

Dim i As Integer
For i = 1 To NoOfTickers
    OutputTickers.Cells(i, 1) = TopNTickers(i)
Next i

End Sub

编辑:我不清楚您的具体使用情况,但您可能会发现使用 PowerQuery 获取 TopN 项目更为简单。或者甚至只是一个数据透视表。

相关内容