Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 非常慢的宏,没有它会更快吗?_Excel_Csv_Vba - Fatal编程技术网

Excel 非常慢的宏,没有它会更快吗?

Excel 非常慢的宏,没有它会更快吗?,excel,csv,vba,Excel,Csv,Vba,我在寻找问题答案时发现了这个论坛。我在这里找到了解决方案: 我很抱歉没有对那篇文章发表评论,但我找不到这样做的选择。所以,我发布这个问题 我没有使用zip函数,只是创建CSV文件并排除一些工作表。如您所见,我也在执行一些查找/替换函数和刷新数据 它工作正常,但运行时间很长(1-1/2小时)。如果我删除保存功能,并手动保存每张工作表,它可以在几分钟内完成 什么使它陷入困境 下面的代码(很抱歉格式不好) 子工作表_宏() “Category_Trail宏 '宏将类别跟踪分解为单个类别。仅在“工作表

我在寻找问题答案时发现了这个论坛。我在这里找到了解决方案:

我很抱歉没有对那篇文章发表评论,但我找不到这样做的选择。所以,我发布这个问题

我没有使用zip函数,只是创建CSV文件并排除一些工作表。如您所见,我也在执行一些查找/替换函数和刷新数据

它工作正常,但运行时间很长(1-1/2小时)。如果我删除保存功能,并手动保存每张工作表,它可以在几分钟内完成

什么使它陷入困境

下面的代码(很抱歉格式不好)

子工作表_宏()
“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