返回列表 上一主題 發帖

[分享] 優化巨大的VBA

本帖最後由 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

試看看   Workbooks("路俓版.XLS")   這檔案不需是已開啟的.\
YES!!!真的搞定了,版大真強,這招先學起來……用這個方法是不是連沒有開的檔案都可以抓到資料??

我將你的程式碼簡化是配合你的程序需求
1樓的程式碼有
Workbooks(Clu).Close SaveChanges:=False     '這不是之前 將檔案開啟 後作關閉的動作嗎?


它的確是關閉之前開啟的檔案沒有錯,但是Workbooks(Clu)裡面的「Clu」必須是精確的檔名,要不然會關不掉……

另外:我想要只複製一個「範圍」的「值」,我還想不到怎麼做,因為一次要複製的資料太多了(百萬級的)!複製的時候要等很久……有沒有可以「只複製值」的方法!
我想了一些,但都沒有成功……請先進們指導一下如何只取值!!!
  1.     Sheets("C" I).Select
  2.     Range("A11").Select
  3.     Range(Selection, Selection.End(xlToRight)).Select
  4.     Range(Selection, Selection.End(xlDown)).Select
  5.     set GGG.value = selection.value   '出錯
複製代碼
初學VBA乍到twbts

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

本帖最後由 play9091 於 2011-7-21 09:53 編輯

我把它修改成下面的樣子,不要用「inputbox」直接在sheet裡面把路俓先寫好,這樣子就不用等「inputbox」跳出來。
但是它確出現了「超出索引範圍」代號9的錯誤,我只要把BOOK的物件拿掉就正常了,但我必須要指定BOOK比較不會出錯。我試了好多方法,它就是不給動作,不知道是不是我漏了什麼地方,煩請先進指導一下!!!
  1. Sub name_test()
  2.     Application.ScreenUpdating = False
  3.     Application.DisplayAlerts = False
  4.     T = Time
  5.     For I = 4 To 10
  6. '叫出KPI報告
  7.     KPI = Workbooks("路俓版").Sheets("工作表3").Range("D" & I).Value  '←這裡出錯!!!
  8.     Workbooks.Open (KPI)
  9.     Set KPI = Nothing
  10.     KPI = ActiveWorkbook.Name
複製代碼
另外,板主回複的簡化方式
  1. Set KPI = Workbooks.Open(KPI)
複製代碼
這取出來的是全部關於BOOK的內容,我只須要BOOK的檔名而已!!!應該是用不上!而且我下面必須要用到BOOK的名字,精確一點應該會比較好!
初學VBA乍到twbts

TOP

本帖最後由 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

        靜思自在 : 唯其尊重自己的人,才更勇於縮小自己。
返回列表 上一主題