代码之家  ›  专栏  ›  技术社区  ›  SanomaJean

使用VBA使用一维数组填充Excel表格

  •  1
  • SanomaJean  · 技术社区  · 7 年前

    我正在尝试在excel中填充一个单列表,可以使用vba和一维数组连接到power query。

    因此,用户将一个列表放入一个文本框中,其中每个项目用分号分隔,然后将其放入数组中。到目前为止,我已经:

    Dim arrSIOCodes As Variant
    
    arrSIOCodes = Split(tbSIOCodes, ";")
    
    ThisWorkbook.Sheets("CAEATFA_SIO").Activate
    
    Call ChangeTableToArray(tbl:=ThisWorkbook.Sheets("CAEATFA_SIO").ListObjects("tblSIOCodes"), ar:=arrSIOCodes)
    

    我从另一个堆栈溢出帖子中得到了这个sub,但我需要根据我的问题进行自定义,我遇到了问题

    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
    

    当前代码正在执行以下操作: enter image description here

    然而,这就是我需要它做的:

    enter image description here

    2 回复  |  直到 7 年前
        1
  •  2
  •   YowE3K    7 年前

    您正在调整 但您只有一列(如果 Transpose 数组)来存储。因此,请执行以下操作:

    tbl.HeaderRowRange.Resize(newRows, 1).Offset (1).value = Application.Transpose(ar)
    
        2
  •  0
  •   K.Dᴀᴠɪs    7 年前

    我要参加一个很晚的会议,所以我很快就把它放在一起了,它还没有经过测试。但这只是另一种看待它的方式:

    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