执行宏后,excel的内存使用率(RAM)仍然很高

时间:2019-03-24 21:42:55

标签: excel vba ram

该主题在网络上不是新话题,但尚未真正记录。

我有一个带有2个事件(宏)的Excel文档,该事件在执行后会不断降低我的Excel速度,吞噬多达7GB或RAM(共16个)。疯了吧。到目前为止,我发现重置内存的唯一解决方案是重新打开文档(开始时使用约150MB的内存)。

这是1mn video,显示第一个事件后我的任务管理器中内存使用的奇怪行为(请参见下面的详细信息)。当我运行第二个宏(视频中大约30秒)时,内存几乎重置,但是在宏完成后,即使工作簿上未执行任何操作,内存也越来越高。

•第一个事件是手动全部刷新。我的文档包含36个 connection 查询以及7个转换步骤(每个查询都链接到一个表),最后一个查询将它们全部合并到一个源表中,该源表链接到数据透视表和图表。它运行平稳,但将RAM从150MB阻塞到4GB,即使刷新仅需2秒。

•第二个查询是csv导入,并将一些数据复制/粘贴到一个表中。即使宏在2秒钟内运行,这也会使ram更高(6 / 7GB)。每次我重新运行该宏时,RAM都会重置为600MB,然后再爬回7GB,即使什么也没有发生。

此宏的代码在过程结束时删除了查询和在其中导入了csv的工作表,另外,如果剪贴板负责,我还尝试了“ Application.CutCopyMode = False”。但是不,它比那还要大。

这是第二个宏的代码(请记住,我是VBA的新手):

Sub importcsvdata()
Dim ActWks As Worksheet
Set ActWks = ActiveSheet
sPath = Application.GetOpenFilename()
On Error Resume Next
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    With ThisWorkbook
        .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = "tempo-csv"
    End With
    Application.ScreenUpdating = False
    ActiveWorkbook.Queries.Add Name:="tempo-csv", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Source = Csv.Document(File.Contents(""" & sPath & """),[Delimiter="","", Columns=68, Encoding=1252, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    #""Promoted Headers"" = Table.PromoteHeaders(Source)," & Chr(13) & "" & Chr(10) & "    #""Changed Type"" = Table.TransformColumnTypes(#""Promoted Headers"",{{""Name"", type text}, {""Email""" & _
        ", type text}, {""Financial Status"", type text}, {""Paid at"", type datetimezone}, {""Fulfillment Status"", type text}, {""Fulfilled at"", type datetimezone}, {""Accepts Marketing"", type text}, {""Currency"", type text}, {""Subtotal"", type text}, {""Shipping"", type text}, {""Taxes"", type text}, {""Total"", type text}, {""Discount Code"", type text}, {""Discount " & _
        "Amount"", type text}, {""Shipping Method"", type text}, {""Created at"", type datetimezone}, {""Lineitem quantity"", Int64.Type}, {""Lineitem name"", type text}, {""Lineitem price"", type text}, {""Lineitem compare at price"", type text}, {""Lineitem sku"", type text}, {""Lineitem requires shipping"", type logical}, {""Lineitem taxable"", type logical}, {""Lineitem " & _
        "fulfillment status"", type text}, {""Billing Name"", type text}, {""Billing Street"", type text}, {""Billing Address1"", type text}, {""Billing Address2"", type text}, {""Billing Company"", type text}, {""Billing City"", type text}, {""Billing Zip"", type text}, {""Billing Province"", type text}, {""Billing Country"", type text}, {""Billing Phone"", Int64.Type}, {""" & _
        "Shipping Name"", type text}, {""Shipping Street"", type text}, {""Shipping Address1"", type text}, {""Shipping Address2"", type text}, {""Shipping Company"", type text}, {""Shipping City"", type text}, {""Shipping Zip"", type text}, {""Shipping Province"", type text}, {""Shipping Country"", type text}, {""Shipping Phone"", Int64.Type}, {""Notes"", type text}, {""Not" & _
        "e Attributes"", type text}, {""Cancelled at"", type text}, {""Payment Method"", type text}, {""Payment Reference"", type text}, {""Refunded Amount"", type text}, {""Vendor"", type text}, {""Id"", Int64.Type}, {""Tags"", type text}, {""Risk Level"", type text}, {""Source"", type text}, {""Lineitem discount"", type text}, {""Tax 1 Name"", type text}, {""Tax 1 Value""," & _
        " type text}, {""Tax 2 Name"", type text}, {""Tax 2 Value"", type text}, {""Tax 3 Name"", type text}, {""Tax 3 Value"", type text}, {""Tax 4 Name"", type text}, {""Tax 4 Value"", type text}, {""Tax 5 Name"", type text}, {""Tax 5 Value"", type text}, {""Phone"", Int64.Type}, {""Receipt Number"", type text}})," & Chr(13) & "" & Chr(10) & "    #""Extracted Date"" = Table.TransformColumns(#""Change" & _
        "d Type"",{{""Paid at"", DateTime.Date}})," & Chr(13) & "" & Chr(10) & "    #""Sorted Rows"" = Table.Sort(#""Extracted Date"",{{""Paid at"", Order.Ascending}})," & Chr(13) & "" & Chr(10) & "    #""Replaced Value"" = Table.ReplaceValue(#""Sorted Rows"",""."","","",Replacer.ReplaceText,{""Total""})," & Chr(13) & "" & Chr(10) & "    #""Changed Type1"" = Table.TransformColumnTypes(#""Replaced Value"",{{""Total"", Currency.Type}})," & Chr(13) & "" & Chr(10) & "    #""Added Conditio" & _
        "nal Column"" = Table.AddColumn(#""Changed Type1"", ""Custom"", each if Text.Contains([Payment Method], ""PayPal"") then ""PayPal"" else if Text.Contains([Payment Method], ""Stripe"") then ""Stripe"" else null )" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Added Conditional Column"""
    Application.ScreenUpdating = False
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""tempo-csv""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = Array("SELECT * FROM [tempo-csv]")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = False
        .ListObject.DisplayName = "tempo_table"
        .Refresh BackgroundQuery:=False
    End With
    ActWks.Activate
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    If ActiveSheet.Name = "Janvier" Then
        ActiveSheet.ListObjects("Recettes_janvier").ListRows.Add alwaysinsert:=True
        Worksheets("tempo-csv").Range("tempo_table[Paid at]").Copy
        Worksheets("janvier").Range("Recettes_janvier[Date de commande]").End(Excel.xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Name]").Copy
        Worksheets("janvier").Range("Recettes_janvier[N° de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Billing Name]").Copy
        Worksheets("janvier").Range("Recettes_janvier[Client]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Vendor]").Copy
        Worksheets("janvier").Range("Recettes_janvier[Type]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Total]").Copy
        Worksheets("janvier").Range("Recettes_janvier[Montant]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Custom]").Copy
        Worksheets("janvier").Range("Recettes_janvier[Paiement]").Find("").PasteSpecial Paste:=xlPasteValues
    ElseIf ActiveSheet.Name = "Février" Then
        ActiveSheet.ListObjects("Recettes_février").ListRows.Add alwaysinsert:=True
        Worksheets("tempo-csv").Range("tempo_table[Paid at]").Copy
        Worksheets("février").Range("Recettes_février[Date de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Name]").Copy
        Worksheets("février").Range("Recettes_février[N° de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Billing Name]").Copy
        Worksheets("février").Range("Recettes_février[Client]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Vendor]").Copy
        Worksheets("février").Range("Recettes_février[Type]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Total]").Copy
        Worksheets("février").Range("Recettes_février[Montant]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Custom]").Copy
        Worksheets("février").Range("Recettes_février[Paiement]").Find("").PasteSpecial Paste:=xlPasteValues
    ElseIf ActiveSheet.Name = "Mars" Then
        ActiveSheet.ListObjects("Recettes_mars").ListRows.Add alwaysinsert:=True
        Worksheets("tempo-csv").Range("tempo_table[Paid at]").Copy
        Worksheets("mars").Range("B14:B1500").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Name]").Copy
        Worksheets("mars").Range("C14:C1500").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Billing Name]").Copy
        Worksheets("mars").Range("D14:D1500").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Vendor]").Copy
        Worksheets("mars").Range("E14:E1500").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Total]").Copy
        Worksheets("mars").Range("F14:F1500").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Custom]").Copy
        Worksheets("mars").Range("G14:G1500").Find("").PasteSpecial Paste:=xlPasteValues
    ElseIf ActiveSheet.Name = "Avril" Then
        ActiveSheet.ListObjects("Recettes_avril").ListRows.Add alwaysinsert:=True
        Worksheets("tempo-csv").Range("tempo_table[Paid at]").Copy
        Worksheets("avril").Range("Recettes_avril[Date de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Name]").Copy
        Worksheets("avril").Range("Recettes_avril[N° de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Billing Name]").Copy
        Worksheets("avril").Range("Recettes_avril[Client]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Vendor]").Copy
        Worksheets("avril").Range("Recettes_avril[Type]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Total]").Copy
        Worksheets("avril").Range("Recettes_avril[Montant]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Custom]").Copy
        Worksheets("avril").Range("Recettes_avril[Paiement]").Find("").PasteSpecial Paste:=xlPasteValues
    ElseIf ActiveSheet.Name = "Mai" Then
        ActiveSheet.ListObjects("Recettes_mai").ListRows.Add alwaysinsert:=True
        Worksheets("tempo-csv").Range("tempo_table[Paid at]").Copy
        Worksheets("mai").Range("Recettes_mai[Date de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Name]").Copy
        Worksheets("mai").Range("Recettes_mai[N° de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Billing Name]").Copy
        Worksheets("mai").Range("Recettes_mai[Client]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Vendor]").Copy
        Worksheets("mai").Range("Recettes_mai[Type]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Total]").Copy
        Worksheets("mai").Range("Recettes_mai[Montant]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Custom]").Copy
        Worksheets("mai").Range("Recettes_mai[Paiement]").Find("").PasteSpecial Paste:=xlPasteValues
    ElseIf ActiveSheet.Name = "Juin" Then
        ActiveSheet.ListObjects("Recettes_juin").ListRows.Add alwaysinsert:=True
        Worksheets("tempo-csv").Range("tempo_table[Paid at]").Copy
        Worksheets("juin").Range("Recettes_juin[Date de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Name]").Copy
        Worksheets("juin").Range("Recettes_juin[N° de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Billing Name]").Copy
        Worksheets("juin").Range("Recettes_juin[Client]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Vendor]").Copy
        Worksheets("juin").Range("Recettes_juin[Type]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Total]").Copy
        Worksheets("juin").Range("Recettes_juin[Montant]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Custom]").Copy
        Worksheets("juin").Range("Recettes_juin[Paiement]").Find("").PasteSpecial Paste:=xlPasteValues
    ElseIf ActiveSheet.Name = "Juillet" Then
        ActiveSheet.ListObjects("Recettes_juillet").ListRows.Add alwaysinsert:=True
        Worksheets("tempo-csv").Range("tempo_table[Paid at]").Copy
        Worksheets("juillet").Range("Recettes_juillet[Date de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Name]").Copy
        Worksheets("juillet").Range("Recettes_juillet[N° de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Billing Name]").Copy
        Worksheets("juillet").Range("Recettes_juillet[Client]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Vendor]").Copy
        Worksheets("juillet").Range("Recettes_juillet[Type]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Total]").Copy
        Worksheets("juillet").Range("Recettes_juillet[Montant]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Custom]").Copy
        Worksheets("juillet").Range("Recettes_juillet[Paiement]").Find("").PasteSpecial Paste:=xlPasteValues
    ElseIf ActiveSheet.Name = "Août" Then
        ActiveSheet.ListObjects("Recettes_août").ListRows.Add alwaysinsert:=True
        Worksheets("tempo-csv").Range("tempo_table[Paid at]").Copy
        Worksheets("août").Range("Recettes_août[Date de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Name]").Copy
        Worksheets("août").Range("Recettes_août[N° de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Billing Name]").Copy
        Worksheets("août").Range("Recettes_août[Client]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Vendor]").Copy
        Worksheets("août").Range("Recettes_août[Type]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Total]").Copy
        Worksheets("août").Range("Recettes_août[Montant]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Custom]").Copy
        Worksheets("août").Range("Recettes_août[Paiement]").Find("").PasteSpecial Paste:=xlPasteValues
    ElseIf ActiveSheet.Name = "Septembre" Then
        ActiveSheet.ListObjects("Recettes_septembre").ListRows.Add alwaysinsert:=True
        Worksheets("tempo-csv").Range("tempo_table[Paid at]").Copy
        Worksheets("septembre").Range("Recettes_septembre[Date de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Name]").Copy
        Worksheets("septembre").Range("Recettes_septembre[N° de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Billing Name]").Copy
        Worksheets("septembre").Range("Recettes_septembre[Client]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Vendor]").Copy
        Worksheets("septembre").Range("Recettes_septembre[Type]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Total]").Copy
        Worksheets("septembre").Range("Recettes_septembre[Montant]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Custom]").Copy
        Worksheets("septembre").Range("Recettes_septembre[Paiement]").Find("").PasteSpecial Paste:=xlPasteValues
    ElseIf ActiveSheet.Name = "Octobre" Then
        ActiveSheet.ListObjects("Recettes_octobre").ListRows.Add alwaysinsert:=True
        Worksheets("tempo-csv").Range("tempo_table[Paid at]").Copy
        Worksheets("octobre").Range("Recettes_octobre[Date de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Name]").Copy
        Worksheets("octobre").Range("Recettes_octobre[N° de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Billing Name]").Copy
        Worksheets("octobre").Range("Recettes_octobre[Client]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Vendor]").Copy
        Worksheets("octobre").Range("Recettes_octobre[Type]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Total]").Copy
        Worksheets("octobre").Range("Recettes_octobre[Montant]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Custom]").Copy
        Worksheets("octobre").Range("Recettes_octobre[Paiement]").Find("").PasteSpecial Paste:=xlPasteValues
    ElseIf ActiveSheet.Name = "Novembre" Then
        ActiveSheet.ListObjects("Recettes_novembre").ListRows.Add alwaysinsert:=True
        Worksheets("tempo-csv").Range("tempo_table[Paid at]").Copy
        Worksheets("novembre").Range("Recettes_novembre[Date de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Name]").Copy
        Worksheets("novembre").Range("Recettes_novembre[N° de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Billing Name]").Copy
        Worksheets("novembre").Range("Recettes_novembre[Client]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Vendor]").Copy
        Worksheets("novembre").Range("Recettes_novembre[Type]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Total]").Copy
        Worksheets("novembre").Range("Recettes_novembre[Montant]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Custom]").Copy
        Worksheets("novembre").Range("Recettes_novembre[Paiement]").Find("").PasteSpecial Paste:=xlPasteValues
    ElseIf ActiveSheet.Name = "Décembre" Then
        ActiveSheet.ListObjects("Recettes_décembre").ListRows.Add alwaysinsert:=True
        Worksheets("tempo-csv").Range("tempo_table[Paid at]").Copy
        Worksheets("décembre").Range("Recettes_décembre[Date de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Name]").Copy
        Worksheets("décembre").Range("Recettes_décembre[N° de commande]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Billing Name]").Copy
        Worksheets("décembre").Range("Recettes_décembre[Client]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Vendor]").Copy
        Worksheets("décembre").Range("Recettes_décembre[Type]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Total]").Copy
        Worksheets("décembre").Range("Recettes_décembre[Montant]").Find("").PasteSpecial Paste:=xlPasteValues
        Worksheets("tempo-csv").Range("tempo_table[Custom]").Copy
        Worksheets("décembre").Range("Recettes_décembre[Paiement]").Find("").PasteSpecial Paste:=xlPasteValues
    Else:
    End If
    Sheets("tempo-csv").Delete
    ActiveWorkbook.Queries("tempo-csv").Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Application.CutCopyMode = False
    Application.EnableEvents = True
End Sub

什么可以帮助解决此内存问题?我找不到重置内存使用的方法。此外,我什至不知道问题出在哪里。

0 个答案:

没有答案