返回列表 上一主題 發帖

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

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

TOP

回復 35# 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

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

TOP

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

TOP

回復 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

回復 30# oobird

Bingo!!
太好了執行ok.
真謝謝你!

TOP

啊,剛剛沒注意,這裡兩個 i 在循環中重疊了
改掉其中一個:
For s = 2 To 7 '從2nd的工作表執行至7st
   Sheets(s).Activate

TOP

回復 28# oobird
Hi,
巨集執行後指向這行有問題,Help!...  For i = 0 To UBound(ar)
  1. Sub Try()
  2.    Workbooks("2012 samples Chart.xlsx").Activate
  3.    For i = 2 To 7 '從2nd的工作表執行至7st
  4.    Sheets(i).Activate
  5.    Set sh = ActiveSheet
  6.             sh.UsedRange = sh.UsedRange.Value    '把公式結果變成值
  7.             sh.AutoFilterMode = False     '取消自動篩選
  8.             sh.[a4:ad4].AutoFilter    '建立自動篩

  9.             n = sh.[AC1000].End(3).Row    'ac欄最後儲存格列號
  10.             sh.Sort.SortFields.Clear    '清除重建排序條件
  11.             ar = Array("ac", "u", "q", "c", "d")
  12.             For i = 0 To UBound(ar)
  13.                 sh.Sort.SortFields.Add Key:=sh.Range(ar(i) & "5:" & ar(i) & n)
  14.             Next
  15.             With sh.Sort    '對指定範圍以指定條件排序
  16.                 .SetRange sh.Range("A5:AD" & n)
  17.                 .Header = xlNo
  18.                 .MatchCase = False
  19.                 .Orientation = xlTopToBottom
  20.                 .SortMethod = xlPinYin
  21.                 .Apply
  22.             End With
  23.     Next    '下一個工作表
  24. End Sub
複製代碼

TOP

第5行開始sh.UsedRange = sh.UsedRange.Value
這個叫sh的變數前面並沒有定義,突然冒出來程式就會中斷了。
可以這樣:
Workbooks("2012 samples Chart.xlsx").Activate
        For i = 2 To 7  '從2nd的工作表執行至7st
         Sheets(i).Activate '執行工作
set sh =activesheet
            sh.UsedRange = sh.UsedRange.Value  
以下不變

TOP

        靜思自在 : 【生命在呼吸間】佛陀說:「生命在呼吸間。」人無法管住自己的生命,更無法擋住死期,讓自己永住人間。既然生命去來這麼無常,我們更應該好好地愛惜它、利用它、充實它,讓這無常、寶貴的生命,散發它真善美的光輝,映照出生命真正的價值。
返回列表 上一主題