在Excel中,为什么相同的脚本使用activex按钮运行较慢?能快点吗?

在Excel中,为什么相同的脚本使用activex按钮运行较慢?能快点吗?,excel,vba,Excel,Vba,我把这个宏放在一起,它只生成数据 Sub GenerateData() For curRow = 5 To 100 Step 1 For curCol = 1 To 40 Step 1 Cells(curRow, curCol).Value = curRow * curCol Next curCol Next curRow End Sub 当我将它分配给excel用户表单按钮时,它似乎会立即执行脚本,但是当我将它分配给ac

我把这个宏放在一起,它只生成数据

Sub GenerateData()
    For curRow = 5 To 100 Step 1
        For curCol = 1 To 40 Step 1
            Cells(curRow, curCol).Value = curRow * curCol
        Next curCol
    Next curRow
End Sub
当我将它分配给excel用户表单按钮时,它似乎会立即执行脚本,但是当我将它分配给activex按钮时,它的执行速度会让我的眼睛跟随

为什么脚本在ActiveX下运行速度较慢?使用ActiveX按钮,一个简单的O(mn)脚本能运行得更快吗


我可以通过循环展开来改进脚本,但这是必要的还是有其他方法可以加快它的速度?

一个可行的解决方案,不是像Scott建议的那样将其转换为一行语句,显然是在代码开始时将计算设置为xl manual,然后在代码结束时将其设置为automatic。这是因为每次更改单个单元格时,excel工作表都会重新计算整个工作表。所以,通过在脚本之前将其设置为手动,您告诉它等待重新计算,直到生成所有内容

Application.Calculation = xlCalculationManual

[code]

Application.Calculation = xlCalculationAutomatic

您可以用一行代码完成整个过程:
Range(“A5:AN100”)=[Index(Row(A5:AN100)*Column(A5:AN100),0)]
,无论如何调用,它几乎都是即时的。