【发布时间】:2017-12-20 08:03:21
【问题描述】:
我正在尝试在 Excel 中填充一个单列表,我可以使用 vba 和一维数组连接到电源查询。
因此,用户将列表放入文本框中,其中每个项目用分号分隔,然后将其带入数组。到目前为止我有:
Dim arrSIOCodes As Variant
arrSIOCodes = Split(tbSIOCodes, ";")
ThisWorkbook.Sheets("CAEATFA_SIO").Activate
Call ChangeTableToArray(tbl:=ThisWorkbook.Sheets("CAEATFA_SIO").ListObjects("tblSIOCodes"), ar:=arrSIOCodes)
我从另一个堆栈溢出帖子中得到了这个子,但我需要根据我的问题对其进行自定义,我遇到了麻烦
Sub ChangeTableToArray(tbl As ListObject, ar)
Dim newRows As Long: newRows = 1 + UBound(ar, 1) - LBound(ar, 1)
If Not tbl.DataBodyRange Is Nothing Then tbl.DataBodyRange.EntireRow.Delete
If newRows > 1 Then tbl.HeaderRowRange.Resize(newRows - 1).Offset(2).EntireRow.Insert
tbl.HeaderRowRange.Resize(newRows, 1 + UBound(ar, 1) - LBound(ar, 1)).Offset (1).value = ar
End Sub
但是这是我需要它做的:
【问题讨论】:
-
我 THINK 你可以用
... .value = Application.Transpose(ar)做到这一点。糟糕 - 不,你不能,你是故意调整列的大小,而不是行。 -
它的
WorksheetFunction.Transpose() -
@YowE3K 更近了一步,现在每一列都列出了 value1,value2,value3 但它仍然遍历相同数量的列。我不知道如何在不破坏列的情况下减少列。
-
@ja72 通常使用
Application.Transpose比使用WorksheetFunction.Transpose更好 -
@ja72 我想最值得注意的是它直接使用 VBA 的 Excel 应用程序对象,而不必将请求传递给 Excel 本身进行处理和返回。 Mat's Mug 能够更好地解释这两种方法之间的差异 - 他(我认为杯子是“他”!)深入了解他为 RubberDuck 所做的一些事情的处理方式。
标签: vba excel powerquery