版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第 2 章 VBA 程序設(shè)計(jì)2.1工作簿和工作表一、創(chuàng)建和打開工作簿W(wǎng)orkbooks.Add創(chuàng)建一個(gè)新的工作簿Set NewBook=Workbooks.Add建工作簿,用對(duì)象變量表示NewBook.SaveAs File name:=Test.xls工作簿另存為Workbooks.Open(D:Test.xls)打開工作簿二、引用工作表Worksheets(1).Activate激活第一張工作表Sheets(4).Activate激活四張工作表Worksheets(Sheet1).Activate激活指定的工作表Sheets(Chart1).Activate激活圖表Chart1”2.2單元
2、格和區(qū)域一、引用單元格和區(qū)域1用A1樣式記號(hào)引用單元格和單元格區(qū)域表2.1使用Range屬性的A1樣式引用示例引用含義Ra nge(A1)單元格A1Ran ge(A1:B5)從單元格A1到單元格B5的區(qū)域Ran ge(C5:D9,G9:H16)多塊選定區(qū)域Ran ge(A:A)A列Ra nge(1:1)第一行Ra nge(A:C)從A列到C列的區(qū)域Ran ge(1:5)從第一行到第五行的區(qū)域Ran ge(1:1,3:3,8:8)第1、3和8行Ra nge(A:A,C:C,F:F)A、C和F列【例2.6】將工作表“Sheet1”中單元格區(qū)域A1:D5的字體設(shè)置為加粗。Sheets(Sheet1)
3、.Ra nge(A1:D5).Fo nt.Bold=True2.用編號(hào)引用單元格【例2.7】將Sheet1上的單元格A6的Value屬性設(shè)置為10Worksheets(Sheet1).Cells(6,1).Value=10【例2.9】清除活動(dòng)工作簿中Sheet1上的所有單元格的內(nèi)容Worksheets(Sheet1).Cells.ClearCo nte nts【例2.10】假設(shè)工作簿中Sheet1的A列是員工姓名(不超過50人),Sheet2的A列是員工 姓名、B列是對(duì)應(yīng)的電話號(hào)碼?,F(xiàn)在需將所有員工的電話號(hào)碼填寫到Sheet1中的B列(注:Sheet1中姓名“李三”在Sheet2中可能為“李三
4、”,中間沒有空格)。3.引用行和列【例2.11】將Sheet1上第一行單元格區(qū)域的Font對(duì)象Bold屬性設(shè)置為True。Worksheets(Sheet1).Rows(1).Fo nt.Bold=True表2.2 Rows和Columns屬性的應(yīng)用示例引用含義Rows(1)第一行Rows工作表上所有的行Colu mn s(1)第一列Colum ns(A)第一列Colu mns工作表上所有的列【例2.12】將活動(dòng)工作表上的第一行、第三行和第五行的字體設(shè)置為加粗。Set myU n=Un io n(Rows(1),Rows(3),Rows(5)myUn.Fon t.Bold=True4.用快捷記
5、號(hào)引用單元格【例2.13】將工作表“Sheet1”的單元格區(qū)域“A1:B5”內(nèi)容清除。Worksheets(Sheet1).A1:B5.CIearCo nte nts5.引用命名區(qū)域【例2.14】將當(dāng)前工作表中名為“AA”的單元格區(qū)域設(shè)置為30。AA.Value=30【例2.15】用GoTo方法激活工作簿“Book1.xls”,選定區(qū)域“AA”,然后清除該區(qū)域內(nèi)容。Applicatio n. Goto Refere nce:=Book1.xls!AASelectio n.ClearC on te nts【例2.16】用ForEach.Next循環(huán)語句在命名區(qū)域中的每一個(gè)單元格上循環(huán)。如果該區(qū)域
6、中 的任一單元格的值超過25,就將該單元格的顏色更改為黃色。For Each c In Ran ge(AA)If c.Value25 The nc.In terior.ColorI ndex=27End IfNext c6.相對(duì)于其他單元格來引用單元格【例2.17】將位于活動(dòng)單元格下一行和右邊三列的單元格的內(nèi)容設(shè)置為雙下劃線格式。ActiveCell.Offset(1,3).Fo nt.U nderli ne=xlDouble7.用Range對(duì)象引用單元格【例2.18】將Sheet1上的單元格區(qū)域A1:D5賦予該變量,隨后用該變量代替該區(qū)域?qū)ο螅?填充隨機(jī)函數(shù)。Set myRa nge=Wor
7、ksheets(Sheet1).Ra nge(A1:D5)myRa nge.Formula=RAND()8.引用多個(gè)單元格區(qū)域【例2.19】清除當(dāng)前工作表上三個(gè)區(qū)域的內(nèi)容。Ra nge(C5:D9,G9:H16,B14:D18).CIearCo ntentsRa nge(MyRa nge,YourRa nge,HisRa nge).CIearCo ntents【例2.20】將組合區(qū)域的字體設(shè)置為加粗。Set r仁Sheets(Sheet1).Ra nge(A1:B2)Set r2=Sheets(Sheet1).Ra nge(C3:D4)Set myMR=U nion (r1,r2)myMR.F
8、o nt.Bold=True【例2.21】計(jì)算選定區(qū)域中的數(shù)目,如果有多個(gè)區(qū)域,就顯示一則警告消息。If Selectio n.Areas.Cou nt1 The nMsgBox 請(qǐng)不要選擇多個(gè)區(qū)域!”End If二、 在單元格區(qū)域中循環(huán)【例2.22】 將單元格區(qū)域C1:C20所有絕對(duì)值小于10的數(shù)字都設(shè)置紅色。For Cnt=1To 20Set curC=Worksheets(Sheet1).Cells(Cnt,3)If Abs(curC.Value)10 Then curC.Font.ColorIndex=3 Next Cnt求區(qū)域末尾行號(hào)常用的方法:r=Range(A1).End(xlD
9、own).Row 求A1單元格數(shù)據(jù)區(qū)末尾行號(hào)r=Cells(1,1).End(xlDown).Row 求A1單元格數(shù)據(jù)區(qū)末尾行號(hào)r=Range(A65536).End(xlUp).Row 求A列數(shù)據(jù)區(qū)末尾行號(hào)r=Cells(65536,1).End(xlUp).Row 求A列數(shù)據(jù)區(qū)末尾行號(hào)r=Columns(1).End(xlDown).Row求A列數(shù)據(jù)區(qū)末尾行號(hào)求區(qū)域末尾列號(hào)常用的方法:c=Range(A1).End(xlToRight).Column 求A1單元格數(shù)據(jù)區(qū)末尾列號(hào)c=Cells(1,1).End(xlToRight).Column求A1單元格數(shù)據(jù)區(qū)末尾列號(hào)c=Cells(1,
10、256).End(xlToLeft).Column 求第1行數(shù)據(jù)區(qū)末尾列號(hào)c=Rows(1).End(xlToRight).Column 求第1行數(shù)據(jù)區(qū)末尾列號(hào) 【例2.23】將單元格區(qū)域A1:D10所有絕對(duì)值小于10的數(shù)字都設(shè)置為紅色。For Each c In Worksheets(Sheet1).Range(A1:D10).CellsIf Abs(c.Value)10 Then c.Font.ColorIndex=3 Next【例2.24】將活動(dòng)單元格區(qū)域所有絕對(duì)值小于10的數(shù)字都設(shè)置為紅色。For Each c In ActiveCell.CurrentRegion.CellsIf A
11、bs(c.Value)10 Then c.Font.ColorIndex=3 Next三、選定和激活單元格1.使用Select方法和Selection屬性【例2.25】將A1:B1單元格中的內(nèi)容加粗。Range(A1:B1).Select Selection.Font.Bold=True也可以用下面語句:Range(A1:B1).Font.Bold=True2.選定活動(dòng)工作表上的單元格【例2.26】將Sheetl中的一行復(fù)制到Sheet2上。Worksheets(Sheet1).Rows(1).CopyWorksheets(Sheet2).SelectWorksheets(Sheet2).Ro
12、ws(1).SelectWorksheets(Sheet2).Paste3.激活選定區(qū)域內(nèi)的單元格【例2.27】選定一個(gè)區(qū)域,激活區(qū)域內(nèi)的一個(gè)單元格,但并不改變選定區(qū)域。Range(A1:D4).SelectRange(B2).Activate四、處理三維區(qū)域【例2.28】設(shè)置三維單元格區(qū)域的邊框格式。Sheets(Array(Sheet2,Sheet3,Sheet5).SelectRange(A1:H1).SelectSelection.Borders(xlBottom).LineStyle=xlDouble【例2.29】用FillAcrossSheets方法將Sheet2上指定區(qū)域的格式和
13、內(nèi)容復(fù)制到該工作簿中所 有工作表上的相應(yīng)區(qū)域中。第4頁Worksheets.FillAcrossSheets(Worksheets(Sheet2).Range(A1:H1)五、處理活動(dòng)單元格【例2.30】使單元格B5成為活動(dòng)單元格,然后將其字體設(shè)置為加粗。Worksheets(Sheet1).Range(B5).ActivateActiveCell.Font.Bold=True【例2.31】在選定區(qū)域內(nèi)的活動(dòng)單元格中插入文本, 然后將活動(dòng)單元格右移一格, 但并不更 改選定區(qū)域。Range(A1:D10).SelectActiveCell.Value=姓名”ActiveCell.Offset(0
14、,1).Activate【例2.32】將選定區(qū)域擴(kuò)充到與活動(dòng)單元格相鄰的包含數(shù)據(jù)的單元格中。ActiveCell.CurrentRegion.Select其中,CurrentRegion屬性返回由空白行和空白列所包圍的單元格區(qū)域。范例2-1從區(qū)域中刪除重復(fù)的內(nèi)容在Excel當(dāng)前工作表B列存放一些數(shù)據(jù),現(xiàn)要列出這些數(shù)據(jù)互不重復(fù)的值, 放到D列。1建函數(shù)UnqV2編寫子程序nodupa范例2-2在Excel工作表列出指定文件夾中所有文件的目錄信息。1進(jìn)入VBE在工具”菜單中選擇引用”項(xiàng),在引用”對(duì)話框中選中“Microsoft ScriptingRun time”項(xiàng)。2建立子程序“列文件目錄”范例
15、2-3自動(dòng)生成年歷子程序GenerateCalendar(分析)2.3工作表函數(shù)與圖形一、在VBA中使用Excel工作表函數(shù)1.在VBA中調(diào)用工作表函數(shù)【例2.33】使用Min工作表函數(shù)求出區(qū)域中的最小值。Set myR=Worksheets(Sheet1).Range(A1:C10)answer=Application.WorksheetFunction.Min(myR)MsgBox answer注意:VBA函數(shù)和Excel工作表函數(shù)可能同名,但作用和引用方式是不同的。2.在單元格中插入工作表函數(shù)【例2.34】將RAND(隨機(jī)數(shù))工作表函數(shù)賦給Sheet1上A1:B3區(qū)域的Formula屬性
16、。Worksheets(Sheet1).Range(A1:B3).Formula=RAND()【例2.35】下面程序使用工作表函數(shù)Pmt來計(jì)算住宅抵押貸款的支付額。Sub Fml()Static lAmt,lInt,lTrm lAmt=Application.InputBox(Prompt:=貸款額:, Default:=lAmt,Type:=1)lInt=Application.InputBox(Prompt:=年利率:,Default:=lInt,Type:=1) lTrm=Application.InputBox(Prompt:=年限:,Default:=lTrm,Type:=1) lP
17、mt=Application.WorksheetFunction.Pmt(lInt/1200,lTrm*12,lAmt)MsgBox月支付額:&Format(IPmt,Curre ncy)End Sub二、處理圖形對(duì)象1.設(shè)置圖形的屬性【例2.36】設(shè)置指定圖形的前景色。第5頁Worksheets(1).Shapes(1).FiII.ForeCoIor.RGB=RGB(255,0,0)2.同時(shí)對(duì)多個(gè)圖形應(yīng)用屬性或方法對(duì)多個(gè)選定圖形通過構(gòu)造ShapeRange集合,并直接對(duì)該ShapeRange集合應(yīng)用適當(dāng)?shù)膶?性和方法,可執(zhí)行同一操作。也可在圖形的Shapes集合或ShapeRange
18、集合中循環(huán),對(duì)每個(gè)單獨(dú)的Shape對(duì)象應(yīng)用適 當(dāng)?shù)膶傩院头椒▉韴?zhí)行該操作。3.創(chuàng)建ShapeRange集合【例2.37】創(chuàng)建選定的圖形ShapeRange對(duì)象,然后填充綠色。Set sr=SeIection.ShapeRange sr.FiII.ForeCoIor.SchemeCoIor=17注:先選中圖形4.對(duì)ShapeRange集合應(yīng)用屬性或方法【例2.38】假設(shè)在當(dāng)前工作表上建立了兩個(gè)圖形“Sp1”和“Sp2”。下面程序構(gòu)造包含圖形“Sp1”和“Sp2”的圖形區(qū)域,并對(duì)這些圖形應(yīng)用漸變填充格式。Set myD=WorkSheets(1)Set myR=myD.Shapes.Range(A
19、rray(Sp1,Sp2)myR.FiII.PresetGradient msoGradientHorizontaI,1,msoGradientBrass5.在Shapes集合或ShapeRange集合中循環(huán)【例2.39】在當(dāng)前工作表上對(duì)所有圖形進(jìn)行循環(huán),更改每個(gè)自選圖形的前景色。Set myD=WorkSheets(1)For Each sh In myD.ShapesIf sh.Type=msoAutoShape Then sh.FiII.ForeCoIor.RGB=RGB(255,0,0) sh.FiII.VisibIe=msoTrueEnd IfNext【例2.40】對(duì)當(dāng)前活動(dòng)窗口中所
20、有選定的圖形構(gòu)造一個(gè)ShapeRange集合,并設(shè)置每個(gè)選定圖形的填充色。For Each sh In ActiveWindow.SeIection.ShapeRange sh.FiII.VisibIe=msoTruesh.FiII.SoIidsh.Fill.ForeColor.SchemeColor=57Next注:先選中圖形范例2-4多元一次方程組求解界面初始化程序設(shè)計(jì) 求解方程組程序設(shè)計(jì) 計(jì)算系數(shù)矩陣a的逆矩陣(用工作表函數(shù)MInverse) 逆矩陣與向量b進(jìn)行矩陣相乘得到向量x(用工作表函數(shù)MMult)求矩陣行列式的值(用工作表函數(shù)MDeterm)范例2-5創(chuàng)建動(dòng)態(tài)三維圖表1選中A3:
21、D9區(qū)域,單擊“圖表向?qū)А卑粹o,創(chuàng)建“三維柱形圖”,插入當(dāng)前工作表。2錄制新宏:在繪圖區(qū)快捷菜單上選擇“設(shè)置三維視圖格式”項(xiàng),設(shè)置上下仰角、左右旋轉(zhuǎn)值均為0,得到有關(guān)的語句。3編寫子程序“動(dòng)態(tài)效果2.4 Word文檔操作一、使用文本1將文本插入文檔【例2.41】在活動(dòng)文檔的末尾插入字符“#”。ActiveDocument.Content.InsertAfter Text:=#【例2.42】在所選內(nèi)容之前或光標(biāo)位置之前插入字符“*”。第6頁Selection.InsertBefore Text:=*2.從文檔返回文本【例2.43】返回選定的文本。strT=Selection.Text【例2.44
22、】返回活動(dòng)文檔中的第一個(gè)單詞。sFW=ActiveDocument.Words(1).Text【例2.45】刪除Word當(dāng)前文檔選定部分的多余空格。str_in=Trim(Selection.text) str_out=For i=1 To Len(str_in)strch=Mid(str_in,i,1)If strch Or Right(str_out,1) Thenstr_out=str_out&strchEnd IfNext iSelection.text=str_out3.查找和替換【例2.46】查找并選定文字。With Selection.Find.Text=VBA.Exec
23、uteEnd With注:可通過宏錄制獲得【例2.47】查找而不選定文字。With ActiveDocument.Content.Find.Text=VBA.Forward=True.Execute If.Found=True Then.Parent.Bold=TrueEnd With使用Execute方法的參數(shù),執(zhí)行結(jié)果相同。Set myR=ActiveDocument.ContentmyR.Find.Execute FindText:=VBA,Forward:=TrueIf myR.Find.Found Then myR.Bold=True【例2.48】查找并替換文本。With Selec
24、tion.Find.Text=VBA.Replacement.Text=VisualBasic.Execute Replace:=wdReplaceAllEnd With【例2.49】查找并替換格式。With ActiveDocument.Content.Find.Font.Bold=True.Replacement.Font.Bold=False.Execute FindText:=,ReplaceWith:=, Format:=True,Replace:=wdReplaceAll End With4.將格式應(yīng)用于文本【例2.50】將格式應(yīng)用于選定內(nèi)容。WithSelection.FontN
25、ame=楷體_GB2312第7頁.Size=16End WithWith Selecti on .ParagraphFormat.LineUn itBefore=0.5.LineUnitAfter=0.5End With【例2 . 5 1】將格式應(yīng)用于某一區(qū)域。Set rgF=ActiveDocument.Range(Start:=ActiveDocument.Paragraphs(1).Range.Start,_End:=ActiveDocument.Paragraphs(3).Range.End)With rgF.Font.Name=楷體_GB2312.Size=16End With二、使
26、用Word對(duì)象1.選定文檔中的對(duì)象【例2.52】選定活動(dòng)文檔中的第一個(gè)表格。ActiveDocument.Tables(1).Select【例2.53】選定活動(dòng)文檔中的前四個(gè)段落。Set RnP=ActiveDocument.Range(Start:=ActiveDocument.Paragraphs(1).Range.Start,_End:=ActiveDocument.Paragraphs(4).Range.End)RnP.Select2.將Range對(duì)象賦給變量【例】將活動(dòng)文檔中的第一個(gè)和第二個(gè)單詞賦給變量Range1和Range2Set Range1=ActiveDocument.Wo
27、rds(1)Set Range2=ActiveDocument.Words(2)【例】將一個(gè)Range對(duì)象變量的值送給另一個(gè)Range對(duì)象變量Set Range2=Range1【例】創(chuàng)建一個(gè)Range1對(duì)象的新副本Range2Set Range2=Range1.Duplicate3.修改文檔的某一部分【例】將所選內(nèi)容的第一個(gè)單詞復(fù)制到“剪貼板” 。Selection.Words(1).Copy【例】將活動(dòng)文檔的第一段復(fù)制到“剪貼板” 。ActiveDocument.Paragraphs(1).Range.Copy【例】設(shè)置活動(dòng)文檔中第一個(gè)單詞為大寫。ActiveDocument.Words(1
28、).Case=wdUpperCase【例】將當(dāng)前節(jié)的下邊距設(shè)為0.5英寸。Selection.Sections(1).PageSetup.BottomMargin=InchesToPoints(0.5)【例】將活動(dòng)文檔的字符間距設(shè)為兩倍。ActiveDocument.Content.ParagraphFormat.Space2【例2.54】創(chuàng)建一個(gè)Range對(duì)象,引用活動(dòng)文檔的前10個(gè)字符,然后利用該對(duì)象設(shè)置字符 的字號(hào)。Se trgTC=ActiveDocument.Range(Start:=0,End:=10) rgTC.Font.Size=204引用活動(dòng)文檔元素【例】將邊框應(yīng)用于選定內(nèi)容
29、的第一段Selection.Paragraphs(1).Borders.Enable=True【例2.55】將底紋應(yīng)用于選定內(nèi)容中第一張表格的首行。第8頁If Selection.Tables.Count=1 ThenSelection.Tables(1).Rows(1).Shading.Texture=wdTexture25PercentElseMsgBox 您選擇的區(qū)域沒有包含表!End If【例2.56】將底紋應(yīng)用于選定內(nèi)容中每張表格的首行。Dim tbl AsTableIf Selection.Tables.Count=1 ThenFor Each tbl In Selection.T
30、ablestbl.Rows(1).Shading.Texture=wdTexture30PercentNext tblEnd If5.處理表格【例2.57】創(chuàng)建一張表格,插入文字,并應(yīng)用格式。Set docA=ActiveDocumentSet tblN=docA.Tables.Add(Range:=docA.Range(Start:=0,End:=0), NumRows:=3,NumColumns:=4)C=1For Each celT In tblN.Range.CellscelT.Range.lnsertAfter內(nèi)容&CC=C+1Next celTtblN.AutoFormat
31、Format:=wdTableFormatColorful2,ApplyBorders:=True,ApplyFont:=True,ApplyColor:=True【例2.58】在表格單元格中插入文字。With ActiveDocument.Tables(1).Cell(Row:=1,Column:=1).Range.Delete.lnsertAfter Text:=新內(nèi)容End With【例2.59】返回表格單元格中的文字。Set tbl=ActiveDocument.Tables(1)For Each cel ln tbl.Rows(1).CellsSet rng=cel.Rangerng
32、.MoveEnd Unit:=wdCharacter,Count:= -1 取消一個(gè)非正常字符MsgBox rng.TextNext cel【例2.60】將表格單元格內(nèi)容送數(shù)組。Dim strC() As StringWith ActiveDocument.Tables(1).RangeCes=.Cells.CountReDim strC(Ces)C=1For Each cel ln.CellsSet rng=cel.Range第9頁rng.MoveEnd Unit:= wdCharacter,Count:= -1 取消一個(gè)非正常字符strC(C)=rngC=C+1Next celEnd Wi
33、th6.處理文檔【例2.61】新建文檔Set docN=Documents.AddWith docN.Content.Font.Name=楷體_GB2312.SaveAsFileName:=test.docEnd With【例2.62】打開文檔Documents.OpenFile Name:=C:litest.doc【例2.63】保存文檔Documents(tmp.doc).SaveActiveDocument.SaveAs FileName:=tmp2.doc【例2.64】關(guān)閉文檔Documents(Sales.doc).Close SaveChanges:=wdSaveChanges【例2
34、.65】激活文檔For Each doc In DocumentsIf InStr(doc.Name,Doc2.doc) Thendoc.ActivateEnd IfNext doc范例2-6 Word表格計(jì)算1在Word中建立一個(gè)工資表格。2編寫子程序2.5控件與窗體一、在Excel工作表上使用控件1.“窗體”工具欄控件在“窗體”工具欄中單擊需要的控件。2在工作表上拖動(dòng)鼠標(biāo)畫出一個(gè)矩形(控件的大小)。3在控件上右擊,選擇“設(shè)置控件格式”?!纠繚L動(dòng)條控件: “控制”卡, “單元格鏈接” ;復(fù)選框控件: “控制”卡, “單元格鏈接” ; 給控件改名。2.“控件工具箱”工具欄控件設(shè)計(jì)模式可以對(duì)控
35、件的屬性、代碼等進(jìn)行設(shè)計(jì)。 運(yùn)行模式可執(zhí)行代碼,完成相應(yīng)的動(dòng)作?!皩傩浴贝翱谠O(shè)置或顯示控件的屬性?!安榭创a”一一可以進(jìn)入VBA編輯器環(huán)境,查看或編寫控件的代碼。3.在工作表上處理控件【例2.66】向當(dāng)前工作簿的第一張工作表添加命令按鈕。第10頁Worksheets(1).OLEObjects.AddFormsmandButton.1”, _ Left:=10,Top:=10,Height:=20,Width:=100【例2.67】滾動(dòng)工作簿窗口,使CommandButton1位于窗口的左上角。Set t=Sheet1mandButton1LeftCellWith ActiveWindow.S
36、crollRow=t.Row.ScrollColumn=t.ColumnEnd With二、在Word文檔中使用控件1.向文檔中添加控件用“控件工具箱”工具欄2.設(shè)置控件屬性在設(shè)計(jì)模式下,打開“屬性”窗口。3.初始化控件【例2.68】向列表框添加數(shù)據(jù)。With ThisDocument.ListBox1.AddItemNorth.AddItemSouth.AddItemEast.AddItemWestEnd With4.編寫事件過程雙擊窗體或控件以進(jìn)入代碼編輯環(huán)境, 再從“過程”下拉列表框內(nèi)選擇事件, 然后進(jìn)行編碼。三、用戶窗體1創(chuàng)建用戶窗體1選擇“工具|宏|VisualBasic編輯器”菜單
37、或用Alt+F11快捷鍵,打開VBA編輯器。2在VBA編輯器中選擇工具欄上的“插入用戶窗體”按鈕或者在“插入”菜單選“用戶窗 體”項(xiàng)。3在用戶窗體上添加控件。4設(shè)置控件屬性2運(yùn)行用戶窗體在VBA編輯器中選擇該窗體,單擊“運(yùn)行”菜單“運(yùn)行子過程/用戶窗體”或工具欄上對(duì)應(yīng)的按鈕。用VBA代碼顯示用戶窗體,可用Show方法?!纠匡@示名為“UserForm1”的用戶窗體UserForm1.Show3.代碼運(yùn)行時(shí)使用控件值【例2.69】運(yùn)行窗體后,在兩個(gè)文字框中任意輸入信息,單擊“確定”按鈕,兩個(gè)文字框的 內(nèi)容會(huì)被保存到模塊的全局變量中, 然后卸載用戶窗體。 再次運(yùn)行窗體時(shí), 保存在模塊的全 局變量的
38、值會(huì)重新顯示在文字框中。1創(chuàng)建一個(gè)用戶窗體,放兩個(gè)文字框TextBoxI和TextBox2,個(gè)命令按鈕cmdOk,設(shè)置其Caption屬性為“確定” 。2插入一個(gè)模塊并在模塊中用下面語句聲明兩個(gè)全局變量。Public peID,strR As String3雙擊用戶窗體,為Initialize事件編寫如下程序:Private Sub UserForm_Initialize()TextBox1.Text=peIDTextBox2.Text=strR第11頁End Sub4雙擊命令按鈕,為其Click事件編寫如下程序:Private Sub CmdOk_Click()peID=TextBox1.T
39、extstrR=TextBox2.TextUnload MeEnd Sub【例2.70】新建一個(gè)窗體, 放置兩個(gè)按鈕和一個(gè)文字框控件。 按鈕的標(biāo)題分別定義為 “顯示” 和“清除”。單擊“顯示”按鈕,在文字框中顯示一行文字,單擊“清除”按鈕,清除文字 框中的文字。設(shè)計(jì):1進(jìn)入VBA編輯環(huán)境,打開“工程資源管理器”窗口,插入一個(gè)用戶窗體。2在窗體上放置兩個(gè)命令按鈕和一個(gè)文字框。3右擊命令按鈕,選“屬性”,設(shè)置Caption屬性值為“顯示”、“清除”。4雙擊“顯示”命令按鈕,輸入如下代碼:Me.TextBoxl.SetFocusMe.TextBox1.Text=你好!歡迎學(xué)習(xí)VBA”(可簡(jiǎn)化)5雙擊
40、“清除”命令按鈕,編寫代碼如下:Me.TextBox1.Text=6雙擊用戶窗體,為其Activate事件編寫如下代碼:Me.Caption=歡迎!”運(yùn)行:選“運(yùn)行”菜單的“運(yùn)行子過程/用戶窗體”項(xiàng),或按F5鍵。范例2-7在Word文檔中統(tǒng)計(jì)指定字符的出現(xiàn)次數(shù)1定義窗體和控件建一窗體Useform1,設(shè)置caption屬性為“字符統(tǒng)計(jì)”。在窗體中放置以下控件:復(fù)選框CheckBox1,Caption=“區(qū)分大小寫”。文字框TextBox1。命令按鈕CommandButton1,Caption=“統(tǒng)計(jì)”。標(biāo)簽Label1,Caption=“輸入您要統(tǒng)計(jì)的字符(或漢字):”2錄制代碼光標(biāo)定位(或選
41、中文檔),查找,下一處3相關(guān)知識(shí)Selection.Find.Found()函數(shù)為真,說明找到了指定的字符。4加工代碼5運(yùn)行運(yùn)行窗體,輸入要統(tǒng)計(jì)的字符,單擊“統(tǒng)計(jì)”按鈕。范例2-8求dic文檔中的單詞對(duì)doc文檔的覆蓋率1建立兩個(gè)Word文檔,分別保存為doc.doc和dic.doc文件。2在dic文檔中輸入一些常用詞匯構(gòu)成被測(cè)試的詞匯表。后邊將利用VBA程序統(tǒng)計(jì)這個(gè)詞匯表對(duì)各類文章的單詞覆蓋率。3進(jìn)入VBA編輯環(huán)境,在dic工程中插入一個(gè)模塊,在模塊中建立子程序xnt。4在dic文檔中創(chuàng)建一個(gè)自定義工具欄,指定工具欄可用于dic文檔(而不是Normal文第12頁檔),并將前面建立的子程序cn
42、t指定給工具欄按鈕。5打開doc文檔,輸入或粘貼任意文本文檔。該文檔是用來進(jìn)行測(cè)試的抽樣。6單擊dic自定義工具欄的按鈕,執(zhí)行VBA程序,進(jìn)行測(cè)試,將得到結(jié)果。2.6使用Office命令欄命令欄一一工具欄、菜單欄、快捷菜單。一、添加和修改工具欄1.對(duì)工具欄作運(yùn)行時(shí)間修改表2.3命令欄按鈕常用的屬性和方法屬性或方法說明CopyFace將指定按鈕的圖符復(fù)制到“剪貼板”上。第13頁P(yáng)asteFace將“剪貼板”上的內(nèi)容粘貼到指定按鈕的圖符上。Id指定代表按鈕內(nèi)置函數(shù)的值。State指定按鈕的外觀或狀態(tài)??蛇x值:msoButt on Dow n、msoButt onM ixed、msoButt onU
43、p。Style指定按鈕圖符是顯示其圖標(biāo)還是顯示其標(biāo)題??蛇x值:msoButt on Automatic、msoButt onlcon、msoButt on Capti on、msoButt onlconan dCapti on、msoButt onlconAn dCaptio nBelow、msoButt onlconAn dWrapCaptio n、msoButt onlconAn dWrapCaptio nBelow、msoButtonWrapCaption。On Actio n指定在用戶單擊按鈕、顯示菜單或更改組合框控件的內(nèi)容時(shí)所運(yùn)行的過程。Visible指定控件對(duì)用戶是顯示還是隱藏。E
44、n abled使一個(gè)命令欄生效或失效。失效的命令欄名不顯示在有效命令欄列表中?!纠?.71】在Word中創(chuàng)建包含一個(gè)命令按鈕的命令欄,用代碼改變按鈕外觀。Sub test()Set myBar=Comma ndBars.Add(Name:=cbt,Positi on:=msoBarTop) myBar.Visible=TrueSet oldc=myBar.Co ntrols.Add(Type:=msoCo ntrolButt on ,ID:=23)oldc.O nActio n=Cha ngeFacesEnd SubSub Chan geFaces()Set n ewc=Comma ndBar
45、s .FindCon trol(Type:=msoC on trolButt on ,ID:=17)n ewc.CopyFaceSet oldc=Comma ndBars(cbt).Co ntrols(1)oldc.PasteFaceEnd Sub2.添加和修改組合框控件表2.4組合框常用屬性和方法屬性或方法說明Add如果要在命令欄中添加一個(gè)組合框控件,可為Type參數(shù)指疋以下MsoControlType常量之一:msoControlEdit、msoControlDropdown或msoControlComboBox。Addltem在下拉式列表框或組合框的下拉式列表區(qū)中添加一個(gè)列表項(xiàng)??蔀橐延?/p>
46、列表中的新項(xiàng)指定一個(gè)索引號(hào),但其數(shù)值不能大于列表中的項(xiàng)目數(shù),否則Addltem方法失敗。Capti on為組合框控件指疋標(biāo)簽。如果將Style屬性設(shè)置為msoComboLabel,那么該標(biāo)簽將在該控件旁顯示。Style確疋指疋控件的標(biāo)題是否顯示在該控件旁。該值可設(shè)置為MsoComboStyle的以下常量之一:msoComboLabel(顯示)或msoComboNormal(不顯示)。On Actio n指定當(dāng)用戶改變組合框控件的內(nèi)容時(shí)要運(yùn)行的過程?!纠?.72】在Word自定義工具欄中添加一個(gè)組合框,并給該控件指定一個(gè)過程。Sub test()Set myBar=Comma ndBars.Ad
47、d(Name:=Custom,Positi on:=msoBarTop,Temporary:=True)myBar.Visible=True第14頁Set n ewCombo=myBar.C on trols.Add(Type:=msoC on trolComboBox)With n ewCombo.AddltemQ1.AddltemQ2.AddItemQ3.AddItemQ4.Style=msoComboNormal.OnAction=STOQ ”End WithEnd Sub二、添加和管理菜單欄、菜單項(xiàng)1.在運(yùn)行時(shí)間添加菜單欄【例2.73】在Word或Excel中添加一個(gè)不可移動(dòng)的菜單欄,
48、并將該菜單欄固定在應(yīng)用程序 窗口的右邊(替代系統(tǒng)菜單欄)。Sub test()Set Men uBar=Comma ndBars.Add(Name:=mBar,Positi on :=msoBarRight,Me nuBar:=True) With Men uBarP rotectio n=msoBarNoMove.Visible=TrueEnd WithEnd Sub2.在運(yùn)行時(shí)間修改菜單欄表2.5菜單欄的常用屬性和方法屬性或方法說明Add添加一個(gè)菜單欄,指定MenuBar參數(shù)為True。En abled設(shè)置菜單欄的可用性。Protectio n禁止用戶對(duì)菜單欄進(jìn)仃特疋操作。其值可設(shè)置為以下
49、MsoBarProtection常量之一或 組合:msoBarNoChangeDock、msoBarNoChangeVisible、msoBarNoCustomize、msoBarNoHorizontalDock、msoBarNoMove、msoBarNoProtection、msoBarNoResize禾口msoBarNoVerticalDockPositi on指定菜單欄相對(duì)于應(yīng)用程序窗口的位置??蓪⑵湓O(shè)置為以下MsoBarPositi on常量之一:msoBarLeft、msoBarTop、msoBarRight、msoBarBottom、msoBarFloating、msoBarPop
50、up(用于創(chuàng)建快捷菜單)Visible指定對(duì)用戶是顯示還是隱藏控件。如果該控件對(duì)用戶是隱藏的,那么該菜 單欄名仍將顯示在有效命令欄列表中。3.對(duì)菜單項(xiàng)作運(yùn)行時(shí)間修改表2.6命令欄控件的常用屬性和方法屬性或方法說明Add在命令欄中添加一個(gè)菜單項(xiàng)。Type可以是以下常量之一:msoControlButton、msoControlEdit、msoControlDropdown或msoControlComboBox。AddItem在下拉式列表框或組合框的下拉式列表區(qū)中添加一個(gè)列表項(xiàng)??蔀橐延辛?表中的新項(xiàng)指定一個(gè)索引號(hào),但其數(shù)值不能大于列表中的項(xiàng)目數(shù)。Style指定按鈕外觀是顯示其圖標(biāo)還是顯示其標(biāo)題。
51、該值可為以下常量之一:msoButt on Automatic、msoButt onlcon、msoButt on Capti on、第15頁msoButt onlconAn dCapti on、msoButtonlconAndWrapCaption、msoButtonWrapCaption。msoButt onlconAn dCaptio nBelow、msoButt onlconAn dWrapCaptio nBelow或On Actio n指定當(dāng)用戶改變特定控件的值時(shí)要運(yùn)行的過程。Visible指定控件對(duì)用戶是顯示還是隱藏?!纠?.74】在Word或Excel系統(tǒng)活動(dòng)菜單欄的末尾添加一個(gè)
52、名為Custom”的臨時(shí)彈出式菜單項(xiàng),然后在該菜單項(xiàng)中添加一個(gè)按鈕控件“Import”。Sub test()Set myM=Comma ndBars.ActiveMe nuBarSet n ewM=myM.C on trols.Add(Type:=msoC on trolPopup,Temporary:=True)n ewM.Captio n=CustomSet Ctrl仁newM.Co ntrols.Add(Type:=msoC on trolButto n,ID:=1)ctrl1.Captio n=ImportEnd Sub三、添加和顯示快捷菜單用Add方法創(chuàng)建快捷菜單時(shí),必須將msoBa
53、rPopUp指定為position參數(shù)的值?!纠?.75】在Word中新建一個(gè)快捷菜單,在其中添加兩個(gè)菜單項(xiàng)(帶標(biāo)題),然后用ShowPopup方法顯示該菜單。Sub test()Set capm=Comma ndBars.Add(Name:=Custom,Positi on :=msoBarPopup,Temporary:=True)Set Copy=capm.C on trols.AddWith Copy.Faceld=23.Caption=復(fù)制”End WithSet Paste=capm.C on trols.AddWith Paste.FaceId=17.Caption=圖表向?qū)А盓
54、nd Withcapm.ShowPopup 200,200End Sub范例2-9自定義菜單在Excel工作簿中建立一個(gè)自定義菜單。工作簿打開時(shí)用自定義菜單取代系 統(tǒng)菜單,當(dāng)選擇“輸入”、“修改”、“刪除”菜單項(xiàng)時(shí)顯示出相應(yīng)的信息,選擇“退 出”菜單項(xiàng),恢復(fù)系統(tǒng)菜單。1打開VBA編輯器。2對(duì)“Workbook”的“Open”事件編程:Private Sub Workbook_Ope n()第16頁Men uBars.Add(MyMe nu)建立菜單MenuBars(MyMenu).Menus.AddCaption:=維護(hù)(&D)添加水平菜單項(xiàng)MenuBars(MyMenu”).Menu
55、s(”維護(hù)).Menultems.Add_Captio n:=輸入(&I), On Actio n:=in_p添加豎直菜單項(xiàng)Men uBars(MyMe nu).Me nus(”維護(hù)).Me nultems.Add Captio n:=修改(&C), On Actio n:= modiMenuBars(MyMenu).Menus(維護(hù)).MenuItems.Add Caption:=刪除(&D),OnAction:=deleMenuBars(MyMenu).Menus(維護(hù)).MenuItems.Add Caption:=退出(&X),OnAction:=qui
56、tMenuBars(MyMenu).Activate激活菜單End Sub3插入一個(gè)模塊。在模塊中輸入如下四個(gè)過程:Sub in_p()MsgBox(執(zhí)行輸入功能)End SubSub modi()MsgBox(執(zhí)行修改功能)End SubSub dele()MsgBox(執(zhí)行刪除功能)End SubSub quit()MenuBars(MyMenu).Delete刪除自定義菜單End Sub4保存工作簿。2.7代碼優(yōu)化與信息保護(hù)一、VBA應(yīng)用程序的優(yōu)化1.盡量使用系統(tǒng)提供的屬性、方法和函數(shù)【例2.76】求平均工資。方法1:Sub aaa()For k=1 To 1000dyg=a&k
57、c=Range(dyg).ValueTVal=TVal+cNextaval=TVal/1000MsgBox avalEnd Sub方法2:Sub my_aver()a=WorksheetFunction.Average(Sheets(1).Range(A1:A1000)MsgBox a第17頁End Sub2.盡量減少使用對(duì)象引用【例2.77】實(shí)現(xiàn)同樣功能的兩種方法。方法1:Workbooks(1).Sheets(1).Range(A1:A1000).Font.Name=PayWorkbooks(1).Sheets(1).Range(A1:A1000).Font.FontStyle=Bold方法2:With Workbooks(1).Sheets(1).Range(A1:A1000).Font.Name=Pay.FontStyle=BoldEnd With【例2.78】設(shè)置對(duì)象變量。Workbooks(1).Sheets(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘭州信息科技學(xué)院《親子教育活動(dòng)設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 江西農(nóng)業(yè)大學(xué)南昌商學(xué)院《稅收》2023-2024學(xué)年第一學(xué)期期末試卷
- 湖南藝術(shù)職業(yè)學(xué)院《誤差理論與測(cè)繪平差基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 衡水學(xué)院《有機(jī)化學(xué)B》2023-2024學(xué)年第一學(xué)期期末試卷
- 重慶交通大學(xué)《元典閱讀與筆記2》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江商業(yè)職業(yè)技術(shù)學(xué)院《形體與舞蹈(一)》2023-2024學(xué)年第一學(xué)期期末試卷
- 中國戲曲學(xué)院《小企業(yè)會(huì)計(jì)準(zhǔn)則》2023-2024學(xué)年第一學(xué)期期末試卷
- 長春汽車工業(yè)高等??茖W(xué)?!蹲匀坏乩韺W(xué)理論與方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江紡織服裝職業(yè)技術(shù)學(xué)院《數(shù)據(jù)分析與SPSS實(shí)現(xiàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 食品衛(wèi)生安全監(jiān)管技術(shù)應(yīng)用
- 農(nóng)業(yè)昆蟲學(xué)實(shí)驗(yàn)5蔬菜害蟲課件
- 大學(xué)研究生赴境內(nèi)外高校學(xué)習(xí)課程學(xué)分認(rèn)定管理辦法
- 非標(biāo)設(shè)計(jì)最強(qiáng)自動(dòng)計(jì)算-壓入力計(jì)算
- 銀行客戶經(jīng)理個(gè)人履職總結(jié)銀行客戶經(jīng)理個(gè)人工作總結(jié)
- 人教版七年級(jí)數(shù)學(xué)下冊(cè)計(jì)算類專項(xiàng)訓(xùn)練卷【含答案】
- 化學(xué)元素周期表口訣化學(xué)元素周期表口訣
- 詩詞接龍(飛花令)PPT
- 子宮內(nèi)膜癌(課堂PPT)
- 澳大利亞公司法1-30
- 海上試油測(cè)試技術(shù)0327
- 中國地圖標(biāo)準(zhǔn)版(可編輯顏色)
評(píng)論
0/150
提交評(píng)論