活頁簿
VBA 的 Workbooks
物件代表 Excel 目前開啟的活頁簿,如果需要在程式中同時處理多本活頁簿的資料時,就會需要用到它。例如要把活頁簿1
中的第一張工作表的 A1
儲存格內容設定為 Hello
,則執行:
Workbooks("活頁簿1").Worksheets(1).Range("A1").Value = "Hello"
這個用法跟之前工作表與儲存格的操作類似,只是在前面多加了一個 Workbooks
物件來指定活頁簿而已。同樣地 Workbooks
除了用名稱指定之外,也可以使用活頁簿的編號:
Workbooks(1).Worksheets(1).Range("A1").Value = "Hello"
若要查看目前的活頁簿數量,則可使用 Workbooks
的 Count
:
MsgBox Workbooks.Count
活頁簿的名稱可以從 Name
取得:
MsgBox Workbooks(1).Name
如果要開啟活頁簿(開啟 Excel 檔),可以使用 Open
:
Workbooks.Open "C:VBAdemo.xlsx"
若要儲存活頁簿(儲存 Excel 檔),則可使用 Save
:
Workbooks("demo").Save
若要將活頁簿另存新檔,則可使用 SaveAs
:
Workbooks("demo").SaveAs "C:VBAanother.xlsx"
Activate
可以指定當前活頁簿:
Workbooks("demo").Activate
若要關閉活頁簿,則可使用 Close
:
Workbooks("demo").Close
如果要關閉所有的活頁簿,但留下主視窗,則可執行:
Workbooks.Close
若要關閉整個 Excel,可以執行:
Application.Quit
熟練了 Excel VBA 的活頁簿操作技巧之後,我們就可以很容易地開啟很多個 Excel 檔進行各種自動化的動作了。
最後補充一個小技巧,在撰寫完一個副程式(Sub)時,通常都會需要馬上執行,測試看看執行的結果如何。在工具列上有一個執行的按鈕,按下去就可以執行,而這時候如果游標沒有在任何一個副程式之內,那麼在按下執行按鈕時,就會跳出一個選擇視窗,詢問要執行的副程式,這樣會比較浪費時間。
如果想要加入開發的速度、節省時間,可以將滑鼠的游標放在要執行的副程式之內,然後按下執行的按鈕,這樣就可以馬上執行該副程式,在開發程式時會比較有效率。
更多關於 VBA 的教學文章,請參考 VBA 程式設計。
CS
想請教, 一個已經定義名稱的欄位, 要如何用巨集填入值? 謝謝
G. T. Wang
使用
Range
,例如Range("MyCell").Value = 123
。這部分已經加入文章中。
chh
一個已經定義名稱的欄位, 要如何用巨集填入值
那麼,該如何在VBA直接定義”MyCell”
Hsieh
[B2].Name = “MyCell”
B2是我隨意挑的一個儲存格,你可以自行更改
CS
Thank you very much…
JC
想請問
因公司需用VBA抓取測試出來的資料做成曲線圖,再相互比較
做比對,但這個程式共用於許多測試出來的檔案,每個檔案的
工作表以檔名做命名,讓這個VBA程式,可以適用於各個檔案 ;
我試過很多工作表指定,但都無法抓到值,除非在VBA程式中直
接輸入檔名,就可以畫出曲線…是否可幫忙指教一下,要如何
修正呢?
G. T. Wang
沒有看到實際的程式與資料,我也不知道該如何處理。
Alex
請問大大:
我有兩欄資訊(A欄與C欄),只知道A欄的資訊列數少與C欄,利用Sheets(1).UsedRange.Columns.Count可知C欄最大列數,我要怎麼知道A欄的最大列數呢!?
ex
A C
────────
1 2
2 3
4
C欄最大列數為3,A欄要如何取的最大列數(2)!?
Alex
系統自動把空白吃掉了!!!
那改問這個吧
“C欄的資訊列數少與A欄”要怎麼知道A欄的最大列數呢!?(反正都是一樣的)
ex
A C
────────
1 2
2 3
4
A欄最大列數為3,C欄要如何取的最大列數(2)!?
drmilk
正在學VBA,剛好可以解答
Y= cells(rows.count,”A”).end(xlup).row ‘從下向上算有多少列
debug.print “Y=”, Y ‘及時運算視窗可以看到最大A欄 Y軸有多少列
or
Msgbox “Y=”, Y
IRONER
我完全不會這些程式的東西。但看你寫的文章很容易明白。
感謝您。
Mw
您好 想請問一下 如果我要做一按下按鈕 儲存格計算a1+b1 並 顯示在 c1
我該如何做呢 感謝 !
Jimchang
Excel VAL程式設計教學寫得不錯 我想應用在股票每天5日平均值減60日平均值每天的值計算 就不用很辛苦計算
請教每天5日平均值 60日平均值 如何由看盤中取得?
感恩喔!
Eric
淺顯易懂,謝謝分享!
PJ
請問:
我的工作表以數字命名,程式是放在Macro.xlsm檔案中,指定B1=檔名,B2=工作表名 (儲存格值為1)
當我指定Sh.Activate (指定到”1″的工作表),vba會判定為從前面開始數第一個工作表,請問VBA該如何寫才不會被誤判?
Sub 測試II()
Dim Wb As Workbook, Sh As Worksheet
Set Wb = Workbooks(Workbooks(“Macro.xlsm”).Worksheets(“VBA”).Range(“B1”).Value) ‘儲存格的值為檔案名稱
Set Sh = Wb.Worksheets(Worksheets(“VBA”).Range(“B2”).Value) ‘儲存格的值為工作表名稱
Sh.Activate ‘Range(“B2”)的值為數字,也就是工作表名稱
‘Wb.Worksheets(Sh.Name).Activate ‘或寫這樣,也還是會跑到第一個工作表
End Sub
Alan Chen
請問針對Excel VBA程式設計教學課程中的第16~21項, 能提供課程內容嗎? 由衷感謝!
16. 資料繪圖(Charts)
17. Application 物件
18. ActiveX 控制項
19. 使用者表單(Userform)
20. 範例集錦
阿宏
大大好:EXCEL的A1及B1有資料,請問有巨集可以在SHEET裡點任意位置(如N3),A!的資料就可以自動填入
Andrew
Dear G. T. Wang Sir,
1)如何禁止使用者新增或刪減指定欄位,vba 程式怎樣寫? 請賜教.
2)如何禁止使用者利用 active command bar,vba 程式怎樣寫? 請賜教.