当按钮被按下时,我试图将所有表的现有范围扩大100行。
我想出了一些简单的代码,但是它确实很慢,并且由于某种原因,它没有以应有的方式用公式填充一行。
我是编码的新手,所以我将不胜感激任何建议。 编辑:我在运行代码后添加了公式的图片。
Sub ExtendRows()
Dim i As Long, j As Long, ws As Worksheet, oListRow As ListRow
Set ws = ActiveWorkbook.Worksheets("Holdbarhed")
Application.ScreenUpdating = False
For i = 1 To 100
For j = 1 To 10
Set oListRow = ws.ListObjects(j).ListRows.Add
Next j
Next i
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:1)
速度的问题是每次循环并添加一行确实非常慢,实际上添加1000行大约需要20秒!
与工作表的每次交互(添加行)都需要花费时间。但是,一次添加1行还是一次添加100行几乎需要花费相同的时间。因此,在不同的命令中添加每一行比在一个命令中添加100行要花费100倍的时间。
现在存在的问题是,列表对象表没有命令一次性添加一次。 但是您可以使用一种解决方法来减少交互的数量:
这将我的测试时间减少到0.8秒(10个表每100行添加一次)。 当然,此解决方法仅适用于在列表对象表的末尾添加 行。
Public Sub ExtendRowsSpeedyGonzales()
Const ROWS_TO_ADD As Long = 100 'amount of rows to add each table
Const TABLE_COUNT As Long = 10 'amount of tables
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("Holdbarhed")
Dim iTable As Long
For iTable = 1 To TABLE_COUNT
With ws.ListObjects(iTable)
Dim OldTableRange As Range
Set OldTableRange = .Range 'remember original size of table
'add rows BELOW table
.Range.Offset(RowOffset:=.Range.Rows.Count).Resize(RowSize:=ROWS_TO_ADD).Insert Shift:=xlDown
'resize table
.Resize OldTableRange.Resize(RowSize:=.Range.Rows.Count + ROWS_TO_ADD)
End With
Next iTable
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
答案 1 :(得分:0)