返回列表 上一主題 發帖

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

回復 10# GBKEE

你的建議很不錯,謝謝.

TOP

回復 9# oobird
超級版主您好,

我的巨集程式與須執行巨集的工作表分開,所以我在For 的前一行加了   Workbooks("2012 samples Chart.xlsx").Activate這樣執行就ok了,
以下問題想請教您:
1) 我每年的工作表是依月份為sheet名稱,現在是5月,若我想讓1~4月不要執行前面的巨集程式,是否可以將程式稍加修改為:
指定Sheet "May"之後的工作表再執行前述的巨集?我應該怎麼改?可否寫出完整的程式?(這個寫法請用指定的sheet名稱,不能用程式去判別現在的月份,因為我們的工作表要等結帳完畢,才不會用到上述的巨集)
2)         n = sh.[AC1000].End(3).Row 'ac欄最後儲存格列號...End後面的(3)代表什麼?

TOP

End後面的(3)~xlup,該欄有資料的最後一列
若妳的工作表按順序排列,可以指定從第幾個工作表開始。
如:For i = 5 To 12
Sheets(i).Activate
執行妳的工作
Next
或者以表名的文字判斷,例如:
For Each sh In Sheets
If InStr("MayJunJulAugSepOctNovDec", sh.Name) Then
sh.Activate
執行程式
End If
Next

TOP

回復 13# oobird
oobird:
程式執行至    If InStr("MayJunJulAugSepOctNovDec", sh.May) Then '從"May"開始作業一直到最後一個工作表
出現問題就執行不下去了,所以沒有執行完,請幫忙看看有什麼問題?
  1.    Workbooks("2012 samples Chart.xlsx").Activate
  2.     For Each sh In Sheets '在所有工作表中循環
  3.     If InStr("MayJunJulAugSepOctNovDec", sh.May) Then '從"May"開始作業一直到最後一個工作表
  4.     sh.Activate    '執行程式
  5.     End If
  6.     'Next
  7.    
  8.         sh.UsedRange = sh.UsedRange.Value '把公式結果變成值
  9.         'sh.[a4:ad4].AutoFilter '取消自動篩選
  10.         'sh.[a4:ad4].AutoFilter '建立自動篩
  11.         sh.AutoFilterMode = False '取消自動篩選
  12.         sh.[a4:ad4].AutoFilter '建立自動篩
  13.         
  14.         n = sh.[AC1000].End(3).Row 'ac欄最後儲存格列號
  15.         sh.Sort.SortFields.Clear '清除重建排序條件
  16.         ar = Array("ac", "u", "q", "c", "d")
  17.         For i = 0 To UBound(ar)
  18.             sh.Sort.SortFields.Add Key:=sh.Range(ar(i) & "5:" & ar(i) & n)
  19.         Next
  20.         With sh.Sort '對指定範圍以指定條件排序
  21.             .SetRange sh.Range("A5:AD" & n)
  22.             .Header = xlNo
  23.             .MatchCase = False
  24.             .Orientation = xlTopToBottom
  25.             .SortMethod = xlPinYin
  26.             .Apply
  27.         End With
  28.     Next '下一個工作表
  29.     End Sub
複製代碼

TOP

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

回復 15# PJChen
If InStr("MayJunJulAugSepOctNovDec", sh.May) Then  sh 沒這 屬性
  1. Workbooks("2012 samples Chart.xlsx").Activate
  2.     For xi = Month(Date) To Sheets.Count                              'Month(Date) 當月份
  3.         Sheets(Format(DateSerial(2001, xi, 1), "Mmm")).Activate    '當月份工作表
  4.     Next
複製代碼

TOP

  1. Sub test()
  2.     Workbooks("2012 samples Chart.xlsx").Activate
  3.     For Each sh In Sheets    '在所有工作表中循環
  4.         If InStr("MayJunJulAugSepOctNovDec", sh.Name) Then    '從"May"開始作業一直到最後一個工作表
  5.             sh.Activate    '執行程式

  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.         End If
  24.     Next    '下一個工作表
  25. End Sub
複製代碼
注意這一行:
  If InStr("MayJunJulAugSepOctNovDec", sh.Name) Then
sh.Name是工作表名,如工作表May表名就是May
在"MayJunJulAugSepOctNovDec"這個字串中有包含May的話就執行
其他表也一樣類推
sh.May,是錯誤的表達。

TOP

回復 16# GBKEE
G大,

我的工作表不能以程式去指定月份(例:    For xi = Month(Date) To Sheets.Count ),因為有結帳的問題,待結帳完才能不執行巨集,所以無法用這個語法.

TOP

回復 18# PJChen
  1. For xi = Month(Date) To 12        'Month(Date) 當月份  到 12月份
複製代碼

TOP

回復 17# oobird
Hi oobird,
執行ok.
請教語法問題:
1) 以下替換為你所寫的另一語法(如下表):
For i = 5 To 12 (我使用的sample因為1~3月份已刪除,所以我將之改為2~7)
Sheets(i).Activate '執行工作
Next
但無法執行,是否我把哪裡給改錯了?
2) 另一語法        If InStr("MayJunJulAugSepOctNovDec", sh.Name) Then
我看到上述2個語法都是要將每一毎工作表寫出來,我想知道有沒有"指定式"的?(例:從sheet(May)開始至最後一個工作表,而不用將May之後的每個工作表都列出?
  1.    Workbooks("2012 samples Chart.xlsx").Activate
  2.         For i = 2 To 7  '從2nd的工作表執行至7st
  3.          Sheets(i).Activate '執行工作
  4.             sh.UsedRange = sh.UsedRange.Value    '把公式結果變成值
  5.             sh.AutoFilterMode = False     '取消自動篩選
  6.             sh.[a4:ad4].AutoFilter    '建立自動篩

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

TOP

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

回復 19# GBKEE
G大,
請問你的意思是這樣嗎?可是無法執行,可以幫忙看一下嗎?
  1. Sub Try()

  2.     Workbooks("2012 samples Chart.xlsx").Activate
  3.     For Each sh In Sheets    '在所有工作表中循環
  4.     For xi = Month(Date) To 12        'Month(Date) 當月份  到 12月份
  5.     Sheets(Format(DateSerial(2001, xi, 1), "Mmm")).Activate    '當月份工作表

  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.         End If
  24.     Next    '下一個工作表
  25. End Sub
複製代碼

TOP

        靜思自在 : 口說好話、心想好意、身行好事。
返回列表 上一主題