

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p><b> VBA常用技巧1</b></p><p> 第8章控件與用戶窗體4</p><p> 技巧1限制文本框的輸入4</p><p> 技巧2文本框添加右鍵快捷菜單6</p><p> 技
2、巧3文本框回車(chē)自動(dòng)輸入10</p><p> 技巧4自動(dòng)選擇文本框內(nèi)容11</p><p> 技巧5設(shè)置文本框數(shù)據(jù)格式12</p><p> 技巧6限制文本框的輸入長(zhǎng)度14</p><p> 技巧7將光標(biāo)返回文本框中15</p><p> 技巧8文本框的自動(dòng)換行17</p>
3、<p> 技巧9多個(gè)文本框數(shù)據(jù)相加19</p><p> 技巧10控件跟隨活動(dòng)單元格20</p><p> 技巧11高亮顯示按鈕21</p><p> 技巧12組合框和列表框添加列表項(xiàng)的方法23</p><p> 12-1使用RowSource屬性添加列表項(xiàng)23</p><p&g
4、t; 12-2使用List屬性添加列表項(xiàng)24</p><p> 12-3使用AddItem方法添加列表項(xiàng)25</p><p> 技巧13去除列表框數(shù)據(jù)源的重復(fù)值和空格27</p><p> 技巧14移動(dòng)列表框條目29</p><p> 技巧15允許多項(xiàng)選擇的列表框32</p><p>
5、技巧16多列組合框和列表框的設(shè)置35</p><p> 16-1多列組合框和列表框添加列表項(xiàng)35</p><p> 16-2多列列表框?qū)懭牍ぷ鞅?7</p><p> 技巧17輸入時(shí)逐步提示信息39</p><p> 技巧18二級(jí)組合框46</p><p> 技巧19使用DTP控件輸入日
6、期48</p><p> 技巧20使用RefEdit控件選擇區(qū)域51</p><p> 技巧21如何注冊(cè)控件52</p><p> 技巧22遍歷控件的方法55</p><p> 22-1使用名稱(chēng)中的變量遍歷控件55</p><p> 22-2使用對(duì)象類(lèi)型遍歷控件57</p>
7、<p> 22-3使用程序標(biāo)識(shí)符遍歷控件58</p><p> 22-4使用名稱(chēng)中的變量遍歷圖形59</p><p> 22-5使用FormControlType屬性遍歷圖形60</p><p> 技巧23使微調(diào)框最小變動(dòng)量小于161</p><p> 技巧24不打印工作表中的控件63</p&g
8、t;<p> 24-1設(shè)置控件格式63</p><p> 24-2設(shè)置控件的printobjcet屬性65</p><p> 技巧25在框架中使用滾動(dòng)條65</p><p> 技巧26使用多頁(yè)控件67</p><p> 技巧27標(biāo)簽文字垂直居中對(duì)齊69</p><p> 技
9、巧28使用TabStrip控件71</p><p> 技巧29顯示GIF動(dòng)畫(huà)圖片73</p><p> 技巧30播放Flash文件76</p><p> 技巧31在工作表中添加窗體控件78</p><p> 31-1使用AddFormControl方法79</p><p> 31-2使用
10、Add方法81</p><p> 技巧32在工作表中添加ActiveX控件83</p><p> 32-1使用Add方法84</p><p> 32-2使用AddOLEObject方法86</p><p> 技巧33使用spreadsheet控件87</p><p> 技巧34使用List
11、view控件90</p><p> 34-1使用Listview控件顯示數(shù)據(jù)列表90</p><p> 34-2在Listview控件中使用復(fù)選框93</p><p> 34-3調(diào)整Listview控件的行距95</p><p> 34-4在Listview控件中排序98</p><p>
12、34-5Listview控件的圖標(biāo)設(shè)置99</p><p> 技巧35調(diào)用非模式窗體102</p><p> 技巧36進(jìn)度條的制作104</p><p> 36-1使用進(jìn)度條控件104</p><p> 36-2使用標(biāo)簽控件106</p><p> 技巧37使用TreeView控件顯示層
13、次109</p><p> 技巧38用戶窗體添加圖標(biāo)113</p><p> 技巧39用戶窗體添加最大最小化按紐115</p><p> 技巧40禁用窗體標(biāo)題欄的關(guān)閉按鈕116</p><p> 技巧41屏蔽窗體標(biāo)題欄的關(guān)閉按鈕117</p><p> 技巧42無(wú)標(biāo)題欄和邊框的窗體119
14、</p><p> 技巧43制作年月選擇窗體120</p><p> 技巧44自定義窗體中的鼠標(biāo)指針類(lèi)型123</p><p> 技巧45調(diào)整窗體的顯示位置124</p><p> 技巧46由鼠標(biāo)確定窗體顯示位置126</p><p> 技巧47用戶窗體的打印127</p>
15、<p> 技巧48使用自定義顏色設(shè)置窗體顏色129</p><p> 技巧49在窗體中顯示圖表130</p><p> 49-1使用Export方法130</p><p> 49-2使用API函數(shù)132</p><p> 技巧50窗體運(yùn)行時(shí)調(diào)整控件大小133</p><p>
16、技巧51在用戶窗體上添加菜單136</p><p> 技巧52在用戶窗體上添加工具欄140</p><p> 技巧53使用代碼添加窗體及控件145</p><p> 技巧54用戶窗體的全屏顯示151</p><p> 54-1設(shè)置用戶窗體為應(yīng)用程序的大小151</p><p> 54-2
17、根據(jù)屏幕分辨率進(jìn)行設(shè)置152</p><p> 技巧55在用戶窗體上添加狀態(tài)欄153</p><p><b> 控件與用戶窗體</b></p><p><b> 限制文本框的輸入</b></p><p> 用戶在使用文本框輸入數(shù)據(jù)時(shí),往往希望能限制輸入數(shù)據(jù)的類(lèi)型,比如只能輸入數(shù)字。但是
18、沒(méi)有內(nèi)置的屬性能限制在文本框中只能輸入數(shù)字,只能在文本框的事件過(guò)程中使用代碼來(lái)測(cè)試輸入的是哪類(lèi)字符,然后只允許輸入數(shù)字字符和一個(gè)“-”號(hào)、一個(gè)“.”號(hào),如下面的代碼所示。</p><p> #001 Private Sub TextBox1_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger)</p><p> #002 Sele
19、ct Case KeyANSI</p><p> #003 Case Asc("0") To Asc("9")</p><p> #004 Case Asc("-")</p><p> #005 If InStr(1, Me.TextBox
20、1.Text, "-") > 0 Or _</p><p> #006 Me.TextBox1.SelStart > 0 Then</p><p> #007 KeyANSI = 0</p><p> #008 End If</p
21、><p> #009 Case Asc(".")</p><p> #010 If InStr(1, Me.TextBox1.Text, ".") > 0 Then</p><p> #011 KeyANSI = 0</p>&
22、lt;p> #012 End If</p><p> #013 Case Else</p><p> #014 KeyANSI = 0</p><p> #015 End Select</p><p> #016 End Sub</p>
23、;<p><b> 代碼解析:</b></p><p> 文本框的KeyPress事件過(guò)程,測(cè)試鍵盤(pán)輸入的是哪類(lèi)字符,只允許輸入數(shù)字字符和一個(gè)“-”號(hào)、一個(gè)“.”號(hào)。</p><p> KeyPress事件的語(yǔ)法如下:</p><p> Private Sub object_KeyPress( ByVal KeyANSI
24、As MSForms.ReturnInteger)</p><p> 參數(shù)Object是必需的,一個(gè)有效的對(duì)象。</p><p> 參數(shù)KeyANSI是可選的,整數(shù)值,代表標(biāo)準(zhǔn)的數(shù)字ANSI 鍵代碼。</p><p> 第2行代碼使用Case Else語(yǔ)句測(cè)試文本框KeyPress事件的KeyANSI參數(shù)值。</p><p> 第3行
25、代碼,如果鍵盤(pán)輸入的是0到9之間的數(shù)字字符,則允許輸入。如果想在文本框中允許其它類(lèi)型的字符輸入,在此句代碼中列出允許輸入的字符即可。</p><p> 第4行到第8行代碼,如果鍵盤(pán)輸入的是“-”號(hào),先使用InStr函數(shù)測(cè)試文本框中是否已有“-”號(hào),如果InStr函數(shù)返回值大于0,說(shuō)明文本框中已有“-”號(hào)。接下來(lái)使用文本框的SelStart 屬性來(lái)測(cè)試插入點(diǎn),如果文本框的SelStart 屬性值大于0,說(shuō)明“-”
26、號(hào)的插入點(diǎn)不是第一個(gè)。如果以上兩個(gè)條件中有任何一個(gè)成立,將KeyAscii參數(shù)值設(shè)置為0,使文本框只能在第一位輸入一個(gè)“-”號(hào)。</p><p> 第9行到第12行代碼,如果鍵盤(pán)輸入的是“.”號(hào)的話,使用InStr函數(shù)測(cè)試文本框中是否已有“.”號(hào),如果已有“.”號(hào),將KeyAscii參數(shù)值設(shè)置為0,使文本框只能輸入一個(gè)“.”號(hào)。</p><p> 第13、14行代碼,如果鍵盤(pán)輸入的是其
27、他字符則將KeyAscii參數(shù)值設(shè)置為0,使文本框不能輸入其他字符。</p><p> 經(jīng)過(guò)以上設(shè)置文本框只允許輸入數(shù)字字符和一個(gè)“-”號(hào)、一個(gè)“.”號(hào),但是能輸入中文字符。如果希望限制中文字符的輸入,可以在文本框的Change事件中進(jìn)行設(shè)置,如下面的代碼所示。</p><p> #001 Private Sub TextBox1_Change()</p><p&
28、gt; #002 Dim i As Integer</p><p> #003 Dim s As String</p><p> #004 With TextBox1</p><p> #005 For i = 1 To Len(.Text)</p><p> #006
29、 s = Mid(.Text, i, 1)</p><p> #007 Select Case s</p><p> #008 Case ".", "-", "0" To "9"</p><p> #009
30、 Case Else</p><p> #010 .Text = Replace(.Text, s, "")</p><p> #011 End Select</p><p> #012 Next</p><
31、p> #013 End With</p><p> #014 End Sub</p><p><b> 代碼解析:</b></p><p> 文本框的Change事件,判斷輸入的字符是否為數(shù)字字符和“-”號(hào)、“.”號(hào),如果不是則使用Replace函數(shù)將文本框中輸入的其他字符替換成空白。</p><p
32、> 第5、6行代碼在文本框輸入的所有字符中循環(huán)。</p><p> 第8行代碼列出允許輸入的字符。如果想在文本框中允許其它字符輸入,在此句代碼中列出即可。</p><p> 第9、10行代碼,如果不是允許輸入的字符,使用Replace函數(shù)替換成空白。</p><p> 經(jīng)過(guò)以上的設(shè)置,文本框中只能在第一位輸入一個(gè)“-”號(hào)、一個(gè)“.”號(hào)和“0”到“9”的
33、數(shù)字。</p><p> 文本框添加右鍵快捷菜單</p><p> VBA中的控件沒(méi)有提供右鍵快捷菜單,用戶可以使用Excel 中的命令欄自已添加右鍵快捷菜單。</p><p> 步驟1:按<Alt+F11>組合鍵進(jìn)入VBE窗口,單擊菜單“插入”→“模塊”,在其代碼窗口輸入以下代碼:</p><p> #001 Priv
34、ate ActiveTB As MSForms.TextBox</p><p> #002 Public Sub CreateShortCutMenu()</p><p> #003 Dim ShortCutMenu As CommandBar</p><p> #004 Dim ShortCutMenuItem As CommandBa
35、rButton</p><p> #005 Dim sCaption As Variant</p><p> #006 Dim iFaceId As Variant</p><p> #007 Dim sAction As Variant</p><p> #008 Dim i As Integ
36、er</p><p> #009 sCaption = Array("剪切(&C)", "復(fù)制(&T)", "貼粘(&P)", "刪除(&D)")</p><p> #010 iFaceId = Array(21, 19, 22, 1786)</p&
37、gt;<p> #011 sAction = Array("Action_Cut", "Action_Copy", "Action_Paste", "Action_Delete")</p><p> #012 On Error Resume Next</p><p> #
38、013 Application.CommandBars("ShortCut").Delete</p><p> #014 Set ShortCutMenu = Application.CommandBars.Add("ShortCut", msoBarPopup)</p><p> #015 With ShortCu
39、tMenu</p><p> #016 For i = 0 To 3</p><p> #017 Set ShortCutMenuItem = .Controls.Add(msoControlButton)</p><p> #018 With ShortCutMenuItem</p&
40、gt;<p> #019 .Caption = sCaption(i)</p><p> #020 .faceID = Val(iFaceId(i))</p><p> #021 .OnAction = sAction(i)</p><p>
41、#022 End With</p><p> #023 Next</p><p> #024 End With</p><p> #025 End Sub</p><p><b> 代碼解析:</b></p><p> 第1行代碼,
42、在模塊級(jí)別中聲明變量ActiveTB是用來(lái)對(duì)應(yīng)窗體中的文本框所觸發(fā)的所有事件的變量。</p><p> CreateShortCutMenu過(guò)程用來(lái)創(chuàng)建標(biāo)題為“ShortCut”的右鍵快捷菜單,并添加4個(gè)菜單項(xiàng)。關(guān)于自定義右鍵快捷菜單請(qǐng)參閱技巧86 。</p><p> #001 Public Sub ShowPopupMenu(txtCtr As MSForms.TextBox)&
43、lt;/p><p> #002 Dim Action As Variant</p><p> #003 Set ActiveTB = txtCtr</p><p> #004 With Application.CommandBars("ShortCut")</p><p> #005
44、 .Controls(1).Enabled = txtCtr.SelLength > 0</p><p> #006 .Controls(2).Enabled = .Controls(1).Enabled</p><p> #007 .Controls(3).Enabled = txtCtr.CanPaste</p>
45、<p> #008 .Controls(4).Enabled = .Controls(1).Enabled</p><p> #009 .ShowPopup</p><p> #010 End With</p><p> #011 End Sub</p><p><b&g
46、t; 代碼解析:</b></p><p> ShowPopupMenu過(guò)程根據(jù)文本框中字符的選中狀態(tài)設(shè)置右鍵快捷菜單菜單項(xiàng)的Enabled屬性后使用ShowPopup方法顯示右鍵快捷菜單。</p><p> 第5行代碼,如果當(dāng)前文本框中已有選中的字符則“剪切”按鈕有效。</p><p> 第6行代碼,如果當(dāng)前文本框中已有選中的字符則“復(fù)制”按鈕有
47、效。</p><p> 第7行代碼,如果剪貼板中包含對(duì)象支持的數(shù)據(jù)。則“貼粘”按鈕有效。</p><p> 第8行代碼,如果當(dāng)前文本框中已有選中的字符則“刪除”按鈕有效。</p><p> 第9行代碼,顯示快捷菜單。</p><p> #001 Public Sub Action_Cut()</p><p>
48、 #002 ActiveTB.Cut</p><p> #003 End Sub</p><p> #004 Public Sub Action_Copy()</p><p> #005 ActiveTB.Copy</p><p> #006 End Sub</p><p> #0
49、07 Public Sub Action_Paste()</p><p> #008 ActiveTB.Paste</p><p> #009 End Sub</p><p> #010 Public Sub Action_Delete()</p><p> #011 Dim s As String</
50、p><p> #012 With ActiveTB</p><p> #013 s = .SelText</p><p> #014 .Value = Replace(.Value, s, "")</p><p> #015 End With</p>
51、<p> #016 End Sub</p><p><b> 代碼解析:</b></p><p> Action_Cut過(guò)程是快捷菜單中單擊“剪切”菜單項(xiàng)所運(yùn)行的過(guò)程。使用Cut 方法將當(dāng)前選中的文本框中的文本刪除并移至剪貼板。</p><p> Action_Copy過(guò)程是快捷菜單中單擊“復(fù)制”菜單項(xiàng)所運(yùn)行的過(guò)程。使用C
52、opy方法將文本框選中的文本復(fù)制到剪貼板上。</p><p> Action_Paste過(guò)程是快捷菜單中單擊“貼粘”菜單項(xiàng)所運(yùn)行的過(guò)程。使用Paste方法把剪貼板上的內(nèi)容傳送到一個(gè)文本框中。</p><p> Action_Delete過(guò)程是快捷菜單中單擊“貼粘”菜單項(xiàng)所運(yùn)行的過(guò)程。使用Replace函數(shù)將文本框中選中的文本的文本替換成空字符。</p><p>
53、 #001 Public Sub DeleteShortCutMenu()</p><p> #002 On Error Resume Next</p><p> #003 Application.CommandBars("ShortCut").Delete</p><p> #004 End Sub</p&
54、gt;<p><b> 代碼解析:</b></p><p> DeleteShortCutMenu過(guò)程刪除創(chuàng)建的右鍵快捷菜單。</p><p> 步驟2:在VBE窗口中,單擊菜單“插入”→“用戶窗體”,在窗體上添加兩個(gè)文本框控件。雙擊窗體,在其代碼窗口中輸入下面的代碼。</p><p> #001 Private Sub
55、 UserForm_Initialize()</p><p> #002 Call CreateShortCutMenu</p><p> #003 End Sub</p><p> #004 Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer,
56、 ByVal X As Single, ByVal Y As Single)</p><p> #005 If Button = 2 Then ShowPopupMenu ActiveControl</p><p> #006 End Sub</p><p> #007 Private Sub TextBox2_MouseUp(ByVal But
57、ton As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)</p><p> #008 If Button = 2 Then ShowPopupMenu ActiveControl</p><p> #009 End Sub</p><p> #010
58、 Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)</p><p> #011 Call DeleteShortCutMenu</p><p> #012 End Sub</p><p><b> 代碼解析:</b></p&g
59、t;<p> 第1行到第3行代碼,窗體的Initialize事件,在窗體初始化時(shí)運(yùn)行CreateShortCutMenu過(guò)程創(chuàng)建右鍵快捷菜單。</p><p> 第4行到第9行代碼,文本框的MouseUp事件,當(dāng)用戶右健單擊文本框時(shí)運(yùn)行ShowPopupMenu過(guò)程在選中的菜單項(xiàng)上顯示右鍵快捷菜單。</p><p> 第10行到第12行代碼,窗體的QueryClose事
60、件,在關(guān)閉窗體時(shí)運(yùn)行DeleteShortCutMenu過(guò)程刪除右鍵快捷菜單。</p><p> 窗體運(yùn)行后,右鍵單擊文本框顯示右鍵快捷菜單,如圖 991所示。</p><p> 圖 991文本框快捷菜單</p><p><b> 文本框回車(chē)自動(dòng)輸入</b></p><p> 在使用文本框向工作表輸入數(shù)據(jù)時(shí)
61、,為了加快輸入速度,可以利用文本框的KeyDown事件,回車(chē)后自動(dòng)輸入并清空文本框,如下面的代碼所示。</p><p> #001 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)</p><p> #002 With TextBox1&l
62、t;/p><p> #003 If Len(Trim(.Value)) > 0 Then</p><p> #004 If KeyCode = vbKeyReturn Then</p><p> #005 Sheet1.Range("A65536").End(x
63、lUp).Offset(1, 0) = .Value</p><p> #006 .Text = ""</p><p> #007 End If</p><p> #008 End If</p><p> #009 End Wi
64、th</p><p> #010 End Sub</p><p><b> 代碼解析:</b></p><p> 文本框的KeyDown事件,在輸入數(shù)據(jù)并按<Enter>鍵后自動(dòng)將數(shù)據(jù)錄入到工作表A列最后一個(gè)非空單元格的下一個(gè)單元格中。</p><p> KeyDown事件在按下鍵盤(pán)按鍵時(shí)發(fā)生,語(yǔ)法
65、如下:</p><p> Private Sub object_KeyDown( ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As fmShiftState)</p><p> 參數(shù)object是必需的,一個(gè)有效的對(duì)象。</p><p> 參數(shù)KeyCode是必需的,代表被按下的鍵的鍵代碼。</
66、p><p> 參數(shù)Shift是可選的,Shift、Ctrl 和Alt的狀態(tài)。</p><p> 第3行代碼,為了防止誤輸入空白數(shù)據(jù),使用Len 函數(shù)和Trim 函數(shù)檢查文本框內(nèi)是否為有效數(shù)據(jù)。</p><p> 第4行代碼,根據(jù)KeyCode參數(shù)值判斷是否按下了回車(chē)鍵。如果用戶按下了回車(chē)鍵,KeyCode參數(shù)返回常數(shù)vbKeyReturn。</p>
67、<p> 第5、6行代碼,將文本框數(shù)據(jù)輸入到工作表A列的最后一個(gè)單元格內(nèi),同時(shí)清空文本框內(nèi)容準(zhǔn)備下一次輸入。</p><p><b> 自動(dòng)選擇文本框內(nèi)容</b></p><p> 如果希望光標(biāo)進(jìn)入文本框時(shí)能自動(dòng)選擇文本框內(nèi)容,可以在文本框的MouseUp事件中來(lái)完成,如下面的代碼所示。</p><p> #001 Priv
68、ate Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)</p><p> #002 With TextBox1</p><p> #003 If Button = 2 Then</p&g
69、t;<p> #004 .SelStart = 0</p><p> #005 .SelLength = Len(.Text)</p><p> #006 End If</p><p> #007 End With</p><p> #00
70、8 End Sub</p><p><b> 代碼解析:</b></p><p> 文本框的MouseUp事件,在光標(biāo)進(jìn)入文本框釋放鼠標(biāo)右鍵時(shí)自動(dòng)選擇文本框內(nèi)容。</p><p> MouseUp事件在用戶釋放鼠標(biāo)按鍵時(shí)發(fā)生,語(yǔ)法如下:</p><p> Private Sub object_MouseUp(
71、ByVal Button As fmButton, ByVal Shift As fmShiftState, ByVal X As Single, ByVal Y As Single)</p><p> 參數(shù)object是必需的,一個(gè)有效的對(duì)象。</p><p> 參數(shù)Button是可選的,設(shè)置引起該事件的鼠標(biāo)按鍵的整數(shù)值,如表格 1011所示。</p><p&g
72、t; 表格 1011Button參數(shù)值</p><p> 參數(shù)Shift是可選的,Shift、Ctrl 和Alt的狀態(tài)。</p><p> 參數(shù)X和參數(shù)Y是可選的,窗體、框架或頁(yè)的位置的橫坐標(biāo)與縱坐標(biāo)。</p><p> 第3行到第6行代碼,如果用戶進(jìn)入文本框釋放鼠標(biāo)右鍵,設(shè)置文本框的SelStart 屬性為0,SelLength屬性為文本框的全部字符數(shù)
73、。</p><p> SelStart 屬性指定選中文本的起點(diǎn),語(yǔ)法如下:</p><p> object.SelStart [= Long]</p><p> 參數(shù)object是必需的,一個(gè)有效的對(duì)象。</p><p> 參數(shù)Long是可選的,指定選中文本的起點(diǎn)。</p><p> SelLength 屬性
74、指定文本框或組合框的文本部分中選中的字符數(shù),語(yǔ)法如下:</p><p> object.SelLength [= Long]</p><p> 參數(shù)object是必需的,一個(gè)有效的對(duì)象。</p><p> 參數(shù)Long是可選的,指定選中的字符數(shù)。</p><p> 運(yùn)行窗體,當(dāng)光標(biāo)進(jìn)入文本框釋放鼠標(biāo)右鍵時(shí)自動(dòng)選擇文本框內(nèi)容,如圖 10
75、11所示。</p><p> 圖 1011自動(dòng)選擇文本框內(nèi)容</p><p><b> 設(shè)置文本框數(shù)據(jù)格式</b></p><p> 文本框在用來(lái)輸入數(shù)據(jù)時(shí),除了限制輸入的數(shù)據(jù)類(lèi)型外,還可以設(shè)置文本框的數(shù)據(jù)格式,如下面的代碼所示。</p><p> #001 Private Sub TextBox1_Ex
76、it(ByVal Cancel As MSForms.ReturnBoolean)</p><p> #002 TextBox1 = Format(TextBox1, "0.00")</p><p> #003 End Sub</p><p> #004 Private Sub TextBox2_Exit(ByVal Canc
77、el As MSForms.ReturnBoolean)</p><p> #005 TextBox2 = Format(TextBox2, "0.00")</p><p> #006 End Sub</p><p><b> 代碼解析:</b></p><p> 文本框的Exit
78、事件過(guò)程,在文本框輸入數(shù)據(jù)時(shí)使用Format函數(shù)格式化為兩位小數(shù)格式。</p><p> 控件的Exit事件在同一窗體中的一個(gè)控件即將把焦點(diǎn)轉(zhuǎn)移到另一個(gè)控件之前發(fā)生,語(yǔ)法如下:</p><p> Private Sub object_Exit( ByVal Cancel As MSForms.ReturnBoolean)</p><p> 參數(shù)Object是必
79、需的,一個(gè)有效的對(duì)象。</p><p> 參數(shù)Cancel是必需的,事件狀態(tài)。如果設(shè)置為False表示由該控件處理這個(gè)事件(默認(rèn)方式)。設(shè)置為T(mén)rue表示由應(yīng)用程序處理這個(gè)事件,并且焦點(diǎn)留在當(dāng)前控件上。</p><p> 當(dāng)文本框在輸入完數(shù)據(jù)失去焦點(diǎn)時(shí)使用Format函數(shù)格式化自定義數(shù)值格式。Format函數(shù)語(yǔ)法如下:</p><p> Format(expr
80、ession[, format[, firstdayofweek[, firstweekofyear]]])</p><p> 參數(shù)expression是必需的,任何有效的表達(dá)式。</p><p> 參數(shù)format是可選的,有效的命名表達(dá)式或用戶自定義格式表達(dá)式。</p><p> 參數(shù)firstdayofweek是可選的,常數(shù),表示一星期的第一天。<
81、/p><p> 參數(shù)firstweekofyear是可選的,常數(shù),表示一年的第一周。</p><p> 在本例中,將文本框的數(shù)據(jù)格式化成自定義的兩位小數(shù)的數(shù)值格式,關(guān)于Format函數(shù)格式化日期和時(shí)間等其他數(shù)據(jù)請(qǐng)參閱VBA中Format函數(shù)的幫助。</p><p> #001 Private Sub TextBox1_Change()</p>&l
82、t;p> #002 TextBox3 = Format(Val(TextBox1) * Val(TextBox2), "0.00")</p><p> #003 End Sub</p><p> #004 Private Sub TextBox2_Change()</p><p> #005 TextBox3
83、 = Format(Val(TextBox1) * Val(TextBox2), "0.00")</p><p> #006 End Sub</p><p><b> 代碼解析:</b></p><p> 文本框的Change事件過(guò)程,在兩個(gè)文本框輸入完數(shù)據(jù)后,使用文本框的Change事件使TextBox3顯示其相乘
84、的金額并格式化為兩位小數(shù)的數(shù)據(jù)格式。</p><p> Change事件在控件的 Value 屬性改變時(shí)發(fā)生,語(yǔ)法如下:</p><p> Private Sub object_Change( )</p><p> 參數(shù)object是必需的,一個(gè)有效的對(duì)象。</p><p> Change事件過(guò)程可以使顯示在控件上的數(shù)據(jù)同步或一致。在
85、本例中,當(dāng)TextBox1或TextBox2的數(shù)據(jù)發(fā)生改變時(shí),兩者相乘的金額的金額也隨之改變并在TextBox3中顯示。</p><p> 因?yàn)槲谋究虻臄?shù)據(jù)類(lèi)型是文本字符串,不能直接進(jìn)行計(jì)算的,所以計(jì)算前先使用Val函數(shù)轉(zhuǎn)換為數(shù)字,才能進(jìn)行計(jì)算。</p><p> 運(yùn)行窗體,輸入數(shù)據(jù)后格式化為兩位小數(shù)的數(shù)據(jù)格式,如圖 1021所示。</p><p> 圖 1
86、021設(shè)置文本框的數(shù)據(jù)格式</p><p> 限制文本框的輸入長(zhǎng)度</p><p> 在使用文本框輸入數(shù)據(jù)時(shí),可能希望限制能輸入的字符長(zhǎng)度,即只能輸入一定長(zhǎng)度的字符,超過(guò)設(shè)置數(shù)值就不能輸入,這時(shí)可以通過(guò)設(shè)置文本框的MaxLength屬性來(lái)實(shí)現(xiàn),如下面的代碼所示。</p><p> #001 Private Sub Worksheet_Activate()
87、</p><p> #002 Me.TextBox1.MaxLength = 6</p><p> #003 End Sub</p><p><b> 代碼解析:</b></p><p> 工作表的激活事件過(guò)程,將文本框的MaxLength屬性設(shè)置為6,使文本框只能輸入6個(gè)字符,超過(guò)6個(gè)字符即不能輸入
88、。</p><p> 應(yīng)用于文本框控件的MaxLength屬性規(guī)定用戶可以在文本框中輸入的最多字符數(shù),語(yǔ)法如下:</p><p> object.MaxLength [= Long]</p><p> 參數(shù)object是必需的,一個(gè)有效的對(duì)象。</p><p> 參數(shù)Long是可選的,整數(shù),表示所允許的字符數(shù)。</p>
89、<p> 如果將MaxLength屬性設(shè)置為0,表示只要內(nèi)存允許則沒(méi)有限制。</p><p><b> 將光標(biāo)返回文本框中</b></p><p> 在用文本框往工作表錄入數(shù)據(jù)時(shí),一般會(huì)在錄入到工作表前驗(yàn)證輸入的數(shù)據(jù)是否正確,如果錯(cuò)誤,則清空文本框內(nèi)容,提示用戶重新輸入。但此時(shí)光標(biāo)已經(jīng)不在文本框中,需要重新選擇文本框才能輸入。</p>&
90、lt;p> 可以在Exit事件中可以設(shè)置Cancel參數(shù)值使光標(biāo)停留在當(dāng)前文本框中,如下面的代碼所示。</p><p> #001 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)</p><p> #002 With TextBox1</p><p> #00
91、3 If .Text <> "" And Len(Trim(.Text)) <> 15 And Len(Trim(.Text)) <> 18 Then</p><p> #004 .Text = ""</p><p> #005 MsgBox
92、 "身份證號(hào)碼錄入錯(cuò)誤!"</p><p> #006 Cancel = True</p><p> #007 End If</p><p> #008 End With</p><p> #009 End Sub</p><p>&l
93、t;b> 代碼解析:</b></p><p> 文本框的Exit事件,在輸入身份證號(hào)碼后即將把焦點(diǎn)轉(zhuǎn)移到錄入按鈕控件之前檢查輸入的身份證號(hào)碼是否正確。</p><p> Exit事件在一個(gè)控件從同一窗體的另一個(gè)控件實(shí)際接收到焦點(diǎn)之前發(fā)生,語(yǔ)法如下:</p><p> Private Sub object_Exit( ByVal Cancel
94、 As MSForms.ReturnBoolean)</p><p> Cancel參數(shù)為事件狀態(tài)。False表示由該控件處理這個(gè)事件(這是默認(rèn)方式)。True表示由應(yīng)用程序處理這個(gè)事件,并且焦點(diǎn)應(yīng)當(dāng)留在當(dāng)前控件上。</p><p> 第3行代碼,使用Len函數(shù)和Trim函數(shù)檢查輸入的身份證號(hào)碼是否為15位或18位。</p><p> 第4行到第6行代碼,如果
95、輸入的身份證號(hào)碼不正確,清空文本框以便重新輸入并提示用戶,設(shè)置Cancel參數(shù)為T(mén)rue使光標(biāo)停留在文本框中。</p><p> 在Exit事件中之所以把文本框?yàn)榭找沧鰹橥ㄟ^(guò)驗(yàn)證的條件之一,因?yàn)槿绻患由稀癟extBox1.Text <> ""”這一條件,那么在窗體顯示后,如果用戶取消輸入或關(guān)閉輸入窗體,也會(huì)提示輸入錯(cuò)誤。所以在錄入到工作表之前再驗(yàn)證文本框是否為空,如下面的代碼所
96、示。</p><p> #001 Private Sub CommandButton1_Click()</p><p> #002 With TextBox1</p><p> #003 If .Text <> "" Then</p><p> #004
97、 Sheet1.Range("a65536").End(xlUp).Offset(1, 0) = .Text</p><p> #005 .Text = ""</p><p> #006 Else</p><p> #007 MsgBox &qu
98、ot;請(qǐng)輸入身份證號(hào)碼!"</p><p> #008 End If</p><p> #009 .SetFocus</p><p> #010 End With</p><p> #011 End Sub</p><p><b>
99、代碼解析:</b></p><p> 輸入按鈕的Click事件,把文本框數(shù)據(jù)錄入到工作表A列最后一個(gè)單元格中并重新選擇文本框準(zhǔn)備下一次輸入。</p><p> 第3行代碼,在輸入到工作表前檢查文本框是否為空。</p><p> 第4、5行代碼,如果文本框不為空,錄入數(shù)據(jù)到工作表并清空文本框內(nèi)容。</p><p> 第7行代
100、碼,如果文本框?yàn)榭?,提示用戶輸入?shù)據(jù)。</p><p> 第8行代碼,使用SetFocus方法將光標(biāo)返回到文本框中以便重新輸入。</p><p> SetFocus方法將焦點(diǎn)移動(dòng)到對(duì)象的實(shí)例中,語(yǔ)法如下 :</p><p> object.SetFocus</p><p> 參數(shù)object.是必需的,一個(gè)有效的對(duì)象。</p&g
101、t;<p> 運(yùn)行窗體,在輸入框中輸入身份證號(hào)碼后自動(dòng)驗(yàn)證輸入的數(shù)據(jù),如果輸入數(shù)據(jù)錯(cuò)誤,清空文本框并提示用戶重新輸入,如圖 1041所示。</p><p> 圖 1041提示用戶重新輸入</p><p><b> 文本框的自動(dòng)換行</b></p><p> 在使用使用文本框顯示或錄入一段很長(zhǎng)的文本時(shí),需要將文本框設(shè)置
102、成多行顯示,否則文本內(nèi)容只能在一行中顯示,示例代碼如下:</p><p> #001 Private Sub UserForm_Initialize()</p><p> #002 With TextBox1</p><p> #003 .WordWrap = True</p><p> #004
103、 .MultiLine = True</p><p> #005 .Text = Space(4) & "VBA(Visual Basic for Application)是" _</p><p> #006 & "微軟公司為了加強(qiáng)Office軟件的二次開(kāi)發(fā)能力而附加"
104、 _</p><p> #007 & "于其中的編程語(yǔ)言。VBA的確非常強(qiáng)大,其與VB完全一" _</p><p> #008 & "致的語(yǔ)法結(jié)構(gòu),高效控制Office對(duì)象模型的能力,令無(wú)" _</p><p> #009
105、 & "數(shù)人為之折腰。利用VBA,幾乎可以在Office里面做任何" _</p><p> #010 & "其他程序能做的事情。但是,應(yīng)該清楚的認(rèn)識(shí)到VBA是依" _</p><p> #011 & "托其宿主─—Excel(或
106、其他Office組件)而存在的,對(duì)" _</p><p> #012 & "于Excel用戶來(lái)講,VBA只不過(guò)是錦上添花的東西,切不可" _</p><p> #013 & "本末倒置,撿了芝麻丟了西瓜,把明明能夠利用Excel內(nèi)置" _</p&g
107、t;<p> #014 & "功能完成的任務(wù),硬是搬到VBA里面去做,以為用代碼實(shí)現(xiàn)" _</p><p> #015 & "就是高人一頭的表現(xiàn)。其實(shí),真正的高手,會(huì)盡量發(fā)揮" _</p><p> #016 &a
108、mp; "Excel自身的威力,不到萬(wàn)不得已的時(shí)候是不會(huì)去<Alt+F11>的。"</p><p> #017 End With</p><p> #018 End Sub</p><p><b> 代碼解析:</b></p><p> 窗體的Initialize事件過(guò)
109、程,在窗體顯示時(shí)將文本框設(shè)置成多行顯示文本。</p><p> 第3行代碼設(shè)置文本框的WordWrap屬性。WordWrap屬性指定一個(gè)控件的內(nèi)容在行末是否自動(dòng)換行,語(yǔ)法如下:</p><p> object.WordWrap [= Boolean]</p><p> 參數(shù)object是必需的,一個(gè)有效的對(duì)象。</p><p> 參數(shù)
110、Boolean是可選的,控件是否擴(kuò)展以適應(yīng)文本的大小,設(shè)置為T(mén)rue,文本換行,設(shè)置為False,文本不換行。</p><p> 第4行代碼設(shè)置文本框的MultiLine屬性。MultiLine屬性規(guī)定控件能否接受和顯示多行文本,語(yǔ)法如下:</p><p> object.MultiLine [= Boolean]</p><p> 參數(shù)object是必需的,
111、一個(gè)有效的對(duì)象。</p><p> 參數(shù)Boolean是可選的,控件是否支持多行文本,設(shè)置為T(mén)rue,以多行顯示文本,設(shè)置為False,不多行顯示文本。如果將多行文本框的MultiLine屬性設(shè)置為False,則文本框的所有字符都將合并為一行,包括非打印字符(如,回車(chē)和換行)。</p><p> 對(duì)于既支持WordWrap屬性又支持MultiLine屬性的控件,當(dāng)MultiLine屬性
112、為False時(shí),WordWrap屬性被忽略。</p><p> 運(yùn)行窗體,文本框顯示如圖 1051所示。</p><p> 圖 1051文本框自動(dòng)換行</p><p><b> 多個(gè)文本框數(shù)據(jù)相加</b></p><p> 在技巧102 中,我們?cè)赥extBox1、TextBox2中輸入完數(shù)據(jù)后,利用文本框
113、的Change事件使TextBox3顯示其兩者相乘的金額,但是如果窗體中有多個(gè)文本框,需要在每一個(gè)文本框的Change事件中寫(xiě)上相同的重復(fù)代碼,因此使用類(lèi)模塊可以簡(jiǎn)化代碼。</p><p> 在附件的窗體有七個(gè)文本框,其中六個(gè)用來(lái)輸入數(shù)據(jù),一個(gè)用來(lái)顯示其他六個(gè)文本框相加后的合計(jì)數(shù),首先打開(kāi)VBE,插入一個(gè)類(lèi)模塊建立一個(gè)類(lèi),類(lèi)模塊的名字就是類(lèi)的名字修改為“cmds”,在類(lèi)模塊中輸入下面的代碼:</p>
114、<p> Public WithEvents cmd As MSForms.TextBox</p><p><b> 代碼解析:</b></p><p> 使用Public語(yǔ)句聲明變量cmd是用來(lái)響應(yīng)由TextBox對(duì)象觸發(fā)的事件的對(duì)象變量。</p><p> 在窗體的Initialize事件中寫(xiě)入下面的代碼:</p
115、><p> #001 Dim col As New Collection</p><p> #002 Private Sub UserForm_Initialize()</p><p> #003 Dim i As Integer</p><p> #004 Dim myc As cmds</p>&
116、lt;p> #005 For i = 1 To 6</p><p> #006 Set myc = New cmds</p><p> #007 Set myc.cmd = Me.Controls("TextBox" & i)</p><p> #008 col
117、.Add myc</p><p> #009 Next</p><p> #010 Set myc = Nothing</p><p> #011 End Sub</p><p><b> 代碼解析:</b></p><p> 第1行代碼在模塊頂部聲明變量col的類(lèi)
118、型為集合。</p><p> 第5行到第9行代碼,將窗體中的六個(gè)文本框賦給col集合。</p><p> ?。P(guān)于類(lèi)模塊請(qǐng)參閱論壇中有關(guān)的資料。)</p><p> 在類(lèi)模塊中寫(xiě)入下面的代碼:</p><p> #001 Private Sub cmd_Change()</p><p> #002
119、Dim i As Integer</p><p> #003 Dim Dval As Double</p><p> #004 For i = 1 To 6</p><p> #005 Dval = Dval + Val(UserForm1.Controls("TextBox" & i))<
120、;/p><p> #006 UserForm1.TextBox7.Value = Dval</p><p> #007 Next</p><p> #008 End Sub</p><p><b> 代碼解析:</b></p><p> 窗體中的六個(gè)文本框統(tǒng)一的
121、Change事件,當(dāng)任何一個(gè)文本框中的數(shù)據(jù)發(fā)生變化時(shí),所有文本框相加的合計(jì)數(shù)顯示在最后一個(gè)文本框中。</p><p> 運(yùn)行窗體在文本框中輸入數(shù)據(jù)結(jié)果如圖 1061所示。</p><p> 圖 1061多個(gè)文本框數(shù)據(jù)相加</p><p><b> 控件跟隨活動(dòng)單元格</b></p><p> 在工作表中使用
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- vba的控件及用戶窗體
- vba控件與用戶窗體
- 用戶可以輕松地在報(bào)表或窗體上創(chuàng)建一個(gè)計(jì)算控件
- 5窗體與控件
- 用戶窗體的
- windows應(yīng)用程序開(kāi)發(fā)初步常用窗體控件
- vba中的對(duì)話框和自定義窗體
- windows應(yīng)用程序開(kāi)發(fā)進(jìn)階高級(jí)窗體控件
- 動(dòng)態(tài)加載用戶控件
- excel2010vba編程中使用日期控件
- 淺談c#開(kāi)發(fā)中webbrowser控件和窗體通信案例研究
- 構(gòu)建用戶界面和使用控件
- 構(gòu)建用戶界面和使用控件
- png透明窗體全攻略(控件不透明)vc++程序指導(dǎo)
- 一個(gè)原創(chuàng)地儀表控件
- 江蘇銀行密碼衛(wèi)士安全控件用戶說(shuō)明
- 窗體
- 窗體底端
- 基于ArcGIS Engine的房屋拆遷用戶控件設(shè)計(jì)研究.pdf
- android常用控件及布局
評(píng)論
0/150
提交評(píng)論