返回列表 上一主題 發帖

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

本帖最後由 GBKEE 於 2012-5-6 17:35 編輯

回復 21# PJChen
  1. Sub Try()
  2.     Dim sh As Worksheet, xi As Integer
  3.     Workbooks("2012 samples Chart.xlsx").Activate
  4.     '''  For Each sh In Sheets    '在所有工作表中循環
  5.     For xi = Month(Date) To 12        'Month(Date) 當月份  到 12月份
  6.      Set sh = Sheets(Format(DateSerial(2001, xi, 1), "Mmm"))
  7.         sh.Activate    '當月份工作
  8.         sh.UsedRange = sh.UsedRange.Value    '把公式結果變成值
  9.         sh.AutoFilterMode = False     '取消自動篩選
  10.         sh.[a4:ad4].AutoFilter    '建立自動篩
複製代碼

TOP

本帖最後由 GBKEE 於 2012-5-6 17:39 編輯

回復 22# GBKEE
G大,
還是無法執行!請再幫忙看下!
  1. Sub Try()
  2.     Dim sh As Worksheet, xi As Integer
  3.     Workbooks("2012 samples Chart.xlsx").Activate
  4.      For xi = Month(Date) To 12        'Month(Date) 當月份  到 12月份
  5.      Set sh = Sheets(Format(DateSerial(2001, xi, 1), "Mmm"))
  6.         sh.Activate    '當月份工作
  7.         sh.UsedRange = sh.UsedRange.Value    '把公式結果變成值
  8.         sh.AutoFilterMode = False     '取消自動篩選
  9.         sh.[a4:ad4].AutoFilter    '建立自動篩
  10.         n = sh.[AC1000].End(3).Row    'ac欄最後儲存格列號
  11.         sh.Sort.SortFields.Clear    '清除重建排序條件
  12.         ar = Array("ac", "u", "q", "c", "d")
  13.         For i = 0 To UBound(ar)
  14.         sh.Sort.SortFields.Add Key:=sh.Range(ar(i) & "5:" & ar(i) & n)
  15.     Next
  16.         With sh.Sort  '對指定範圍以指定條件排序
  17.             .SetRange sh.Range("A5:AD" & n)
  18.             .Header = xlNo
  19.             .MatchCase = False
  20.             .Orientation = xlTopToBottom
  21.             .SortMethod = xlPinYin
  22.             .Apply
  23.         End With
  24.     Next    '下一個工作表
  25. End Sub
複製代碼

TOP

回復 23# PJChen
對不起:有點糊塗 請修改 一下
Set sh = Sheets(Format(DateSerial(2001, Month(xi), 1), "Mmm")) 錯誤
Set sh = Sheets(Format(DateSerial(2001, xi, 1), "Mmm"))  正確

TOP

回復 24# GBKEE
G老大,
執行上有點小問題,不知是否能夠解決?
問題1 :現在的訂單只到10月份,我可以將它改為 For xi = Month(Date) To 10,但也有另一個問題,就是我前面一直在問的...指定Sheet Name開始的工作表再執行前述的巨集?原因是業務接單不見得一定按照月份,有可能其中一個月尚沒有訂單,比如現在接單至10月,有可能11月訂單未到,先接到12月份的,這樣執行上就會有問題!
問題2 :執行巨集過後現在打開Excel任一工作表(新的也相同)執行"copy"的動作時,不再像以前那樣會在儲存格有虛線閃動,而貼上之後也無法貼上公式,只貼上值,我從來未看過這種形,你是否知道原因為何?

TOP

回復 24# GBKEE
G大,
問題2: ,我將Excel開開關關好多次, 現在已經沒有問題,只是不了解為何當時會有這種情形?可以幫我解惑嗎?

TOP

回復 17# oobird
Hi oobird,
我又再次試了以下的語法,仍然無法執行,可否請你指導?
  1. Sub Try()
  2.    Workbooks("2012 samples Chart.xlsx").Activate
  3.         For i = 2 To 7  '從2nd的工作表執行至7st
  4.          Sheets(i).Activate '執行工作
  5.             sh.UsedRange = sh.UsedRange.Value    '把公式結果變成值
  6.             sh.AutoFilterMode = False     '取消自動篩選
  7.             sh.[a4:ad4].AutoFilter    '建立自動篩

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

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

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

TOP

回復 30# oobird

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

TOP

        靜思自在 : 並非有錢魷是快樂,問心無愧心最安。
返回列表 上一主題