Excel 将数组的每个值作为新行添加到ListObject
我试图通过测试奇数位代码和解构它的工作原理来扩展我对VBA的知识 我正在尝试更好地使用数组,并对它们有更多的了解,因为我认为它们有很多实际用途,但现在我在尝试将其与ListObject结合使用时遇到了困难 我已经创建了下面的宏。它成功地填充数组,然后将内容放入工作表中 但是,我遇到的问题是,我希望向数组中添加值,然后将这些值添加到表(列出对象)中,同时保留其中的现有数据。目前,这只是将数据添加到表的顶部,并覆盖任何现有内容。我已经尝试过使用许多不同的方法来添加一个列表行,但是它只将数组中的第一个值放在表中,而不是整个值 我想创建一个新行,添加数据,对于每一段数据,还要为该行中的一列设置另一个值,然后继续 例如,我希望代码执行以下操作:Excel 将数组的每个值作为新行添加到ListObject,excel,vba,Excel,Vba,我试图通过测试奇数位代码和解构它的工作原理来扩展我对VBA的知识 我正在尝试更好地使用数组,并对它们有更多的了解,因为我认为它们有很多实际用途,但现在我在尝试将其与ListObject结合使用时遇到了困难 我已经创建了下面的宏。它成功地填充数组,然后将内容放入工作表中 但是,我遇到的问题是,我希望向数组中添加值,然后将这些值添加到表(列出对象)中,同时保留其中的现有数据。目前,这只是将数据添加到表的顶部,并覆盖任何现有内容。我已经尝试过使用许多不同的方法来添加一个列表行,但是它只将数组中的第一个
Search for criteria in Table named PRODUCT
Criteria = "Monthly"
Add all the items in column 3 to an array
Put the content of the array in another table called TRACKER.
For every record put in, set the column called Job Type to STANDARD.
到目前为止,这就是我在下面所做的。它是一个静态数组,因此在我计算它时,我更容易使用它。然而,实际上,我将通过过滤listobject,然后将第3列中的所有值添加到数组中,从工作表中获取数组的内容
Sub ArrayExercise_3()
Dim myArray(1 To 5) As Integer
Dim i As Integer
Dim arrTable As ListObject
Dim arrRow As ListRow
Set arrTable = ThisWorkbook.Worksheets("Array2").ListObjects("Table7")
Set arrRow = arrTable.ListRows.Add
myArray(1) = 10
myArray(2) = 20
myArray(3) = 30
myArray(4) = 40
myArray(5) = 50
For i = 1 To UBound(myArray)
arrTable.DataBodyRange.Cells(i, 1) = myArray(i)
arrTable.DataBodyRange.Cells(i, 2) = "TEST"
Next i
End Sub
你可以这样做。您需要为每个数组元素添加新行,以便将其放入循环中。不过我怀疑你可以不用一个循环就做到这一点
Sub ArrayExercise_3()
Dim myArray(1 To 5) As Integer
Dim i As Integer
Dim arrTable As ListObject
Dim arrRow As ListRow
Set arrTable = ThisWorkbook.Worksheets("Array2").ListObjects("Table7")
myArray(1) = 10
myArray(2) = 20
myArray(3) = 30
myArray(4) = 40
myArray(5) = 50
For i = 1 To UBound(myArray)
arrTable.ListRows.Add
With arrTable.DataBodyRange
.Cells(.Rows.Count, 1).Value = myArray(i)
.Cells(.Rows.Count, 2) = "TEST"
End With
Next i
End Sub
你可以这样做。您需要为每个数组元素添加新行,以便将其放入循环中。不过我怀疑你可以不用一个循环就做到这一点
Sub ArrayExercise_3()
Dim myArray(1 To 5) As Integer
Dim i As Integer
Dim arrTable As ListObject
Dim arrRow As ListRow
Set arrTable = ThisWorkbook.Worksheets("Array2").ListObjects("Table7")
myArray(1) = 10
myArray(2) = 20
myArray(3) = 30
myArray(4) = 40
myArray(5) = 50
For i = 1 To UBound(myArray)
arrTable.ListRows.Add
With arrTable.DataBodyRange
.Cells(.Rows.Count, 1).Value = myArray(i)
.Cells(.Rows.Count, 2) = "TEST"
End With
Next i
End Sub
您应该在循环中添加行,如下所示:
For i = 1 To UBound(myArray)
Set arrRow = arrTable.ListRows.Add
arrRow.Range(1, 1) = myArray(i)
arrRow.Range(1, 2) = "TEST"
Next i
您应该在循环中添加行,如下所示:
For i = 1 To UBound(myArray)
Set arrRow = arrTable.ListRows.Add
arrRow.Range(1, 1) = myArray(i)
arrRow.Range(1, 2) = "TEST"
Next i
首先,应该在循环中移动ListObject的扩展,以便为每个数组元素插入新行 其次,数组和ListObject的索引不同 第三,如果你写UBound,最好也写LBound
Sub ArrayExercise_3()
Dim myArray(1 To 5) As Integer
Dim i As Integer
Dim arrTable As ListObject
Dim arrRow As ListRow
Set arrTable = ThisWorkbook.Worksheets("Array2").ListObjects("Table7")
myArray(1) = 10
myArray(2) = 20
myArray(3) = 30
myArray(4) = 40
myArray(5) = 50
For i = LBound(myArray) To UBound(myArray)
Set arrRow = arrTable.ListRows.Add
arrTable.DataBodyRange.Cells(arrTable.DataBodyRange.Rows.Count, 1).Value = myArray(i)
arrTable.DataBodyRange.Cells(arrTable.DataBodyRange.Rows.Count, 2).Value = "TEST"
Next i
End Sub
我没有测试上面的代码,但它应该可以工作,或者至少显示了这个想法。它没有针对速度进行优化(同时插入所有值必须更快),但遵循原始代码的逻辑。首先,应将ListObject的扩展移动到循环中,以便为每个数组元素插入新行 其次,数组和ListObject的索引不同 第三,如果你写UBound,最好也写LBound
Sub ArrayExercise_3()
Dim myArray(1 To 5) As Integer
Dim i As Integer
Dim arrTable As ListObject
Dim arrRow As ListRow
Set arrTable = ThisWorkbook.Worksheets("Array2").ListObjects("Table7")
myArray(1) = 10
myArray(2) = 20
myArray(3) = 30
myArray(4) = 40
myArray(5) = 50
For i = LBound(myArray) To UBound(myArray)
Set arrRow = arrTable.ListRows.Add
arrTable.DataBodyRange.Cells(arrTable.DataBodyRange.Rows.Count, 1).Value = myArray(i)
arrTable.DataBodyRange.Cells(arrTable.DataBodyRange.Rows.Count, 2).Value = "TEST"
Next i
End Sub
我没有测试上面的代码,但它应该可以工作,或者至少显示了这个想法。它没有针对速度进行优化(同时插入所有值必须更快),但遵循原始代码的逻辑。在添加行时,我避免使用
ListObject.DataBodyRange
。如果表中没有行,则ListObject.DataBodyRange=Nothing
。使用ListObject.ListRows.Add.Range
更简单,它将始终返回一个Range对象
Sub Demo()
Dim myArray(1 To 5) As Integer
myArray(1) = 10
myArray(2) = 20
myArray(3) = 30
myArray(4) = 40
myArray(5) = 50
Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects(1)
rowCount = tbl.ListRows.Count
tbl.ListRows.Add.Range.Resize(UBound(myArray) + 1, 1).Value = myArray
End Sub
我避免在添加行时使用
ListObject.DataBodyRange
。如果表中没有行,则ListObject.DataBodyRange=Nothing
。使用ListObject.ListRows.Add.Range
更简单,它将始终返回一个Range对象
Sub Demo()
Dim myArray(1 To 5) As Integer
myArray(1) = 10
myArray(2) = 20
myArray(3) = 30
myArray(4) = 40
myArray(5) = 50
Dim tbl As ListObject
Set tbl = ActiveSheet.ListObjects(1)
rowCount = tbl.ListRows.Count
tbl.ListRows.Add.Range.Resize(UBound(myArray) + 1, 1).Value = myArray
End Sub