Excel 每次运行VBA宏时,启用宏的工作簿的文件大小是否会变大?
我使用具有以下代码的批处理文件:Excel 每次运行VBA宏时,启用宏的工作簿的文件大小是否会变大?,excel,vba,Excel,Vba,我使用具有以下代码的批处理文件: cscript DeleteDuplicateDataMacro.vbs "C:\Users\techadmin\Documents\DeleteDuplicateDataMacro\DeleteDuplicateDataMacro.xlsm 其中运行以下VBScript代码: Dim args, objExcel Set args = wScript.Arguments Set objExcel = CreateObject("Excel.Applicat
cscript DeleteDuplicateDataMacro.vbs "C:\Users\techadmin\Documents\DeleteDuplicateDataMacro\DeleteDuplicateDataMacro.xlsm
其中运行以下VBScript代码:
Dim args, objExcel
Set args = wScript.Arguments
Set objExcel = CreateObject("Excel.Application")
objExcel.Workbooks.Open args(0)
objExcel.Visible = True
ObjExcel.Run "DeleteDuplicateData"
objExcel.ActiveWorkbook.Save
objExcel.ActiveWorkbook.Close(0)
objExcel.Quit
打开启用宏的工作簿并运行以下宏:
Sub DeleteDuplicateData()
'
' DeleteDuplicateData Macro
'
'
Application.DisplayAlerts = False
**With ActiveSheet.QueryTables(1).Refresh _
.Connection = "TEXT;C:\Users\techadmin\Documents\Sapphire Report Agent\Sapphire_NK_Export.csv"**
'.CommandType = 0
.Name = "Sapphire_NK_Export"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
ActiveWindow.SmallScroll Down:=-9
ActiveSheet.Range("$A$1:$Q$2500").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17), Header:=xlYes
ActiveSheet.Range("$A$1:$Q$2500").RemoveDuplicates Columns:=17, Header:=xlYes
ChDir "C:\Users\techadmin\Documents\Sapphire Report Agent"
ActiveWorkbook.SaveAs Filename:="C:\Users\techadmin\Documents\Sapphire Report Agent\Sapphire_NK_Export", FileFormat:=xlCSV, CreateBackup:=False
ActiveCell.FormulaR1C1 = "STATE_STUDENT_ID"
Range("A1:Q2500").Select
Range("A1").Activate
Selection.ClearContents
Range("A1").Select
ChDir "C:\Users\techadmin\Documents\DeleteDuplicateDataMacro"
ActiveWorkbook.SaveAs Filename:="C:\Users\techadmin\Documents\DeleteDuplicateDataMacro\DeleteDuplicateDataMacro", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
每隔运行此序列几次,启用宏的工作簿的文件大小就会增大几千字节。这一数字呈指数增长。一旦它达到30000 KB的范围,我的另一个工作簿(在此宏期间导入的工作簿,然后编辑并保存回其原始位置)开始复制它的列。这是因为
With
需要使用一个对象(不需要双关语)而QueryTable.Refresh
不返回一个。您需要已经为
设置了连接。刷新才能工作。
我从代码和清理部分删除了添加新连接的操作。
如果您想在每次打开工作簿时添加新连接,您还应该在保存和关闭工作簿之前将其删除,但我不建议这样做,因为Excel文件往往会随着时间的推移而中断
Sub DeleteDuplicateData()
'
' DeleteDuplicateData Macro
'
Application.DisplayAlerts = False
Application.ScreenUpdating = False
ActiveSheet.QueryTables(1).Refresh BackgroundQuery:=False
Application.CalculateUntilAsyncQueriesDone
ActiveSheet.Range("$A$1:$Q$2500").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17), Header:=xlYes
ThisWorkbook.SaveAs Filename:="C:\Users\techadmin\Documents\Sapphire Report Agent\Sapphire_NK_Export", FileFormat:=xlCSV, CreateBackup:=False
' I assume A1 to be the ActiveCell, but it's still referring to the ActiveSheet
Range("A1").FormulaR1C1 = "STATE_STUDENT_ID"
ThisWorkbook.SaveAs Filename:="C:\Users\techadmin\Documents\DeleteDuplicateDataMacro\DeleteDuplicateDataMacro", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
请再次查看以了解如何避免使用Select、ACTIVE和implicit ActiveSheet引用。这是您的问题。因为这是我如何配置Excel的问题。答案在Excel的“帮助-加速保存文件”中。为什么要添加新连接而不是刷新它?我相信标记和可以删除。@Nacorid我实际上甚至没有添加WSH标记,所以我不确定它是如何出现的。我将删除cmd和vbscript标记。至于连接问题。我对VBA了解不多。我只是录制了一个宏作为基础,然后在录制后对它进行了一些修改。Excel在宏录制过程中使用了该选项。连接刷新的语法是什么?我在微软的网站上只看到Add和Item作为QueryTables对象的方法@马克,我相信你忽略了这个问题。