返回列表 上一主題 發帖

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

回復 30# oobird
大師,
救命,我原先的需求是將動作1: AA:AL      的範圍變成值(就是將公式去除)
但我發現這個寫將整個工作表所有內容都變成值,而且變成值之後,原來格式都變成怪怪的日期格式.(如附件,蔩色底的標註),
EX.zip (20.96 KB)
以下巨集該如何修改成只將AA:AL有資料的範圍變成值?
  1.    Workbooks("2012 BCMart Chart.xlsx").Activate
  2.    For s = 5 To 10 '從第某個工作表執行至第某個
  3.    Sheets(s).Activate
  4.    Set Sh = ActiveSheet
  5.             Sh.UsedRange = Sh.UsedRange.Value    '把公式結果變成值
  6.             Sh.AutoFilterMode = False     '取消自動篩選
  7.             Sh.[a4:ad4].AutoFilter    '建立自動篩
  8.     Next    '下一個工作表
複製代碼

TOP

Sh.UsedRange = Sh.UsedRange.Value
改為
Sh.[aa:al] = Sh.[aa:al].Value

TOP

回復 33# oobird
大師,
程式改成這樣是不會將其它的儲存格有公式的地方變成值,但也出現了可怕的"龜速",以前全部儲存格一起作業非常快速的,現在是一個個sheet.."龜速"作業,這點能夠改善嗎?  

TOP

  1. Workbooks("2012 samples Chart.xlsx").Activate
  2.    For s = 2 To 7 '從2nd的工作表執行至7st
  3.    Sheets(s).Activate
  4.    Set sh = ActiveSheet
  5.    n = sh.UsedRange.Rows.Count
  6.             sh.[aa5].Resize(n, 12) = sh.[aa5].Resize(n, 12).Value    '把公式結果變成值
  7.             sh.AutoFilterMode = False     '取消自動篩選
  8.             sh.[a4:ad4].AutoFilter    '建立自動篩
複製代碼
那改這樣吧,我沒用2010很難想像一百多萬列跑起來是什麼速度。

TOP

回復 35# oobird
大師,
我試了一下,跟原來的一樣,會出現"填滿儲存格"的字樣,然後sheet.."龜速"作業,還有別的語法可以讓我再試試看嗎?拜託了.

TOP

應該 n = sh.UsedRange.Rows.Count (使用中的總列數)不會取過大的範圍
妳可以用f8鍵逐句運行,看看運行到這一行時n的值是否工作表的最後一列。
若不是就須要把底下的空白全部選中按delete清除
也可以改一下這句試試:
n=sh.[d10000].end(3).row (D欄有資料的最後列)

TOP

回復 37# oobird
大師:

1)   n = sh.UsedRange.Rows.Count '(使用中的總列數)不會取過大的範圍....sheet..還是"龜速",而且,我需要的是AA:AL,這個語法只要將AA:AC變成值,因為AD:AE是空白列
2)   n=sh.[d10000].end(3).row (D欄有資料的最後列)....這個語無法執行
  1.    Workbooks("2012 BCMart Chart.xlsx").Activate
  2.    For s = 5 To 10 '從第某個工作表執行至第某個
  3.    Sheets(s).Activate
  4.    Set sh = ActiveSheet
  5.    n = sh.[d10000].End(3).Row '(D欄有資料的最後列)
  6.   'Sh.UsedRange = Sh.UsedRange.Value    '把有資料的儲存格,公式結果變成值
  7.             sh.[aa:al] = sh.[aa:al].Value  '把公式結果變成值
  8.             sh.AutoFilterMode = False     '取消自動篩選
  9.             sh.[a4:ad4].AutoFilter    '建立自動篩
  10.     Next    '下一個工作表
  11.     ActiveWorkbook.Save
複製代碼

TOP

本帖最後由 oobird 於 2012-5-10 11:22 編輯

妳沒有改到呀?我再整理一下:
Workbooks("2012 BCMart Chart.xlsx").Activate
   For s = 5 To 10 '從第某個工作表執行至第某個
   Sheets(s).Activate
   Set sh = ActiveSheet
   n = sh.[d10000].End(3).Row '(D欄有資料的最後列)這裡可以改成妳的資料中最齊的一欄
            sh.[aa5].Resize(n, 3) = sh.[aa5].Resize(n, 3).Value '把aa:ac變成值
            sh.AutoFilterMode = False     '取消自動篩選
            sh.[a4:ad4].AutoFilter    '建立自動篩
    Next    '下一個工作表

TOP

回復 39# oobird

大師,
我改好並重新RUN一次了,跟其他的語法一樣,如果只是將AA:AL變成值的都跑得非常慢速,請問這樣是不是無解了?

TOP

AA:AL在2010中是數千萬個儲存格,所以會拉格
我沒考慮妳是用2010,所以輕率的給妳這個語法。
妳用後來的 n = sh.[d10000].End(3).Row
            sh.[aa5].Resize(n, 3) = sh.[aa5].Resize(n, 3).Value
就不會拉格啦!

TOP

        靜思自在 : 人生不一定球球是好球,但是有歷練的強打者,隨時都可以揮棒。
返回列表 上一主題