日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

excel中定义VBA

發布時間:2024/4/17 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 excel中定义VBA 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://zhidao.baidu.com/question/127778044

Sub apm()End Sub Function ampm(cel As String) Dim tex As String Dim val As Single tex = Left(cel, 2) val = Value(tex) If val < 12 Then ampm = "pm" Else ampm = "am" End Function自定義函數不能調用 在ALTF11中的新建模塊中

?

前面的 Apm() 過程為空,沒有什么用呀,可以刪除;后面的函數 ampm() 的If …… Else …… End If 結構中漏掉了 End If請試下我幫你改的是否可以:Function ampm(cel As String) Dim tex As String Dim val As Single tex = Left(cel, 2) val = CSng(tex) If val < 12 Then ampm = "pm" Else ampm = "am" End IfEnd Function

?

=====http://www.cnblogs.com/binaryworms/articles/1884058.html

第一課 VBA是什么

1.1 VBA是什么
直到90年代早期,使應用程序自動化還是充滿挑戰性的領域.對每個需要自動化的應用程序,人們不得不學習一種不同的自動化語言.例如:可以用EXCEL的宏語言來使EXCEL自動化,使用WORD BASIC使WORD自動化,等等.微軟決定讓它開發出來的應用程序共享一種通用的自動化語言--------Visual Basic For Application(VBA),可以認為VBA是非常流行的應用程序開發語言VASUAL BASIC 的子集.實際上VBA是"寄生于"VB應用程序的版本.VBA和VB的區別包括如下幾個方面: 1. VB是設計用于創建標準的應用程序,而VBA是使已有的應用程序(EXCEL等)自動化
2. VB具有自己的開發環境,而VBA必須寄生于已有的應用程序.
3. 要運行VB開發的應用程序,用戶不必安裝VB,因為VB開發出的應用程序是可執行文件(*.EXE),而VBA開發的程序必須依賴于它的"父"應用程序,例如EXCEL. 盡管存在這些不同,VBA和VB在結構上仍然十分相似.事實上,如果你已經了解了VB,會發現學習VBA非常快.相應的,學完VBA會給學習VB打下堅實的基礎.而且,當學會在EXCEL中用VBA創建解決方案后,即已具備在WORD ACCESS OUTLOOK FOXPRO PROWERPOINT 中用VBA創建解決方案的大部分知識.
* VBA一個關鍵特征是你所學的知識在微軟的一些產品中可以相互轉化.
* VBA可以稱作EXCEL的“遙控器”.
VBA究竟是什么?更確切地講,它是一種自動化語言,它可以使常用的程序自動化,可以創建自定義的解決方案. 此外,如果你愿意,還可以將EXCEL用做開發平臺實現應用程序.
1.2 EXCEL環境中基于應用程序自動化的優點 也許你想知道VBA可以干什么?使用VBA可以實現的功能包括: 1. 使重復的任務自動化.
2. 自定義EXCEL工具欄,菜單和界面.
3. 簡化模板的使用.
4. 自定義EXCEL,使其成為開發平臺.
5. 創建報表.
6. 對數據進行復雜的操作和分析.
用EXCEL作為開發平臺有如下原因: 1. EXCEL本身功能強大,包括打印,文件處理,格式化和文本編輯.
2. EXCEL內置大量函數.
3. EXCEL界面熟悉.
4. 可連接到多種數據庫.
用其他語言開發應用程序,一半的工作是編寫一些基本功能的模塊,包括文件的打開和保存,打印,復制等.而用EXCEL作為開發平臺,則由于EXCEL已經具備這些基本功能,你要做的只是使用它.
1.3 錄制簡單的宏 在介紹學習VBA之前,應該花幾分鐘錄制一個宏。
新術語:“宏”,指一系列EXCEL能夠執行的VBA語句。
以下將要錄制的宏非常簡單,只是改變單元格顏色。請完成如下步驟: 1)打開新工作簿,確認其他工作簿已經關閉。
2)選擇A1單元格。調出“常用”工具欄。
3)選擇“工具”—“宏”—“錄制新宏”。
4)輸入“改變顏色”作為宏名替換默認宏名,單擊確定,注意,此時狀態欄中顯示“錄制”,特別是“停止錄制”工具欄也顯示出來。替換默認宏名主要是便于分別這些宏。
★ 宏名最多可為255個字符,并且必須以字母開始。其中可用的字符包括:字母、數字和下劃線。宏名中不允許出現空格。通常用下劃線代表空格。
5)選擇“格式”的“單元格”,選擇“圖案”選項中的紅色,單擊“確定”。
6)單擊“停止錄制”工具欄按鈕,結束宏錄制過程。
※ 如果“停止錄制”工具欄開始并未出現,請選擇“工具”—“宏”—“停止錄制”。
錄制完一個宏后就可以執行它了。
1.4 執行宏
當執行一個宏時,EXCEL按照宏語句執行的情況就像VBA代碼在對EXCEL進行“遙控”。但VBA的“遙控”不僅能使操作變得簡便,還能使你獲得一些使用EXCEL標準命令所無法實現的功能。而且,一旦熟悉了EXCEL的“遙控”,你都會奇怪自己在沒有這些“遙控”的情況下,到底是怎么熬過來的。要執行剛才錄制的宏,可以按以下步驟進行: 1)選擇任何一個單元格,比如A3。
2)選擇“工具”—“宏”—“宏”,顯示“宏”對話框。
3)選擇“改變顏色”,選擇“執行”,則A3單元格的顏色變為紅色。試著選擇其它單元格和幾個單元格組成的區域,然后再執行宏,以便加深印象。
1.5 查看錄制的代碼
到底是什么在控制EXCEL的運行呢?你可能有些疑惑.好,讓我們看看VBA的語句吧. 1)選擇“工具”—“宏”—“宏”,顯示“宏”對話框。
2)單擊列表中的“改變顏色”,選擇“編輯”按鈕。 此時,會打開VBA的編輯器窗口(VBE)。關于該編輯器,以后再詳細說明,先將注意力集中到顯示的代碼上。代碼如下:(日期和姓名會有不同)
Sub 改變顏色()
'
' 改變顏色 Macro
' xw 記錄的宏 2000-6-10
'
'
With Selection.Interior
.ColorIndex = 3
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub
將來會十分熟悉這種代碼,雖然現在它們看上去像一種奇怪的外語。學習VBA或編程語言在某種程度上比較像在學習一種外語。
Sub 改變顏色():這是宏的名稱。
中間的以“ '”開頭的五行稱為“注釋”,它在錄制宏時自動產生。
以With 開頭到End With 結束的結構是With結構語句,這段語句是宏的主要部分。注意單詞“selection”,它代表“突出顯示的區域”(即:選定區域)。With Selection.Interior :它讀作“選擇區域的的內部”.這整段語句設置該區域內部的一些“屬性”。
其中:
.ColorIndex = 3: 將該內部設為紅色。注意:有一小圓點,它的作用在于簡化語句,小圓點代替出現在With后的詞,它是With結構的一部分。另外:紅色被數字化為3.(紅色警戒是否可稱作:3號警戒,嗯?)有興趣的話,你將3改為其他數字試試看。
.Pattern = xlSolid:設置該區域的內部圖案。由于是錄制宏,所以,雖然你并未設置這一項,宏仍然將其記錄下來(因為在“圖案”選項中有此一項,只是你為曾設置而已)。xlSolid表示純色。
.PatternColorIndex = xlAutomatic:表示內部圖案底紋顏色為自動配色。
End With:結束With 語句。
End Sub:整個宏的結束語
1.6 編輯錄制的代碼 在上一節,我們錄制了一個宏并查看了代碼,代碼中有兩句實際上并不起作用。哪兩句?現在,在宏中作一個修改,刪除多余行,直到和下面代碼相同:
Sub 改變顏色()
'
' 改變顏色 Macro
' xw 記錄的宏 2000-6-10
'
'
With Selection.Interior
.ColorIndex = 3
End With
End Sub
完成后,在工作表中試驗一下。你會發現結果和修改前的狀況一樣。在With 語句前加入一行:
Range("A5").Select
試著運行該宏,則無論開始選擇哪個單元格,宏運行結果都是使A5單元格變紅.
現在可以看到,編輯錄制的宏同樣非常簡單。需要編輯宏是因為以下三個方面的原因。一:在錄制中出錯而不得不修改。二:錄制的宏中有多余的語句需要刪除,提高宏的運行速度。三:希望增加宏的功能。比如:加入判斷或循環等無法錄制的語句。
1.7 錄制宏的局限性
希望自動化的許多EXCEL過程大多都可以用錄制宏來完成.但是宏記錄器存在以下局限性.通過宏記錄器無法完成的工作有: 1)錄制的宏無判斷或循環能力.
2)人機交互能力差,即用戶無法進行輸入,計算機無法給出提示.
3)無法顯示EXCEL對話框.
4)無法顯示自定義窗體.
1.8 小結
本課中,你已經掌握了VBA的一些基礎知識,你會錄制宏、編輯宏而且了解了錄制宏的局限性.你很努力.并且已經為將來學習VBA甚至VB等編程語言打下了基礎.關鍵是你已經了解了一個謎底,就是說,你了解了什么是編程.下面是些小練習,做完后才可以去玩喲.

第二課 處理錄制的宏

2.1 為宏指定快捷鍵 你也許希望為經常使用的宏指定快捷鍵。快捷鍵是指鍵的組合,當其按下時執行一條命令。例如:CTRL+C 在許多程序中代表“復制”命令。當給宏指定了快捷鍵后,就可以用快捷鍵來執行宏,而不必通過“工具”菜單。 注意:當包含宏的工作簿打開時間,為宏指定快捷鍵會覆蓋EXCEL默認的快捷鍵。例如:把CTRL+C指定給某個宏,那么CTRL+C就不再執行復制命令。用以下方法可以打印出EXCEL的快捷鍵清單(用A4紙打印共有24頁之多): 1)打開EXCEL幫助文件并選擇“目錄”選項。
2)從“使用快捷鍵”文件夾中選擇“”快捷鍵“標題。
3)右擊該標題,從快捷菜單中選擇“打印”。
4)選擇“打印所選標題和所有子主題”,單擊“確定”。
可以在創建宏時指定快捷鍵,也可以在創建后再指定。要在創建(錄制)宏時指定快捷鍵,只須在錄制宏時在輸入宏名后,在“快捷鍵”文本框中輸入相應的鍵。錄制宏后指定快捷鍵也很簡單,只需選擇“工具”“宏”,顯示“宏”對話框,選擇要指定快捷鍵的宏,再單擊“選項”按鈕,通過“選項”對話框進行設置。
2.2 決定宏保存的位置 宏可保存在三種可能的位置: 1)當前工作簿。(只有該工作簿打開時,該宏才可用。)
2)新工作簿。
3)個人宏工作簿。
2.3 個人宏工作簿 個人宏工作簿,是為宏而設計的一種特殊的具有自動隱藏特性的工作簿。第一次將宏創建到個人宏工作簿時,會創建名為“PERSONAL.XLS"的新文件。如果該文件存在,則每當EXCEL啟動時會自動將此文件打開并隱藏在活動工作簿后面(在“窗口”菜單中選擇“取消隱藏”后,可以很方便地發現它的存在。)如果你要讓某個宏在多個工作簿都能使用,那么就應當創建個人宏工作簿,并將宏保存于其中。個人宏工作簿保存在“XLSTART”文件夾中。具體路徑為:C:\WINDOWS\Profiles\Application Data\Microsoft\Excel\XLSTART。可以以單詞“XLSTART”查詢。 注意:如果存在個人宏工作簿,則每當EXCEL啟動時會自動將此文件打開并隱藏。因為它存放在XLSTART文件夾內。
2.3.1 保存宏到個人宏工作簿 本練習,將保存一個簡單的宏到個人宏工作簿,該宏為文本加下劃線并改為斜體,步驟如下: 1)建立一個名為“HOUR2”的工作簿,選擇"工具"-"宏"-"錄制新宏",顯示"錄制新宏"對話框.
2)輸入"格式化文本"作為宏名.
3)從"保存在"下拉框中選擇"個人宏工作簿".
4)單擊"確定"按鈕.現在進入錄制模式.
5)單擊"斜體"工具欄按鈕.一段時間內,鼠標出現沙漏,特別是在第一次創建個人宏工作簿時,因為EXCEL在創建該工作簿.
6)單擊"下劃線"按鈕.
7)停止錄制.
2.3.2 使用并編輯個人宏工作簿中的宏 剛才已經保存了一個宏到個人宏工作簿,現在可以在任何工作簿中使用該宏.可按如下步驟操作: 1)關閉所有EXCEL工作簿.
2)任意打開一個EXCEL文件.(EXCEL自動將個人宏工作簿同時打開并隱藏.)
3)在A3中輸入你的名字.
4)選擇"工具"-"宏",顯示宏對話框.現在可以在宏列表中看到"格式化文本"這個宏.
5)選擇"格式化文本"宏,并執行.現在A3單元格中,你的名字變為斜體字還帶有下劃線.選擇"窗口"-"取消隱藏",可以將PERSONAL.XLS顯示出來,其中沒有任何文字,但通過VBA編輯器可以在其中的模塊中找到"格式化文本"這個宏.在VBA編輯器中可以對該宏進行直接編輯或者刪除.如果PERSONAL.XLS中一個宏都沒有,在啟動EXCEL時仍會打開PERSONAL.XLS,這也許是EXCEL存在的一個小毛病.
2.4 將宏指定給按鈕 即使通過快捷鍵可以是宏的執行變快,但是一旦宏的數量多了也難于記憶,而且,如果宏是由其他人來使用,難道你要他們也記住那么多的快捷鍵嗎? 作為EXCEL開發者,一個主要的目標是為自動化提供一個易于操作的界面."按鈕"是最常見的界面組成元素之一.通過使用“窗體”工具欄,可以為工作簿中的工作表添加按鈕。在創建完一個按鈕后,可以為它指定宏,然后你的用戶就可以通過單擊按鈕來執行宏。在本練習中,將創建一個按鈕,并為它指定一個宏,然后用該按鈕來執行宏。具體步驟如下: 1)打開“HOUR2”工作簿。
2)調出”窗體“工具欄。
3)單擊”窗體“工具欄中的“按鈕”控件,此時鼠標變成十字形狀。
4)在希望放置按鈕的位置按下鼠標左鍵,拖動鼠標畫出一個矩形,這個矩形代表了該按鈕的大小。對大小滿意后放開鼠標左鍵,這樣一個命令按鈕就添加到了工作表中,同時EXCEL自動顯示“指定宏”對話框。
5)從“指定宏”對話框中選擇“格式化文本”,單擊“確定”。這樣,就把該宏指定給命令按鈕。
6)在按鈕的標題“按鈕1”前單擊鼠標左鍵,按下DELETE直到刪除所有文本,輸入“格式化”作為標題。
7)單擊按鈕外的任意位置,現在該按鈕的標題由默認的“按鈕1”變為“格式化”而且被指定了一個宏。
8)試著在某個單元格中輸入文本,單擊按鈕運行該宏。 當鼠標移動至該按鈕時自動變成手的形狀,如果要改變其大小或標題,只需用右鍵單擊該按鈕就可以進行修改和設置。很明顯,你再也不需記住宏的名字或快捷鍵了,只需按一下按鈕。
2.5 將宏指定給圖片或其他對象 要執行宏有多種方法可以選擇,可以將宏指定給按鈕等控件,還可以指定給圖片、自定義工具欄、窗體甚至可以將宏指定給某個“事件”,比如單擊工作表,雙擊工作表,激活工作表,打開工作簿等等,“事件”是一個重要的概念,除此而外“方法”“對象”都是將來你會經常接觸到的。現在它們看來十分抽象,但是將來你會很熟悉這些詞語。指定宏到圖片十分簡單,只需單擊某個圖片,單擊快捷菜單中的“指定宏”進行設置即可。 如果不希望在工作表上添加控件或圖片執行宏,還有一種方法可以選擇:將宏指定給“工具欄按鈕”,可按如下步驟進行: 1)打開“HOUR2”工作簿,選擇“工具”-“定義”,顯示“自定義工具欄”對話框。
2)從“類別”列表框中選擇“宏”,從“命令”列表框中選擇“自定義按鈕”。
3)將“自定義按鈕”拖動到工具欄。
4)右鍵單擊該按鈕,選擇“指定宏”,顯示“指定宏”對話框。
5)選擇“格式化文本”并確定。
6)單擊“關閉”按鈕,關閉“自定義工具欄”對話框。
7)試著在某個單元格中輸入文本,單擊工具欄按鈕運行該宏。
2.6 小結 小結與思考: 宏存放于三個可能的位置。個人宏工作簿存放的位置和特性。執行宏的方式。指定宏是為某個對象的事件指定一個程序,一旦這個對象以該事件激活,系統將運行指定的程序。 常用的對象有:workbook,worksheet,range,cells,圖表,圖片,數據透視表,控件,窗體,工具欄.每一個對象都有其可以響應的特殊事件(也有一些通用事件如單擊或雙擊等)。如有興趣,可以通過EXCEL幫助文件查詢這幾個詞條。在EXCEL中看到的幾乎都是屬于某個對象,而在EXCEL中所做的許多工作,如移動一下鼠標等等,都可能觸發了一個事件。下一學時我們將共同學習“控件”。

第三課 學習控件

3.1 EXCEL開發過程簡介 需要對以下問題有個大致的概念.
1)誰使用-----這決定了程序的操作難度及界面感觀.
2)數據來源和保存在哪里-----這決定了程序的結構.
3)如何操作-----這將決定程序的界面和細節.
4)數據處理的結果-----最終決定程序的價值.
3.2 認識不同的控件 開始時請關閉所有工作簿,打開一個新工作簿并另存為"HOUR3".在工具欄上單擊鼠標右鍵,從快捷菜單中選擇"窗體",顯示"窗體"工具欄.其中有16個控件,只有9個可放到工作表內。
1)標簽:它用于表現靜態文本。
2)分組框:它用于將其他控件進行組合。
3)按鈕:用于執行宏命令。
4)復選框:它是一個選擇控件,通過單擊可以選擇和取消選擇,可以多項選擇。
5)選項按鈕:通常幾個選項按鈕組合在一起使用,在一組中只能選擇一個選項按鈕。
6)列表框:用于顯示多個選項并從中選擇。只能單選。
7)組合框:用于顯示多個選項并從中選擇。可以選擇其中的項目或者輸入一個其它值。
8)滾動條:不是你常見的來給很長的窗體添加滾動能力的控件,而是一種選擇機制。例如調節過渡色的滾動條控件。包括水平滾動條和垂直滾動條。
9)微調控件:也是一種數值選擇機制,通過單擊控件的箭頭來選擇數值。例如改變Windows日期或時間就會使用到微調控件。
3.3 向工作表添加控件 用EXCEL設計界面十分簡單,要將控件添加到工作表上,可以按以下步驟操作:
1)創建新工作簿并另存為"HOUR3",顯示"窗體"工具欄.
2)選擇"標簽"控件.
3)將鼠標定位到E1,此時鼠標變成小十字.
4)按下左鍵,拖動大約四個單元格長度,放開鼠標左鍵.如果希望控件大小易于控制,可在創建該控件時按下ALT拖動.
5)在標簽1上單擊右鍵,選擇"編輯文字",現在可以輸入文字.完成后,單擊任何單元格退出文字編輯.
6)通過以上步驟可以添加其它控件到工作表中,不再贅述.
3.4 設置控件的特性 設置控件的特性,可以按以下步驟操作:
1)選中先前創建的復選框控件,如果沒有馬上創建一個.
2)右擊該控件,選擇"控制"選項卡.
3)在"單元格鏈接"中輸入A1并確定.
4)單擊任意單元格,退出設置.
5)用鼠標左鍵單擊復選框,A1出現TRUE,這意味著該控件被選中.再次單擊該控件,A1出現FALSE.
6)選擇剛才創建的滾動條控件.并調出"設置控件格式"對話框.
7)在"單元格鏈接"中輸入A3并確定.
8)在滾動條外任意單元格單擊鼠標左鍵,使滾動條不被選擇.
9)用鼠標單擊滾動條上的箭頭,則A1的數值增加1,繼續單擊則A1的數值繼續增加.
10)保存并關閉該工作簿.
3.5 給控件命名 當創建一個控件時EXCEL會自動給它指定一個名字,但不便于理解和記憶,為控件取名的方法基本和給單元格或區域取名的方法相同.選中某個控件,再在位于公式欄上的"名字"編輯框輸入控件名字.這樣就給控件更改了名字.
3.6 使用用戶窗體 如果希望創建專業級的應用程序,并且方便用戶輸入數據,那么應該使用用戶窗體.用戶窗體可以作為程序的對話框和窗口.向用戶窗體添加控件基本類似于向工作表添加控件,然而第一步要創建一個用戶窗體.這可以通過VBA編輯器實現.具體按以下步驟操作:
1)打開"HOUR3"工作簿,選擇"工具"-"宏"-"VBA編輯器",打開VBA編輯器.
2)在VBA編輯器中選擇工具欄上的"插入用戶窗體"按鈕或者選擇"插入"菜單,從下拉菜單中選擇"用戶窗體" 現在,VBA編輯器中出現一個名為"USERFORM1"的窗體,"控件工具箱"同時出現,在其中有許多已經熟悉的控件,另外還有一些新的控件. 這些新的控件是:
A)切換按鈕:該控件如果被選中,那么會保持被按下的狀態.如果再次單擊它就恢復為沒有按下的狀態.EXCEL工具欄中有幾個這樣的按鈕,例如:"全屏顯示","加粗","下劃線"以及"窗體"工具欄中的"切換網格"等.
B)選項卡條(TabStrip):它是包含多個選項卡的控件.通常用來對相關的信息進行組織或分類.例如:你也許希望用選項卡條來顯示各個地區的銷售信息,可以給每個地區設置一個選項卡.在默認時,選項卡包含兩頁,分別叫做TAB1和TAB2,可以添加更多的選項卡.
C)多頁:外觀類似選項卡條,是包含一頁或多頁的控件.選項卡條給人相似的外觀,而多頁控件的各頁包含各自不同的控件,有各自不同的布局.多頁的例子很多,例如:"設置控件格式"對話框和"工具"菜單中的"選項"對話框.以及"格式"菜單中的"單元格..."對話框.
D)圖像控件:它允許向窗體上放置圖片.圖片格式須為:*.bmp,*.cur,*.gif,*.ico,*.jpg,*.wmf.
F)RefEdit:這是工具箱中默認情況下的最后一個控件。它外觀象文本框,通過這個控件可以將用戶窗體折疊起來,以便選擇單元格區域。還記得在使用fx“粘貼函數”時的情況嗎? 通過實踐,我們會逐漸掌握每個控件的特性,這的確需要花時間,但不必死記硬背。 在對用戶窗體設計得滿意時,可以對其進行預覽,方法是在VBA編輯器中選擇該窗體,單擊“運行”菜單中的三角符號“運行子過程/用戶窗體”,三角符號在VBA工具欄上也可能看得到,旁邊是一個垂直的等于符號,最右邊是個小正方形符號,它們類似于錄音機上的按鈕。運行窗體的另一個方法是按F5鍵。
小結:學習完本學時后,我們具備了用于程序界面設計的基本知識。我們對控件不在感到陌生,也明白如何向工作表和窗體添加控件,但控件的內容很多,需要邊用邊理解.此后,我們將從界面轉移到學習編寫代碼,并最終將二者融合。讓我們準備好學習編程吧!
3.7 疑難解答
問題1.怎樣決定控件的位置?如何選擇添加到工作表還是添加到用戶窗體?
解答:這完全取決于個人的愛好和應用程序的用戶.如果用戶對EXCEL非常熟悉,那么他們也許更希望以工作表的方式操作.在這種情況下不妨直接在工作表上創建控件;如果你的用戶對EXCEL不熟悉或者你需要給用戶一個專業的界面感覺,那么應該使用用戶窗體.
問題2.什么情況下該用選項卡條而不是多頁控件?
解答:如果每一頁具有相同布局,則應選擇選項卡條,否則應該選擇多頁.
本節作業
1.思考:
1)列舉兩種可以讓用戶進行多選一的控件。
2)如何將控件與單元格鏈接起來。
2.判斷:
1)只有在VBA編輯器中才能添加用戶窗體。
2)在VBA編輯器中看到的窗體網格線在運行時會自動顯示。
3.填空:( )是顯示靜態文本的控件。

第四課 理解變量和變量的作用(1)

4.1 代碼存在的位置:模塊 VBA代碼必須存放在某個位置,這個地方就是模塊。有兩種基本類型的模塊:標準模塊和類模塊。模塊中的每個過程或者是函數過程,或者是子程序概念.本課的最后部分將討論函數過程和子程序的區別。 新術語:
模塊:它是作為一個單元保存在一起的VBA定義和過程的集合。
類模塊:VBA允許你創建自己的對象,對象的定義包含在類模塊中。
你的大部分工作集中在標準模塊中(簡稱為模塊)當錄制宏時如果不存在模塊,EXCEL自動創建一個。EXCEL和VBA不關心代碼存放在哪一個模塊中,只要代碼存在于打開的工作簿中即可。
4.2 對模塊的概覽 過程被定義為VBA代碼的一個單元,過程中包括一系列用于執行某個任務或是進行某種計算的語句。工作簿的每個過程都有唯一的名字加以區分。 有兩種不同的過程:子程序和函數過程。子程序只執行一個或多個操作,而不返回數值。當錄制完宏查看代碼時,所看到的就是子程序。宏只能錄制子程序,而不能錄制函數過程。一個子程序的例子如清單4-1所示。 程序清單4-1 子程序的例子 Sub cmdSmallFont_Click()
With Selection.Font
.Name="Arial"
.FontStyle="Regular"
.Size=16
End With
End sub 上面列出的過程實際上是一個事件過程。通過它的名字,就可以知道這是一個事件過程。這個過程的名字是由一個對象的名字CmdSmallFont和一個事件的名字Click組成的,兩者之間用下劃線分開。如果還不明白,可以告訴你,CmdSmallFont是一個命令按鈕的名字。也就是說,當單擊這個命令按鈕時,就會運行這個事件過程。 函數過程通常情況下稱為函數,要返回一個數值。這個數值通常是計算的結果或是測試的結果,例如False 或True.正如前面所說,可以用VBA創建自定義函數。實際上可以在工作表上使用你創建的函數。程序清單4-2是一個計算價格的10%為運費的簡單例子。 程序清單4-2 簡單的用戶定義函數示例。 Public Function Shipping(Price)
Shipping = Price * 0.1
End Function 請注意,這個函數使用一個參數(Price).子程序和函數都可以使用參數。不論Price的值是多少,它都將決定運費額。Price可以是數字和單元格引用。函數返回計算出來的運費,這個函數可以用在單元格中。 A B
1 Price 100
2 Shipping =shipping(B1)
4.2.1 創建過程 創建第一個過程需要兩個基本步驟。首先,需要向工作簿中添加一個模塊。接著需要向模塊中添加一個工程。對于創建的每一個應用程序,只需添加一次模塊。可以使用多個模塊,但這是不必要的。某些開發者喜歡使用多個模塊,以便根據他們的目的或者窗體對過程進行組織。在本練習中,創建的過程只顯示一個消息框。 在本練習中創建的過程只顯示一個消息框。在本練習中使用Msgbox是為了提供一個可見的例子,雖然我們還沒有介紹過Msgbox語句,但是在本例中將使用它。要創建該過程,請按如下步驟進行: 1)打開一個新工作簿。
2)選擇"工具"-"宏"-"Visual Basic編輯器",打開VBA編輯器窗口。
3)在`VBA編輯器的左面,可以看到“工程資源管理器”窗口。在工程資源管理器窗口的“Thisworkbook"上單擊鼠標右鍵,選擇“插入”-“模塊”,這樣就將一個模塊添加到應用程序中了。(如果你沒有看見“工程資源管理器”窗口,可以按Ctrl+R)
4)選擇“插入”“過程”,顯示“添加過程”對話框。
5)輸入“第一個工程”作為過程名字。在“類型”分組框中,確認選擇了“子程序”。單擊“確定”按鈕。這樣一個新的過程就添加到模塊中了。可以在模塊中看到以 Public Sub 第一個過程()開始,以End Sub結束的語句結構。
6)在過程中插入光標,輸入以下語句并回車:
Msgbox "這是我的第一個過程"
在輸入Msgbox后,會自動彈出一個消息框告訴你有關這條命令的信息,稱之為自動列表技術。輸入完成的過程如下所示:
Public Sub 第一個過程()
Msgbox "這是我的第一個過程"
End Sub
VBA對子程序和函數有如下的命名規則:
* 名字中可以包含字母數字和下劃線。
* 名字中不能包含空格句號驚嘆號,也不能包含字符@ & $ #.
* 名字最多可以包含255個字符。
4.2.2 運行宏 創建這個過程后,可以運行一下。運行一個過程有幾種方法:可以直接使用“運行”菜單,“運行子程序/用戶窗體”工具欄按鈕或按下F5鍵。要運行一個過程,可以按照如下步驟: 1)單擊“運行子程序/用戶窗體”工具欄按鈕,過程執行并顯示一個消息框。
2)單擊消息框之中的“確定”按鈕,關閉該消息框。
4.3 保存對模塊所做的改變 要保存新過程,需要保存過程所駐留的工作簿.可以用VBA編輯器保存工作簿.具體步驟如下: 1)選擇"文件"-"保存工作簿".因為本工作簿還沒有保存過,所以要給它命名.
2)輸入"HOUR4"作為文件名并按回車鍵,則工作簿和模塊與過程都保存下來了.

第四課 理解變量和變量的作用(2)

4.4 變量 變量是用于臨時保存數值的地方.每次應用程序運行時,變量可能包含不同的數值,而在程序運行時,變量的數值可以改變. 為了說明為什么需要變量,可以按照如下步驟創建一個簡單的過程: 1)創建一個名為"你叫什么名字"的過程.
2)在過程中輸入如下代碼:
Inputbox "輸入你的名字:"
現在不要擔心inputbox語句的語法,將在第六學時中了解到有關這條命令的更多信息.
3)按下F5鍵運行過程,這時會顯示一個輸入框,要求輸入你的名字.
4)輸入你的名字并按"確定"按鈕,則結束該過程. 你輸入的名字到那里去了?如何找到用戶在輸入框中輸入的信息?在這種情況下,需要使用變量來存儲用戶輸入的結果.
4.4.1 變量的數據類型 使用變量的第一步是了解變量的數據類型.變量的數據類型控制變量允許保存何種類型的數據.表4-1列出了VBA支持的數據類型,還列出了各種類型的變量所需要的存儲空間和能夠存儲的數值范圍. 數據類型 存儲空間 數值范圍 Byte 1字節 0 - 255 Booleam 2字節 True或者False Integer 2字節 -32768 - 32767 Long(長整型) 4字節 -2147483648 - 2147483647 Single 4字節 負值范圍:
-3.402823E38 - -1.401298E-45
正值范圍:
1.401298E-45 - 3.402823E38 Double 8字節 負值范圍:-1.79769313486232E308 - -494065645841247E-324
正值范圍:4.94065645841247E-324 - 1.79769313486232E308 Currency 8字節 -922337203685477 - 922337203685477 Decimal 14字節 不包括小數時:
+/-79228162514264337593543950335
包括小數時:
+/7.9228162514264337593543950335 Date 8字節 1000年1月1日 - 9999年12月31日 Object 4字節 任何引用對象 String(長字符串) 10字節+1字節/字符 0 - 約20億 String(固定長度) 字符串的長度 1 - 約65400 Varient(數字) 16字節 Double范圍內的任何數值 Varient(文本) 22字節+1字節/字符 數據范圍和變長字符串相同 表4-1 VBA數據類型 作為ABV程序員,一個目標是選擇需要存儲空間盡量小的數據類型來保存所需要的數據,這正是表4-1提供各種數據類型存儲空間的原因。例如,要保存諸如班級學生總數這樣的小數字,那么Byte數據類型就足夠了。在這種情況下,使用Single數據類型只是對計算機存儲空間的浪費。
4.4.2 用Dim語句創建變量(聲明變量) 現在,你對變量可以使用的數據類型已經比較熟悉了,以下我們將創建變量.創建變量可以使用Dim語句,創建變量通常成為"聲明變量" Dim語句的基本語法如下: Dim 變量名 AS 數據類型 這條語法中的變量名代表將要創建的變量名.對變量的命名規則和對過程的命名規則相同.這條語句中的數據類型部分可以是表4-1中的任何一種數據類型. 變量名必須以字母開始,并且只能包含字母數字和特定的特殊字符,不能包含空格句號驚嘆號,也不能包含字符@ & $ #.名字最大長度為255個字符 在接下來的練習中將說明如何在VBA中使用變量,你將要輸入你的名字,并用一個消息框將其顯示出來.具體步驟如下: 1)創建一個名為"顯示你的名字"的子程序.
2)輸入以下代碼:
Public Sub 顯示你的名字()
Dim s名字 As String
s名字 = Inputbox("請輸入你的名字:")
Msgbox "你好"& s名字
End Sub
3)將鼠標放到過程中的任何地方,按下F5鍵運行過程,會顯示一個輸入框.
4)輸入你自己的名字并按回車鍵,會顯示一個消息框,顯示的文字中包含你自己的名字.
5)單擊"確定"按鈕,返回過程中. 在Dim語句中不必提供數據類型.如果沒有數據類型,變量將被定義為Variant類型,因為VBA中默認的數據類型是Variant.你知道這一點后,最初的反應也許是覺得應該不用自己決定數據類型,而將一切拋給VBA.這種觀念是完全錯誤的.你必須決定選擇使用何種數據類型。因為Variant數據類型占用存儲空間較大(16或22字節)而且它將影響程序的性能。VBA必須辨別Variant類型的變量中存儲了何種類型的數據。
4.4.3 變量命名的慣例 下表給出了推薦的變量命名慣例 數據類型 短前綴 長前綴 Array a ary Boolean f bin Byte b bit Currency c cur Double d dbl Date/Time dt dtm/dat Integer i int Long l lng Object o obj Single sng String s str Variant v var 表4-2 變量命名的前綴 4.4.4 使用數組 如果你使用過其他編程序語言,可能對數組已經比較熟悉了.數組是具有相同數據類型并共同享有一個名字的一組變量的集合.數組中的元素通過索引數字加以區分,定義數組的方法如下: Dim array_name(n) As type (其中n是數組元素的個數) 例如,如果要創建保存10個學生名字的數組,可以用以下語句:
???? Dim s學生名字(9) As Integer
注意,括號中的數字是9而不是10.這是因為在默認的情況下,第一個索引數字是0.數組在處理相似信息時非常有用.假設要處理15門考試成績,可以創建15個獨立的變量,這意味著要使用15個Dim語句。也可以創建一個數組來保存考試成績,具體如下:
Dim s考試成績(14) As Integer
聲明數組時的另一種方法是不給定大小。可以在程序運行時定義其大小。通過創建動態數組就可以做到。例如,你的程序要創建一表格,可以提示用戶輸入表格的行和列的數目。聲明動態數組的語法如下:
Dim dyn_array() As type
對數組聲明后可以在程序運行時用:ReDim語句指定數組的大小:
ReDim dyn_array()(array_size)
參數array_size代表數組的新大小。如果要保留數組的數值,請在ReDim語句后使用保留字Preserve,具體語法如下:
ReDim Preserve dyn_array(array_size)
4.4.5 變量賦值 聲明變量后就可以給變量賦值。請注意下列語句中為數組變量賦值時索引數字的使用。 程序清單4-4
Dim i人數 As Integer
Dim i考試成績 As Integer
Dim i As Integer
i人數 = inputbox("輸入學生的人數:")
ReDim Preserve i考試成績(i數量)
For i = 1 to i人數
i考試成績(i) = inputbox("輸入考試成績"& i )
Next

第四課 理解變量和變量的作用(3)

4.5 使用常量 現在,你已經知道變量是存儲非靜態信息的存儲容器.當存儲靜態信息時可以創建常量.它可以供程序多次使用而且便于記憶.比如圓周率比3.1415926好理解得多. 要聲明常量并設置常量的值,需要使用const語句.常量聲明后,不能對它賦一個新的值.例如,假設需要聲明一個常量來保存銷項稅率,可以使用以下語句:
conet 銷項稅率 As Long = 0.17
通常常量聲明時用全大寫字母以區分變量.
4.6 作用域 到現在為止,已經學習了如何定義變量和常量,但是還不知道在何處定義.可以在兩個地方定義常量和變量: 過程中定義和在模塊頂部一個名為"通用聲明"的區域內定義.而且定義的位置就決定了租用域. 在過程中聲明,該變量只能在該過程中使用,其他過程中不能使用這個變量和常量,這中變量成為局部變量或過程級變量;在模塊頂部聲明的變量稱為模塊級變量,該變量在該模塊的所有過程中都可以使用。 還有一種等級的作用域稱為公共級。公共級變量可以在應用程序的任何過程中使用,不論過程和變量是否定義在一個模塊。這就使得公共級變量在使用中十分靈活,但是公共級變量在程序運行時一直保留在內存中,這樣就占用了系統資源。要創建公共級變量,可以用Public語句,具體語法如下: Public variablename As datatype 要創建公共級常量,具體語法如下: Public const CONSTANAME datatype = value 公共級變量或常量必須在模塊頂部的“通用聲明”區域中定義。
4.7 小結
本課的重點是變量和常量。在本課中你學會了如何創建變量來保存非靜態的數據。我們了解了VBA的數據類型,我們也學會了創建常量來保存靜態的數據。本課的最后部分我們學習了變量和常量的作用域。 4.8 疑難解答 1.如果希望在多個位置使用變量的數據,應該在何處定義該變量? 答:必須在模塊頂部的“通用聲明”區域內定義。對于模塊級變量用Dim語句,對于公共級變量用Public語句 2.模塊是否獨立于工作簿? 答:不,實際上模塊是工作簿的一部分,當保存工作簿時,對模塊所做的改變也同時保存下來. 3.為什么不應該將所有變量定義為Variant數據類型? 答:Variant類型的數據,占用較多的內存,并且影響應用程序的性能.

第五課 利用VBA設置工作表使用權限

第五課 利用VBA設置工作表使用權限 Excel Home 一般保護工作表采取的方法是用EXCEL菜單中的“保護”命令,有時這尚嫌不足,比如一些機密文件根本要讓某些使用者無法看到,但又需要他來操作工作簿中的其他表,怎么辦? 可以打開VBA編輯器,打開“工程資源管理器”,雙擊該工作表,現在出現的是設置該表的屬性的編輯窗口,單擊窗口左上的下拉列表框,選擇worksheet ,這時再從該窗口右上方的列表框中選擇Active(“激活”),這時自動顯示如下的語句塊:
Private Sub Worksheet_Activate()
End Sub
在其中加入代碼:(假設用"123"作為密碼,Sheet"機密文檔"為限制權限文
檔,sheet"普通文檔"為工作簿中你認為任何適合的工作表)
If Application.InputBox("請輸入操作權限密碼:") = 123 Then
Range("A1").Select
Else
Msgbox "密碼錯誤,即將退出!"
Sheets("普通文檔").Select
End if
程序如下:
Private Sub Worksheet_Activate()
If Application.InputBox("請輸入操作權限密碼:") = 123 Then
Range("A1").Select
Else
MsgBox "密碼錯誤,即將退出!"
Sheets("普通文檔").Select
End If
End Sub
這樣做仍有一個問題,就是越權使用者仍會看到一些文件的片段,即在提示密碼的那段時間。好,你可以這樣做,用上述方法選擇工作表的Deactivate事件,輸入以下代碼:
Sheets("機密文檔").Cells.Font.ColorIndex = 2
這段程序使得此工作表在不被激活時,所有文字為白色。然后,在第一個程序中的Range("A1").Select后插入一行,寫入以下代碼:
ActiveSheet.Cells.Font.ColorIndex = 56
這段程序,在你輸入正確密碼后,將該表所有文字轉變為深灰色。
完整的程序如下:
Private Sub Worksheet_Activate()
If Application.InputBox("請輸入操作權限密碼:") = 123 Then
Range("A1").Select
Sheets("機密文檔").Cells.Font.ColorIndex = 56
Else
MsgBox "密碼錯誤,即將退出!"
Sheets("普通文檔").Select
End If

第六課 提高Excel中VBA的效率

由于Microsoft Office辦公套件的廣泛應用,以及該軟件版本的不斷提升,功能不斷完善,在Office辦公套件平臺上開發出的的VBA應用程序越來越多,而VBA是一種宏語言,在運行速度上有很大的限制。因此VBA編程的方法直接關系到VBA程序運行的效率,本文列舉了一些提高VBA程序運行效率的方法。 方法1:盡量使用VBA原有的屬性、方法和Worksheet函數 由于Excel對象多達百多個,對象的屬性、方法、事件多不勝數,對于初學者來說可能對它們不全部了解,這就產生了編程者經常編寫與Excel對象的屬性、方法相同功能的VBA代碼段,而這些代碼段的運行效率顯然與Excel對象的屬性、方法完成任務的速度相差甚大。例如用Range的屬性CurrentRegion來返回Range 對象,該對象代表當前區。(當前區指以任意空白行及空白列的組合為邊界的區域)。同樣功能的VBA代碼需數十行。因此編程前應盡可能多地了解Excel對象的屬性、方法。 充分利用Worksheet函數是提高程序運行速度的極度有效的方法。如求平均工資的例子:???? For Each c In
????? Worksheet(1).Range(″A1:A1000″)
TotalValue = TotalValue + c.Value
Next
AverageValue = TotalValue / Worksheet(1).Range(″A1:A1000″).Rows.Count
而下面代碼程序比上面例子快得多:
AverageValue=Application.WorksheetFunction.Average(Worksheets(1).Range(″A1:A1000″))
其它函數如Count,Counta,Countif,Match,Lookup等等,都能代替相同功能的VBA程序代碼,提高程序的運行速度。 方法2:盡量減少使用對象引用,尤其在循環中 每一個Excel對象的屬性、方法的調用都需要通過OLE接口的一個或多個調用,這些OLE調用都是需要時間的,減少使用對象引用能加快VBA代碼的運行。例如 1.使用With語句。
? Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.Name=″Pay″
??? Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.FontStyle=″Bold″ ...
則以下語句比上面的快
With Workbooks(1).Sheets(1).Range(″A1:A1000″).Font
.Name = ″Pay″
.FontStyle = ″Bold″
...
End With 2.使用對象變量。
如果你發現一個對象引用被多次使用,則你可以將此對象用Set 設置為對象變量,以減少對對象的訪問。如:
Workbooks(1).Sheets(1).Range(″A1″).Value = 100
Workbooks(1).Sheets(1).Range(″A2″).Value = 200
則以下代碼比上面的要快:
Set MySheet = Workbooks(1).Sheets(1)
MySheet.Range(″A1″).Value = 100
MySheet.Range(″A2″).Value = 200 3.在循環中要盡量減少對象的訪問。
For k = 1 To 1000
Sheets(″Sheet1″).Select
Cells(k,1).Value = Cells(1,1).Value
Next k
則以下代碼比上面的要快:
Set TheValue = Cells(1,1).Value
Sheets(″Sheet1″).Select
For k = 1 To 1000
Cells(k,1).Value = TheValue
Next k 方法3:減少對象的激活和選擇 如果你的通過錄制宏來學習VBA的,則你的VBA程序里一定充滿了對象的激活和選擇,例如Workbooks(XXX).Activate、Sheets(XXX).Select、Range(XXX).Select等,但事實上大多數情況下這些操作不是必需的。例如 Sheets(″Sheet3″).Select
Range(″A1″).Value = 100
Range(″A2″).Value = 200
可改為:
With Sheets(″Sheet3″)
.Range(″A1″).Value = 100
.Range(″A2″).Value = 200
End With 方法4:關閉屏幕更新 如果你的VBA程序前面三條做得比較差,則關閉屏幕更新是提高VBA程序運行速度的最有效的方法,縮短運行時間2/3左右。關閉屏幕更新的方法:
Application.ScreenUpdate = False
請不要忘記VBA程序運行結束時再將該值設回來:
Application.ScreenUpdate = True 以上是提高VBA運行效率的比較有效的幾種方法。

第七課 如何在Excel里使用定時器

用過 Excel 97 里的加載宏 "定時保存" 嗎?可惜它的源程序是加密的,現在就上傳一篇介紹實現它的文檔。 在 Office 里有個方法是 application.ontime ,具體函數如下:
expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
如果想進一步了解,請參閱 Excel 的幫助。 這個函數是用來安排一個過程在將來的特定時間運行,(可為某個日期的指定時間,也可為指定的時間段之后)。通過這個函數我們就可以在 Excel 里編寫自己的定時程序了。下面就舉兩個例子來說明它。 1.在下午 17:00:00 的時候顯示一個對話框。 Sub Run_it()
Application.OnTime TimeValue("17:00:00"), "Show_my_msg"
'設置定時器在 17:00:00 激活,激活后運行 Show_my_msg 。
End Sub
Sub Show_my_msg()
msg = MsgBox("現在是 17:00:00 !", vbInformation, "自定義信息")
End Sub
2.模仿 Excel 97 里的 "自動保存宏",在這里定時 5 秒出現一次 Sub auto_open()
MsgBox "歡迎你,在這篇文檔里,每 5 秒出現一次保存的提示!", vbInformation, "請注意!"
Call runtimer '打開文檔時自動運行
End Sub
Sub runtimer()
Application.OnTime Now + TimeValue("00:00:05"), "saveit"
' Now + TimeValue("00:15:00") 指定在當前時間過 5 秒鐘開始運行 Saveit 這個過程。
End Sub
Sub SaveIt()
msg = MsgBox("朋友,你已經工作很久了,現在就存盤嗎?" & Chr(13) _
& "選擇是:立刻存盤" & Chr(13) _
& "選擇否:暫不存盤" & Chr(13) _
& "選擇取消:不再出現這個提示", vbYesNoCancel + 64, "休息一會吧!")
'提示用戶保存當前活動文檔。 If msg = vbYes Then ActiveWorkbook.Save Else If msg = vbCancel Then Exit Sub
Call runtimer '如果用戶沒有選擇取消就再次調用 Runtimer
End Sub
以上只是兩個簡單的例子,有興趣的話,可以利用 Application.Ontime 這個函數寫出更多更有用的定時程序。

?

總結

以上是生活随笔為你收集整理的excel中定义VBA的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。