在前面的例子里,你學(xué)習(xí)使用了Excel對(duì)象庫里的Shapes(圖形)集合成員的屬性。Excel庫包含專門使用Excel的對(duì)象,而VBA庫則提供對(duì)許多內(nèi)置VBA函數(shù)的訪問,這些函數(shù)按類別分組。這些函數(shù)是通用的,它們使你能夠管理文件,設(shè)置日期和時(shí)間,與用戶交流,轉(zhuǎn)換數(shù)據(jù)類型,處理文本串或者進(jìn)行數(shù)學(xué)計(jì)算。在下面的練習(xí)中,你將學(xué)習(xí)如何使用內(nèi)置的VBA函數(shù)來創(chuàng)建一個(gè)新文件夾,而不需要離開Excel界面:
1.回到模塊Manipulations,那里有你的MoveTextBox和MoveCircle過程
2. 輸入一個(gè)新的過程:
Sub NewFolder()
3. 點(diǎn)擊回車鍵,VB會(huì)自動(dòng)輸入結(jié)束關(guān)鍵詞End Sub
4. 按下F2激活對(duì)象瀏覽器
5. 在“工程/庫”列表框里選擇VBA
6. 在搜索文本框里輸入file并且回車
7. 滾動(dòng)成員列表框,并且選中MkDir方法(參見圖2-21)
8. 點(diǎn)擊對(duì)象瀏覽器上的“復(fù)制”按鈕,將被選擇的方法名稱復(fù)制到剪貼板

圖2-21 編寫過程時(shí),向?qū)ο鬄g覽器尋求幫助來找內(nèi)置的VBA函數(shù)
9. 返回Manipulations窗口,并且將復(fù)制的指令粘貼到NewFolder過程
10. 輸入一個(gè)空格,接著是”C:\Study”。確保你在引號(hào)里輸入了整個(gè)路徑名。NewFolder過程為:
Sub NewFolder()
MkDir "C:\Study"
End Sub
11. 運(yùn)行過程N(yùn)ewFolder
當(dāng)你運(yùn)行NewFolder過程,VB在C盤上創(chuàng)建了一個(gè)新的文件夾。激活Windows瀏覽器可以查看該新文件夾。創(chuàng)建一個(gè)新的文件夾后,你可能會(huì)發(fā)現(xiàn)你根本就不需要它,雖然你可以輕易地從Windows瀏覽器里刪除該文件夾,但是,如何從編程上去掉它呢?對(duì)象瀏覽器上列出了許多對(duì)文件夾和文件操作很有幫助的其它方法。RmDir方法正如MkDir 方法一樣使用簡(jiǎn)單。想要?jiǎng)h除你硬盤上的“Study”文件夾,只要將MkDir方法換成RmDir方法然后重新運(yùn)行NewFolder過程就可以了?;蛘撸阋部梢詣?chuàng)建一個(gè)新的過程RemoveFolder,如下:
Sub RemoveFolder()
RmDir "C:\Study"
End Sub
RmDir方法允許你從硬盤上刪除不需要的文件夾。
用對(duì)象瀏覽器來定位過程
除了定位對(duì)象,屬性和方法外,對(duì)象瀏覽器還是個(gè)定位在不同工程里面的過程非常方便的工具。下
面的例子給你演示如何查看存在“Personal”工作簿里面的過程:
1. 激活對(duì)象瀏覽器并且選擇工程/庫下拉列表里的Personal。(因?yàn)槲覜]有Personal這個(gè)文件。。。)
圖2-22 對(duì)象瀏覽器列出所有在某個(gè)特定VBA工程里可用的過程
對(duì)象瀏覽器的左邊顯示所選工程里面對(duì)象名稱,而右邊則列出了所有可用的過程。
2.雙擊NewFolder過程名稱,VB將光標(biāo)定位到該過程的第一行
3.關(guān)閉對(duì)象瀏覽器
使用立即窗口
在你開始創(chuàng)建一個(gè)完善的VBA過程前(在下一章),先來做一些熱身練習(xí),增加你的VBA詞匯。你怎樣才能學(xué)得快而且沒有痛苦?你如何試驗(yàn)一下一些新學(xué)的VBA指令?這里有一些簡(jiǎn)短的,互動(dòng)的語言練習(xí):輸入一個(gè)簡(jiǎn)單的VBA指令,Excel會(huì)檢查并且將結(jié)果顯示在下一行。我們開始來設(shè)定你的練習(xí)屏幕:
1.在VB編輯器窗口,選擇“視圖”-“立即窗口”
在決定使用在你自己的VBA過程之前,立即窗口可以用來試驗(yàn)VB語言中不同的指令,函數(shù)和運(yùn)算符。這是一個(gè)非常好的調(diào)試新語言的工具,你輸入在這個(gè)窗口里面的指令,將會(huì)立即顯示結(jié)果。
立即窗口可以在VB編輯器窗口上任意移動(dòng),也可以設(shè)置為可連接的,這樣它就會(huì)出現(xiàn)在相同的地方。可以通過選項(xiàng)對(duì)話框上的“可連接的”頁來打開或關(guān)閉可連接設(shè)置。在VB編輯器窗口上按下Ctrl+G就可以快速訪問立即窗口。立即窗口允許你輸入VBA語句,并且測(cè)試它們的結(jié)果,而不需要寫成一個(gè)過程。立即窗口就像一個(gè)草稿板,你可以用它測(cè)試你的語句。如果該語句輸出了你希望的結(jié)果,你就可以將立即窗口上的語句復(fù)制到你的過程中去(或者,你也可以將語句拖曳到代碼窗口,如果代碼窗口是可見的)
2.將Excel和VB編輯器窗口并排排列
3.在立即窗口里輸入下述指令,并且回車
Worksheets("Sheet2").Activate
當(dāng)你按下回車鍵,VB開始工作,如果你上面輸入的語句是正確的話,VBA激活當(dāng)前工作簿里的第二個(gè)工作表。工作簿底部的Sheet2這時(shí)應(yīng)該是突出顯示的。
4.在立即窗口,輸入其它VBA語句并回車
Range("A1:A4").Select
你一旦按下回車,VB將選中當(dāng)前工作表的A1,A2,A3和A4
5.在立即窗口里輸入下述指令:
[A1:A4].Value = 55
當(dāng)你按下回車,VB在A1:A4中的每個(gè)單元格里放置數(shù)字55。上面的語句是引用Range對(duì)象的一種所寫方式,完整的語法可讀性更強(qiáng):
Range("A1:A4").Value = 55

圖2-23 將Excel和VB窗口并排排列讓你可以觀察指令的運(yùn)行
6.在立即窗口輸入下述指令:
Selection.ClearContents
7.回車后,VBA清除所選單元格區(qū)域的內(nèi)容,區(qū)域A1:A4現(xiàn)在是空的
在立即窗口輸入下述指令:
ActiveCell.Select
回車后,VB激活A(yù)1單元格
圖2-24 在立即窗口里輸入指令,一旦你按下回車鍵,指令就會(huì)被執(zhí)行
圖2-24顯示了上面練習(xí)中在立即窗口里輸入的所有指令。你每次按下回車鍵后,Excel總是執(zhí)行光標(biāo)所在行的語句。如果你想要再次執(zhí)行同一指令,那么點(diǎn)擊該指令行的任意位置,回車。為了更多的練習(xí),重新運(yùn)行圖2-24里語句,從立即窗口的第二行指令開始,點(diǎn)擊合適的地方并回車,一個(gè)一個(gè)地執(zhí)行這些指令。
獲取立即窗口里的信息
到目前為止,你已經(jīng)使用立即窗口執(zhí)行操作了,這些操作也可以是手動(dòng)地在工作表的任意區(qū)域點(diǎn)擊鼠標(biāo)并且輸入數(shù)據(jù)。立即窗口也允許你問問題。假設(shè)你想要找到下面問題的答案:“現(xiàn)在選中的是哪些單元格?”,“當(dāng)前單元格里的值是多少?”,“當(dāng)前工作表的名稱是什么?”,“當(dāng)前窗口的編號(hào)是多少?”使用立即窗口,你可以輕易地找到這些問題,以及其它問題的答案。在前面的例子里,你輸入了好幾個(gè)指令,讓我們返回立即窗口去問幾個(gè)問題。Excel甚至在你關(guān)閉了立即窗口后還能記住你在立即窗口里輸入的指令。當(dāng)你退出Excel時(shí),立即窗口的內(nèi)容自動(dòng)會(huì)被刪除。
1. 鼠標(biāo)點(diǎn)擊立即窗口第二行你輸入Range("A1:A4").Select的任意地方
2. 回車,讓Excel再次選擇單元格A1:A4
3. 在立即窗口新的一行輸入下面的問題:
?Selection.Address
當(dāng)你按回車,Excel不會(huì)選擇工作表的任何東西,取而代之,立即窗口上會(huì)在另外一行顯示該指令的結(jié)果。在該例中,Excel返回的是當(dāng)前被選擇的單元格的絕對(duì)地址($A$1:$A$4)。問號(hào)(?)告訴Excel在立即窗口顯示指令的結(jié)果。除了問號(hào),你還可以使用Print關(guān)鍵字。讓我們使用關(guān)鍵字Print問工作表名稱
4. 在立即窗口新的一行,輸入下述問題:
Print ActiveWorkbook.Name
回車后,Excel在立即窗口新的一行輸入了當(dāng)前工作簿的名稱。找找應(yīng)用程序的名稱如何?Chap02.xls的父對(duì)象是誰?
5. 在立即窗口新的一行,輸入下述問題:
?Application.Name
Excel會(huì)顯示它自己的全名:Microsoft Excel
立即窗口也可以用來做一個(gè)快速計(jì)算
6. 在立即窗口新的一行,輸入下述問題:
?12/3
回車后,Excel會(huì)在下一行顯示該除法運(yùn)算的結(jié)果。但是,萬一你想立即知道3+2和12*8的結(jié)果呢?你可以將它們輸入在一行,而不必分成兩行,例如:?3+2:?12*8
注意,冒號(hào)將兩個(gè)代碼塊分割開來。
當(dāng)你按下回車鍵,Excel分別在立即窗口的兩行顯示結(jié)果5,96。下面是你在立即窗口里輸入的所有指令,以及Excel對(duì)你問題的回答:
Worksheets("Sheet2").Activate
Range("A1:A4").Select
[A1:A4].Value = 55
Selection.ClearContents
ActiveCell.Select
?Selection.Address
$A$1:$A$4
Print ActiveWorkbook.Name
Chap02.xls
?Application.Name
Microsoft Excel
?12/3
4
?3+2:?12*8
5
96
更多建議: