Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
Performance 简化代码,在12个工作表上同时快速执行功能_Performance_Excel_Excel 2007_Vba - Fatal编程技术网

Performance 简化代码,在12个工作表上同时快速执行功能

Performance 简化代码,在12个工作表上同时快速执行功能,performance,excel,excel-2007,vba,Performance,Excel,Excel 2007,Vba,我正在使用以下代码,该代码正在成功运行 Sub Button2_Click() Application.ScreenUpdating = False Dim rngMyRange As Range Dim cell As Range Sheets("Jan").Activate Sheets("Jan").Select Cells.Select Selection.EntireRow.Hidden = False Set rngMyRange = Range

我正在使用以下代码,该代码正在成功运行

Sub Button2_Click()

Application.ScreenUpdating = False

    Dim rngMyRange As Range
    Dim cell As Range

 Sheets("Jan").Activate
 Sheets("Jan").Select
 Cells.Select
 Selection.EntireRow.Hidden = False
    Set rngMyRange = Range("JanRangeTotal")
    For Each cell In rngMyRange.Cells
        cell.Select
        If cell.Value = "" Then GoTo DOTHETHING
    Next cell

DOTHETHING:
    Selection.Resize(1812).Select
    Selection.EntireRow.Hidden = True

    Sheets("Jan").Select
    Cells.Select
    Selection.Copy
    Sheets(Array("Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") _
        ).Select
    Sheets("Feb").Activate
    Cells.Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False

    Sheets(Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", _
        "Dec")).Select
    Sheets("Feb").Activate
    Range("C7").Select
    Sheets("PO to Complete").Select

Application.ScreenUpdating = True

End Sub
不幸的是,它需要大约15秒的时间来运行,并且已经打开了屏幕更新,这是消耗时间最多的大规模复制和粘贴练习。因此,我想把数组select放在代码的更高位置,这样它就可以对所有工作表进行设置,并且不需要将格式从一月复制粘贴到其他月份的所有工作表上。我想出了下面的代码:

Sub Button2_Click()

    Dim rngMyRange As Range
    Dim cell As Range

 Sheets("Jan").Activate
 Sheets("Jan").Select
 Cells.Select
 Selection.EntireRow.Hidden = False

    Set rngMyRange = Range("JanRangeTotal")
    Sheets(Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", _
    "Dec")).Select
    Sheets("Jan").Activate
    For Each cell In rngMyRange.Cells
        cell.Select
        If cell.Value = "" Then GoTo DOTHETHING
    Next cell

DOTHETHING:
    Selection.Resize(1812).Select
    Selection.EntireRow.Hidden = True
    Range("C7").Select
    Application.CutCopyMode = False

    Sheets("PO to Complete").Select

End Sub
但它不会在其他图纸上执行行隐藏命令。有没有办法让我的工作更快

干杯


扣篮

为什么要使用select命令?这很慢

我也不认为它是工作,因为你认为它是。我不认为可以通过跨图纸进行选择来隐藏行,这就是为什么这样做失败的原因

为什么不试着在每张纸上声明范围,并使用类似的方法在纸上循环

application.screenupdating = false
dim ws as worksheet

for each ws in thisworkbook.sheets
    ' Your Code here
next ws

使用声明的范围会更快。选择单元格没有意义,除非是为了视觉效果,我假设不是因为你正在关闭屏幕更新

谢谢提示!我在每个选项卡上声明了范围,并基本上为每个12个月的工作表重复了代码的第一部分。它现在在3秒内运行!