返回列表 上一主題 發帖

[發問] 不同的sheet相同的動作,如何讓它一次性完成?

回復 41# oobird
Dear,
可是真的都跑得很慢,是原來的好幾倍時間呢!我也很不了解為什麼改為AA:AL會變成這樣?明明需要變成值的範圍變小了呀!

TOP

回復 42# PJChen
造成龜速有可能是公式重算結果
在城市開始先關閉自動重算
Application.Calculation = xlCalculationManual
到程序退出前再開啟自動重算
Application.Calculation = xlCalculationAutomatic
學海無涯_不恥下問

TOP

回復 43# Hsieh
版大,
按您說的是否改成以下這樣,結果還是相同,我用碼表計時,每RUN一個工作表約17~20秒,這是指第一段程式,第二段程式則是舜間就完成了,或者可否請有興趣的人都幫忙看一下,這二段段程式有沒有什麼差別?還可以怎麼改?
真對不起啦!我看到這個速度簡直...
  1. Sub Try_2()
  2.    Workbooks("2012 BCMart Chart.xlsx").Activate
  3.    Application.Calculation = xlCalculationManual
  4.    For s = 5 To 10 '從第某個工作表執行至第某個
  5.    Sheets(s).Activate
  6.    Set sh = ActiveSheet
  7.    n = sh.[al10000].End(3).Row '(AL欄有資料的最後列)這裡可以改成妳的資料中最齊的一欄
  8.             sh.[aa:al] = sh.[aa:al].Value  '把公式結果變成值
  9.             sh.AutoFilterMode = False     '取消自動篩選
  10.             sh.[a4:ad4].AutoFilter    '建立自動篩
  11.     Next    '下一個工作表
  12.     Application.Calculation = xlCalculationManual
  13.     ActiveWorkbook.Save

  14.     Workbooks("2012 BCMart Chart.xlsx").Activate
  15.    For s = 5 To 10 '從第某個工作表執行至第某個
  16.    Sheets(s).Activate
  17.    Set sh = ActiveSheet
  18.             n = sh.[AC1000].End(3).Row    'ac欄最後儲存格列號
  19.             sh.Sort.SortFields.Clear    '清除重建排序條件
  20.             Ar = Array("ac", "u", "r", "s", "t", "q", "c", "d")
  21.             For i = 0 To UBound(Ar)
  22.                 sh.Sort.SortFields.Add Key:=sh.Range(Ar(i) & "5:" & Ar(i) & n)
  23.             Next
  24.             With sh.Sort    '對指定範圍以指定條件排序
  25.                 .SetRange sh.Range("A5:AD" & n)
  26.                 .Header = xlNo
  27.                 .MatchCase = False
  28.                 .Orientation = xlTopToBottom
  29.                 .SortMethod = xlPinYin
  30.                 .Apply
  31.             End With
  32.     Next    '下一個工作表
  33.     ActiveWorkbook.SaveAs "P:\BCMart Chart\2012 BCMart Chart-sorted.xlsx"
  34.    
  35. End Sub
複製代碼

TOP

Sub Try_2()
   Workbooks("2012 BCMart Chart.xlsx").Activate
   Application.Calculation = xlCalculationManual
   For s = 5 To 10 '從第某個工作表執行至第某個
   Sheets(s).Activate
   Set sh = ActiveSheet
   n = sh.[al10000].End(3).Row '(AL欄有資料的最後列)這裡可以改成妳的資料中最齊的一欄
            sh.[aa5].Resize(n, 12) = sh.[aa5].Resize(n, 12).Value  '把公式結果變成值
            sh.AutoFilterMode = False     '取消自動篩選
            sh.[a4:ad4].AutoFilter    '建立自動篩
    Next    '下一個工作表
    Application.Calculation = xlCalculationManual
    ActiveWorkbook.Save

TOP

回復 45# oobird
回復 43# Hsieh
報告 二位版主,
經過昨天oobird版主的提點,現在程式執行速度完全正常,感謝多日來不辭辛勞幫我解決問題.

TOP

        靜思自在 : 地上種了菜,就不易長草;心中有善,就不易生惡。
返回列表 上一主題