该主题在网络上不是新话题,但尚未真正记录。
我有一个带有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
什么可以帮助解决此内存问题?我找不到重置内存使用的方法。此外,我什至不知道问题出在哪里。