返回列表 上一主題 發帖

[分享] 優化巨大的VBA

本帖最後由 GBKEE 於 2011-7-21 08:31 編輯

回復 1# play9091
  1. KPI = InputBox("C#KPI報告路俓(順序從C4∼C9,最後才是C1)")
  2.     Workbooks.Open (KPI)
  3.     Set KPI = Nothing
  4.     KPI = ActiveWorkbook.Name
複製代碼
KPI = InputBox("C#KPI報告路俓(順序從C4∼C9,最後才是C1)")
    Set KPI = Workbooks.Open(KPI)
  1.     Workbooks(Clu).Sheets("sheet1").Copy After:=Workbooks(KPI).Sheets("M2000 BSC KPI Report (2)")
複製代碼
Clu.Sheets("sheet1").Copy After:=KP.Sheets("M2000 BSC KPI Report (2)")
  1. '開始出報告
  2. Sheets("paging").Select
  3.     Range("A11").Select
  4.     Range(Selection, Selection.End(xlToRight)).Select
  5.     Range(Selection, Selection.End(xlDown)).Select
  6.     Selection.Copy
  7.     If I <> 10 Then
  8.     Sheets("M2000 MSC Paging").Select
  9.     ElseIf I = 10 Then
  10.     Sheets("sheet5").Select
  11.     End If
  12.     Range("A2").Select
  13.     Range(Selection, Selection.End(xlToRight)).Select
  14.     Range(Selection, Selection.End(xlDown)).Select
  15.     ActiveSheet.Paste
複製代碼
'開始出報告
    If I <> 10 Then
    Sheets("M2000 MSC Paging").Select
    ElseIf I = 10 Then
    Sheets("sheet5").Select
    End If
Sheets("paging").Range("A11").CurrentRegion.Copy  ActiveSheet.Range("A2")
CurrentRegion  :將選擇範圍自動延伸->     Range(Selection, Selection.End(xlToRight)).Select
                                                                                Range(Selection, Selection.End(xlDown)).Select
其餘類似可自行修改

TOP

本帖最後由 GBKEE 於 2011-7-21 11:33 編輯

回復 3# play9091
Workbooks("路俓版").Sheets("工作表3").Range("D" & I).Value  '←這裡出錯!!!
試看看   Workbooks("路俓版.XLS")   這檔案必需是已開啟的.
我只須要BOOK的檔名而已!!!應該是用不上!而且我下面必須要用到BOOK的名字,精確一點應該會比較好!
我將你的程式碼簡化是配合你的程序需求
1樓的程式碼有
Workbooks(Clu).Close SaveChanges:=False     '這不是之前 將檔案開啟 後作關閉的動作嗎?
Workbooks(Pag).Close SaveChanges:=False

TOP

本帖最後由 GBKEE 於 2011-7-21 11:34 編輯

回復 5# play9091
沒有開的檔案都可以抓到資料  不可以的上一回覆有筆誤  以更正 ,可用匯入外部資料讀取.

Set KPI = Workbooks.Open(KPI) , 將變數KPI指定為  Workbooks.Open(KPI) 這物件.
KPI.Close     這樣就關掉

應該是這樣   
Set GGG = Selection       將變數 GGG指定為 Range物件, Selection是Range物件.

TOP

本帖最後由 GBKEE 於 2011-7-21 15:08 編輯

回復 7# play9091
這是工作表函數寫法  =AND(TEXT(RIGHT(A11, 8), "hh:mm:ss") >= "02:00:00",TEXT(RIGHT(A11, 8), "hh:mm:ss") <= "21:30:00")
你的寫法有誤 你不是有問過
  1. Sub Ex()
  2.     If TimeValue(Right(Range("A11"), 8)) >= #2:00:00 AM# And TimeValue(Right(Range("A11"), 8)) <= #9:30:00 PM# Then
  3.         MsgBox "篩選時間內"
  4.     End If
  5. '''''''' 一樣的效果   '''''''''''''
  6.     If TimeValue(Right([A11], 8)) >= TimeValue("2:00:00") And TimeValue(Right([A11], 8)) <= TimeValue("9:30:00") Then
  7.         MsgBox "篩選時間內"
  8.     End If
  9. End Sub
複製代碼

TOP

回復 9# play9091
上傳 檔案說明看看

TOP

本帖最後由 GBKEE 於 2011-7-21 17:04 編輯

回復 11# play9091
沒問題, 這樣進階篩選對阿.
工作表函數 ISLOGICAL 參照的值是邏輯值 傳回 TRUE    ,E4 傳回 為TRUE 或FALSE 同樣是邏輯值,
=IF(ISLOGICAL(E4)," & "" & ",A10)"    永遠傳回 ""     這公式是誤打誤撞的
  1. Sub ttt()
  2.     Sheets("Sheet1").Range("E3") = ""   
  3.    '或 Sheets("Sheet1").Range("E3") = "ABC"
  4.   ' 進階篩選 :    篩選準則 是計算是準則(條件裡有計算公式)  , 準則欄位: 不可是資料庫內的欄位 (可以是空白欄位)
  5.     '計算是準則    如E4=  A10   是篩選不到資料
  6.     Sheets("Sheet1").Range("E4").Value = "=AND(TEXT(RIGHT(A11, 8), ""hh:mm:ss"") >= ""02:00:00"",TEXT(RIGHT(A11, 8), ""hh:mm:ss"") <= ""21:30:00"")"
  7.     Range("A10").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
  8.         Range("E3:E4"), Unique:=False
  9. End Sub
複製代碼

TOP

回復 13# play9091
可以呀,程式碼跟上一檔案差不多,找不到錯誤.
  1. Sub ttt()
  2.     Sheets("Sheet1").Range("E3").Value = ""
  3.     Sheets("Sheet1").Range("E4").Value = "=AND(TEXT(RIGHT(A11, 8), ""hh:mm:ss"") >= ""02:00:00"",TEXT(RIGHT(A11, 8), ""hh:mm:ss"") <= ""21:30:00"")"
  4.    ' Range("A11").Select
  5.    ' Range(Selection, Selection.End(xlToRight)).Select
  6.    ' Range(Selection, Selection.End(xlDown)).Select
  7.     Range("A10:EQ5482").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
  8.         Range("E3:E4"), Unique:=False
  9. End Sub
複製代碼

TOP

        靜思自在 : 人生沒有所有權,只有生命的使用權。
返回列表 上一主題