Excel 非常慢的宏,没有它会更快吗?
我在寻找问题答案时发现了这个论坛。我在这里找到了解决方案: 我很抱歉没有对那篇文章发表评论,但我找不到这样做的选择。所以,我发布这个问题 我没有使用zip函数,只是创建CSV文件并排除一些工作表。如您所见,我也在执行一些查找/替换函数和刷新数据 它工作正常,但运行时间很长(1-1/2小时)。如果我删除保存功能,并手动保存每张工作表,它可以在几分钟内完成 什么使它陷入困境 下面的代码(很抱歉格式不好)Excel 非常慢的宏,没有它会更快吗?,excel,csv,vba,Excel,Csv,Vba,我在寻找问题答案时发现了这个论坛。我在这里找到了解决方案: 我很抱歉没有对那篇文章发表评论,但我找不到这样做的选择。所以,我发布这个问题 我没有使用zip函数,只是创建CSV文件并排除一些工作表。如您所见,我也在执行一些查找/替换函数和刷新数据 它工作正常,但运行时间很长(1-1/2小时)。如果我删除保存功能,并手动保存每张工作表,它可以在几分钟内完成 什么使它陷入困境 下面的代码(很抱歉格式不好) 子工作表_宏() “Category_Trail宏 '宏将类别跟踪分解为单个类别。仅在“工作表
子工作表_宏()
“Category_Trail宏
'宏将类别跟踪分解为单个类别。仅在“工作表”中使用
'
'
将ws设置为工作表
作为字符串的Dim strMain
变暗lngCalc尽可能长
strMain=“C:\Users\David Cox\Documents\TotalOutdoorsman\Site\Inventory\Daily Upload Files\”
'关闭计算
应用
.DisplayAlerts=False
.ScreenUpdate=False
lngCalc=.Calculation
.Calculation=xlCalculationManual
以
'更新所有数据
ActiveWorkbook.RefreshAll
'复制和粘贴类别并创建跟踪
工作表(“工作表”)。选择
范围(“Ah2:Ah20000”)。选择
选择,复制
范围(“Ai2”)。选择
Selection.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
Application.CutCopyMode=False
Selection.TextToColumns Destination:=范围(“Ai2”),数据类型:=xlDelimited_
TextQualifier:=xlDoubleQuote,continuedDelimiter:=False,Tab:=False_
分号:=False,逗号:=False,空格:=False,其他:=True,其他字符_
:=“/”,字段信息:=数组(数组(1,1),数组(2,1),数组(3,1),数组(4,1))_
TrailingMinusNumbers:=真
'清除描述宏
'宏将产品描述复制并粘贴到新列,然后清除其中的HTML代码。
'
'
范围(“AO2:AO20000”)。选择
选择,复制
范围(“AP2”)。选择
Selection.Paste特殊粘贴:=xlPasteValues,操作:=xlNone,SkipBlank_
:=假,转置:=假
Application.CutCopyMode=False
列(“AP:AP”)。选择
选择。替换内容:=“
”,替换:=”,查看:=xlPart_
SearchOrder:=xlByRows,MatchCase:=False,SearchFormat:=False_
ReplaceFormat:=False
选择。替换内容:=“”,替换:=”,查看:=xlPart_
SearchOrder:=xlByRows,MatchCase:=False,SearchFormat:=False_
ReplaceFormat:=False
'删除Appostrophies宏
工作表(“RSR库存”)。选择
列(“L:L”)。选择
范围(“L5743”)。激活
选择。替换内容:=“”,替换:=”,查看:=xlPart_
SearchOrder:=xlByRows,MatchCase:=False,SearchFormat:=False_
ReplaceFormat:=False
工作表(“Valor库存”)。选择
ActiveWindow.LargeScroll ToRight:=-1
列(“C:C”)。选择
选择。替换内容:=“”,替换:=”,查看:=xlPart_
SearchOrder:=xlByRows,MatchCase:=False,SearchFormat:=False_
ReplaceFormat:=False
'返回产品主页面
工作表(“MainProductPage”)。选择
"重新开启计算,
应用
.DisplayAlerts=True
.ScreenUpdate=True
.计算=lngCalc
以
'在创建CSV文件之前保存
此工作簿。保存
'关闭计算
应用
.DisplayAlerts=False
.ScreenUpdate=False
lngCalc=.Calculation
.Calculation=xlCalculationManual
以
'保存所有CSV文件
对于ActiveWorkbook.Worksheets中的每个ws
选择Case ws.Name
案例“进口产品数据”、“表2”、“表3”
“这些床单什么都不要做
其他情况
ws.SaveAs strMain&ws.Name,xlCSV
结束选择
下一个
"重新开启计算,
应用
.DisplayAlerts=True
.ScreenUpdate=True
.计算=lngCalc
以
端接头
尝试此代码(未测试)
我有
。选择,。大屏幕显示,以及使宏变慢的事件
应用程序设置时必须执行的操作
Sub Worksheet_Macro()
Dim ws As Worksheet
Dim strMain As String
Dim lngCalc As Long
On Error GoTo Whoa
strMain = "C:\Users\David Cox\Documents\TotalOutdoorsman\Site\Inventory\Daily Upload Files\"
With Application
.DisplayAlerts = False
.ScreenUpdating = False
lngCalc = .Calculation
.Calculation = xlCalculationManual
End With
With Sheets("Worksheet")
.Range("AH2:AH20000").Copy
With .Range("AI2")
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.TextToColumns Destination:=.Range("AI2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
TrailingMinusNumbers:=True
End With
.Range("AO2:AO20000").Copy
.Range("AP2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
With .Columns("AP:AP")
.Replace What:="<br>", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.Replace What:="</br>", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End With
End With
With Sheets("RSR Inventory")
.Columns("L:L").Replace What:="'", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End With
With Sheets("Valor Inventory")
.Columns("C:C").Replace What:="'", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End With
'~~> Save before creating CSV Files
ThisWorkbook.Save
'~~> Save all CSV files
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Name
Case "Imported Product Data", "Sheet 2", "Sheet 3"
'do nothing for these sheets
Case Else
ws.SaveAs strMain & ws.Name, xlCSV
End Select
Next
LetsContinue:
'~~> Reset Settings
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.Calculation = lngCalc
.CutCopyMode = False
End With
MsgBox "Done"
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
子工作表_宏()
将ws设置为工作表
作为字符串的Dim strMain
变暗lngCalc尽可能长
关于错误转到哇
strMain=“C:\Users\David Cox\Documents\TotalOutdoorsman\Site\Inventory\Daily Upload Files\”
应用
.DisplayAlerts=False
.ScreenUpdate=False
lngCalc=.Calculation
.Calculation=xlCalculationManual
以
带工作表(“工作表”)
.范围(“AH2:AH20000”)。副本
带.Range(“AI2”)
.Paste特殊粘贴:=xlPasteValues,操作:=xlNone_
SkipBlanks:=False,转置:=False
.TextToColumns目标:=.Range(“AI2”),数据类型:=xlDelimited_
TextQualifier:=xlDoubleQuote,continuedDelimiter:=False,Tab:=False_
分号:=False,逗号:=False,空格:=False,其他:=True,其他字符_
:=“/”,字段信息:=数组(数组(1,1),数组(2,1),数组(3,1),数组(4,1))_
TrailingMinusNumbers:=真
以
.范围(“AO2:AO20000”)。副本
.Range(“AP2”).Paste特殊粘贴:=xlPasteValues,操作:=xlNone_
SkipBlanks:=False,转置:=False
带.列(“AP:AP”)
.替换内容:=“
”,替换:=”,查看:=xlPart_
SearchOrder:=xlByRows,MatchCase:=False,SearchFormat:=False_
ReplaceFormat:=False
.替换内容:=“”,替换:=”,查看:=xlPart_
SearchOrder:=xlByRows,MatchCase:=False,SearchFormat:=False_
ReplaceFormat:=False
以
终点
Sub Worksheet_Macro()
Dim ws As Worksheet
Dim strMain As String
Dim lngCalc As Long
On Error GoTo Whoa
strMain = "C:\Users\David Cox\Documents\TotalOutdoorsman\Site\Inventory\Daily Upload Files\"
With Application
.DisplayAlerts = False
.ScreenUpdating = False
lngCalc = .Calculation
.Calculation = xlCalculationManual
End With
With Sheets("Worksheet")
.Range("AH2:AH20000").Copy
With .Range("AI2")
.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
.TextToColumns Destination:=.Range("AI2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
TrailingMinusNumbers:=True
End With
.Range("AO2:AO20000").Copy
.Range("AP2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
With .Columns("AP:AP")
.Replace What:="<br>", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
.Replace What:="</br>", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End With
End With
With Sheets("RSR Inventory")
.Columns("L:L").Replace What:="'", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End With
With Sheets("Valor Inventory")
.Columns("C:C").Replace What:="'", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End With
'~~> Save before creating CSV Files
ThisWorkbook.Save
'~~> Save all CSV files
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Name
Case "Imported Product Data", "Sheet 2", "Sheet 3"
'do nothing for these sheets
Case Else
ws.SaveAs strMain & ws.Name, xlCSV
End Select
Next
LetsContinue:
'~~> Reset Settings
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.Calculation = lngCalc
.CutCopyMode = False
End With
MsgBox "Done"
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
Sub Worksheet_Macro()
' Category_Trail Macro
' Macro breaks category trail down into individual categories. TO BE USED ONLY IN THE "WORKSHEET" SHEET
'
'
Dim counter As Integer 'declare variable
Dim fname As String
Dim fname1 As String
Dim fileext As String
Dim csvfname As String
Dim directory As String
directory = "C:\Files\"
' Turn off visual feedback to speed up process
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
'Update all Data
ActiveWorkbook.RefreshAll
Sheets("Worksheet").Select
Range("Ah2:Ah15000").Select
Selection.Copy
Range("Ai2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("Ai2"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
:="/", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
TrailingMinusNumbers:=True
' Clean_Description Macro
' Macro copies and pastes product descriptions to new column and then cleans them of HTML code.
'
'
Range("AO2:AO15000").Select
Selection.Copy
Range("AP2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Columns("AP:AP").Select
Selection.Replace What:="<br>", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="</br>", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
' Remove Appostrophies Macro
Sheets("RSR Inventory").Select
Columns("L:L").Select
Range("L5743").Activate
Selection.Replace What:="'", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Sheets("Valor Inventory").Select
ActiveWindow.LargeScroll ToRight:=-1
Columns("C:C").Select
Selection.Replace What:="'", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
' Go back to Main Product Page
Sheets("MainProductPage").Select
'Save all files
counter = 2 'initialize variable
Sheets("Save As Info").Select
Range("a2").Select '1st cell with file name
Do Until ActiveCell = ""
fname1 = Cells(counter, 1)
'this is set for column A
filext = Cells(counter, 2)
fname = directory & fname1 & fileext
csvfname = directory & fname1 & "CSV.csv"
Workbooks.Open Filename:=fname
ActiveWorkbook.SaveAs Filename:=csvfname, FileFormat:=xlCSV, CreateBackup:=False
'save as csv
ActiveWorkbook.Close SaveChanges:=False 'close csv
Windows("UpdateWorkbook.xlsm").Activate 'select workbook with file info
Sheets("Save As Info").Select 'select sheet with file info
counter = counter + 1
ActiveCell.Offset(1, 0).Range("a1").Select 'This moves down the column
Loop
'Turn on visual feedback
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
ActiveWorkbook.Close SaveChanges:=False 'close Excel File
End Sub