使用 VBA 使用一维数组填充 Excel Table
Populate an Excel Table with a One Dimensional array using VBA
我正在尝试填充 excel 中的一列 table,我可以使用 vba 和一维数组连接到电源查询。
所以用户将一个列表放入一个文本框中,其中每个项目都用分号分隔,然后将其放入数组中。到目前为止我有:
Dim arrSIOCodes As Variant
arrSIOCodes = Split(tbSIOCodes, ";")
ThisWorkbook.Sheets("CAEATFA_SIO").Activate
Call ChangeTableToArray(tbl:=ThisWorkbook.Sheets("CAEATFA_SIO").ListObjects("tblSIOCodes"), ar:=arrSIOCodes)
我从另一个堆栈溢出中得到了这个子 post 但我需要根据我的问题对其进行自定义,但我遇到了麻烦
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
这是当前代码正在做的事情:
然而这是我需要它做的:
您正在调整目标中 列 的数量,但您只有一列(如果您 Transpose
数组)要存储。所以做这样的事情:
tbl.HeaderRowRange.Resize(newRows, 1).Offset (1).value = Application.Transpose(ar)
即将参加一个迟到的会议,所以我很快就把它放在一起并且未经测试。但这只是另一种看待它的方式:
Sub ArrayToTable(ByVal ws As Worksheet, ParamArray YourArr() As Variant)
Dim TmpArr As Variant, i As Long, LineNum As Long
TmpArr = YourArr(0)
LineNum = 1 'whatever method you use to find linenumbers
For i = LBound(TmpArr) To UBound(TmpArr)
ws.Cells(LineNum, 1).Value = TmpArr(i)
LineNum = LineNum + 1
Next
End Sub
我正在尝试填充 excel 中的一列 table,我可以使用 vba 和一维数组连接到电源查询。
所以用户将一个列表放入一个文本框中,其中每个项目都用分号分隔,然后将其放入数组中。到目前为止我有:
Dim arrSIOCodes As Variant
arrSIOCodes = Split(tbSIOCodes, ";")
ThisWorkbook.Sheets("CAEATFA_SIO").Activate
Call ChangeTableToArray(tbl:=ThisWorkbook.Sheets("CAEATFA_SIO").ListObjects("tblSIOCodes"), ar:=arrSIOCodes)
我从另一个堆栈溢出中得到了这个子 post 但我需要根据我的问题对其进行自定义,但我遇到了麻烦
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
这是当前代码正在做的事情:
然而这是我需要它做的:
您正在调整目标中 列 的数量,但您只有一列(如果您 Transpose
数组)要存储。所以做这样的事情:
tbl.HeaderRowRange.Resize(newRows, 1).Offset (1).value = Application.Transpose(ar)
即将参加一个迟到的会议,所以我很快就把它放在一起并且未经测试。但这只是另一种看待它的方式:
Sub ArrayToTable(ByVal ws As Worksheet, ParamArray YourArr() As Variant)
Dim TmpArr As Variant, i As Long, LineNum As Long
TmpArr = YourArr(0)
LineNum = 1 'whatever method you use to find linenumbers
For i = LBound(TmpArr) To UBound(TmpArr)
ws.Cells(LineNum, 1).Value = TmpArr(i)
LineNum = LineNum + 1
Next
End Sub