如何加速Excel计算

时间:2014-11-03 03:46:36

标签: excel vba excel-vba access-vba

对于vba编程我是一个非常新手,因此无法找到/找出解决问题的方法。

我有一个vba脚本,它通过访问表单(下面的摘录)中的按钮运行,该按钮在excel中进行计算,大约有30,000条记录(清单列表工作表)。除此之外," Data1"工作表有1,000,000条记录和" Data2"工作表有大约100,000条记录。计算检查了多少条信息a" tag"需要以及"标记"以及多少条信息。目前在我们的数据库中,并计算完整性的十进制值。

这一切都导致计算时100%的CPU使用率。我想知道是否有人会对如何改进计算有一些指示,以提高其运行速度?

提前致谢。

Private Sub BUILD_INVENTORY_LIST_Click()
DoCmd.SetWarnings False

'Note: DTable is a variable entered earlier in the coding
Dim strWorksheetPathTable As String
    strWorksheetPathTable = "O:\GData\POC\DataMgmt\Reports\" & DTable & "\" & DTable & ".xls"

Dim xlApp As Object
Dim xlWB As Object
Dim oBook As Excel.Workbook
Dim InventoryListSheet As Excel.Worksheet

Set xlApp = CreateObject("Excel.Application")    
Set xlWB = xlApp.Workbooks.Open("" & strWorksheetPathTable & "")
Set oBook = GetObject("" & strWorksheetPathTable & "")
Set InventoryListSheet = oBook.Sheets("InventoryList")

Dim NumberofTags As String
NumberofTags = ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count

If Len(Sheets("Data1").Name) > 0 Then
    With xlWB
        With InventoryListSheet
        .Range("O2").Formula = "=(COUNTIFS(Data1!A:A,A2,Data1!G:G,""Y"",Data1!E:E,""<>"")/(COUNTIFS(Data1!A:A,A2,Data1!G:G,""Y"")))"
        .Range("O2:O" & NumberofTags & "").FillDown
        End With
    End With
End If

If Len(Sheets("Data2").Name) > 0 Then
    With xlWB
        With InventoryListSheet
        .Range("P2").Formula = "=(COUNTIFS(Data2!A:A,A2,Data2!G:G,""Y"",Data2!E:E,""<>"")/(COUNTIFS(Data2!A:A,A2,Data2!G:G,""Y"")))"
        .Range("P2:P" & NumberofTags & "").FillDown
        End With
    End With
End If

xlWB.Save
xlWB.Close
DoCmd.SetWarnings True

End Sub

1 个答案:

答案 0 :(得分:0)