版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
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文本框回車自動輸入10</p><p> 技巧4自動選擇文本框內(nèi)容11</p><p> 技巧5設(shè)置文本框數(shù)據(jù)格式12</p><p> 技巧6限制文本框的輸入長度14</p><p> 技巧7將光標(biāo)返回文本框中15</p><p> 技巧8文本框的自動換行17</p>
3、<p> 技巧9多個文本框數(shù)據(jù)相加19</p><p> 技巧10控件跟隨活動單元格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移動列表框條目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輸入時逐步提示信息39</p><p> 技巧18二級組合框46</p><p> 技巧19使用DTP控件輸入日
6、期48</p><p> 技巧20使用RefEdit控件選擇區(qū)域51</p><p> 技巧21如何注冊控件52</p><p> 技巧22遍歷控件的方法55</p><p> 22-1使用名稱中的變量遍歷控件55</p><p> 22-2使用對象類型遍歷控件57</p>
7、<p> 22-3使用程序標(biāo)識符遍歷控件58</p><p> 22-4使用名稱中的變量遍歷圖形59</p><p> 22-5使用FormControlType屬性遍歷圖形60</p><p> 技巧23使微調(diào)框最小變動量小于161</p><p> 技巧24不打印工作表中的控件63</p&g
8、t;<p> 24-1設(shè)置控件格式63</p><p> 24-2設(shè)置控件的printobjcet屬性65</p><p> 技巧25在框架中使用滾動條65</p><p> 技巧26使用多頁控件67</p><p> 技巧27標(biāo)簽文字垂直居中對齊69</p><p> 技
9、巧28使用TabStrip控件71</p><p> 技巧29顯示GIF動畫圖片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無標(biāo)題欄和邊框的窗體119
14、</p><p> 技巧43制作年月選擇窗體120</p><p> 技巧44自定義窗體中的鼠標(biāo)指針類型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)行時調(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ù)據(jù)的類型,比如只能輸入數(shù)字。但是
18、沒有內(nèi)置的屬性能限制在文本框中只能輸入數(shù)字,只能在文本框的事件過程中使用代碼來測試輸入的是哪類字符,然后只允許輸入數(shù)字字符和一個“-”號、一個“.”號,如下面的代碼所示。</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事件過程,測試鍵盤輸入的是哪類字符,只允許輸入數(shù)字字符和一個“-”號、一個“.”號。</p><p> KeyPress事件的語法如下:</p><p> Private Sub object_KeyPress( ByVal KeyANSI
24、As MSForms.ReturnInteger)</p><p> 參數(shù)Object是必需的,一個有效的對象。</p><p> 參數(shù)KeyANSI是可選的,整數(shù)值,代表標(biāo)準(zhǔn)的數(shù)字ANSI 鍵代碼。</p><p> 第2行代碼使用Case Else語句測試文本框KeyPress事件的KeyANSI參數(shù)值。</p><p> 第3行
25、代碼,如果鍵盤輸入的是0到9之間的數(shù)字字符,則允許輸入。如果想在文本框中允許其它類型的字符輸入,在此句代碼中列出允許輸入的字符即可。</p><p> 第4行到第8行代碼,如果鍵盤輸入的是“-”號,先使用InStr函數(shù)測試文本框中是否已有“-”號,如果InStr函數(shù)返回值大于0,說明文本框中已有“-”號。接下來使用文本框的SelStart 屬性來測試插入點(diǎn),如果文本框的SelStart 屬性值大于0,說明“-”
26、號的插入點(diǎn)不是第一個。如果以上兩個條件中有任何一個成立,將KeyAscii參數(shù)值設(shè)置為0,使文本框只能在第一位輸入一個“-”號。</p><p> 第9行到第12行代碼,如果鍵盤輸入的是“.”號的話,使用InStr函數(shù)測試文本框中是否已有“.”號,如果已有“.”號,將KeyAscii參數(shù)值設(shè)置為0,使文本框只能輸入一個“.”號。</p><p> 第13、14行代碼,如果鍵盤輸入的是其
27、他字符則將KeyAscii參數(shù)值設(shè)置為0,使文本框不能輸入其他字符。</p><p> 經(jīng)過以上設(shè)置文本框只允許輸入數(shù)字字符和一個“-”號、一個“.”號,但是能輸入中文字符。如果希望限制中文字符的輸入,可以在文本框的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ù)字字符和“-”號、“.”號,如果不是則使用Replace函數(shù)將文本框中輸入的其他字符替換成空白。</p><p
32、> 第5、6行代碼在文本框輸入的所有字符中循環(huán)。</p><p> 第8行代碼列出允許輸入的字符。如果想在文本框中允許其它字符輸入,在此句代碼中列出即可。</p><p> 第9、10行代碼,如果不是允許輸入的字符,使用Replace函數(shù)替換成空白。</p><p> 經(jīng)過以上的設(shè)置,文本框中只能在第一位輸入一個“-”號、一個“.”號和“0”到“9”的
33、數(shù)字。</p><p> 文本框添加右鍵快捷菜單</p><p> VBA中的控件沒有提供右鍵快捷菜單,用戶可以使用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、在模塊級別中聲明變量ActiveTB是用來對應(yīng)窗體中的文本框所觸發(fā)的所有事件的變量。</p><p> CreateShortCutMenu過程用來創(chuàng)建標(biāo)題為“ShortCut”的右鍵快捷菜單,并添加4個菜單項(xiàng)。關(guān)于自定義右鍵快捷菜單請參閱技巧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過程根據(jù)文本框中字符的選中狀態(tài)設(shè)置右鍵快捷菜單菜單項(xiàng)的Enabled屬性后使用ShowPopup方法顯示右鍵快捷菜單。</p><p> 第5行代碼,如果當(dāng)前文本框中已有選中的字符則“剪切”按鈕有效。</p><p> 第6行代碼,如果當(dāng)前文本框中已有選中的字符則“復(fù)制”按鈕有
47、效。</p><p> 第7行代碼,如果剪貼板中包含對象支持的數(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過程是快捷菜單中單擊“剪切”菜單項(xiàng)所運(yùn)行的過程。使用Cut 方法將當(dāng)前選中的文本框中的文本刪除并移至剪貼板。</p><p> Action_Copy過程是快捷菜單中單擊“復(fù)制”菜單項(xiàng)所運(yùn)行的過程。使用C
52、opy方法將文本框選中的文本復(fù)制到剪貼板上。</p><p> Action_Paste過程是快捷菜單中單擊“貼粘”菜單項(xiàng)所運(yùn)行的過程。使用Paste方法把剪貼板上的內(nèi)容傳送到一個文本框中。</p><p> Action_Delete過程是快捷菜單中單擊“貼粘”菜單項(xiàng)所運(yùn)行的過程。使用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過程刪除創(chuàng)建的右鍵快捷菜單。</p><p> 步驟2:在VBE窗口中,單擊菜單“插入”→“用戶窗體”,在窗體上添加兩個文本框控件。雙擊窗體,在其代碼窗口中輸入下面的代碼。</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事件,在窗體初始化時運(yùn)行CreateShortCutMenu過程創(chuàng)建右鍵快捷菜單。</p><p> 第4行到第9行代碼,文本框的MouseUp事件,當(dāng)用戶右健單擊文本框時運(yùn)行ShowPopupMenu過程在選中的菜單項(xiàng)上顯示右鍵快捷菜單。</p><p> 第10行到第12行代碼,窗體的QueryClose事
60、件,在關(guān)閉窗體時運(yùn)行DeleteShortCutMenu過程刪除右鍵快捷菜單。</p><p> 窗體運(yùn)行后,右鍵單擊文本框顯示右鍵快捷菜單,如圖 991所示。</p><p> 圖 991文本框快捷菜單</p><p><b> 文本框回車自動輸入</b></p><p> 在使用文本框向工作表輸入數(shù)據(jù)時
61、,為了加快輸入速度,可以利用文本框的KeyDown事件,回車后自動輸入并清空文本框,如下面的代碼所示。</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>鍵后自動將數(shù)據(jù)錄入到工作表A列最后一個非空單元格的下一個單元格中。</p><p> KeyDown事件在按下鍵盤按鍵時發(fā)生,語法
65、如下:</p><p> Private Sub object_KeyDown( ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As fmShiftState)</p><p> 參數(shù)object是必需的,一個有效的對象。</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ù)值判斷是否按下了回車鍵。如果用戶按下了回車鍵,KeyCode參數(shù)返回常數(shù)vbKeyReturn。</p>
67、<p> 第5、6行代碼,將文本框數(shù)據(jù)輸入到工作表A列的最后一個單元格內(nèi),同時清空文本框內(nèi)容準(zhǔn)備下一次輸入。</p><p><b> 自動選擇文本框內(nèi)容</b></p><p> 如果希望光標(biāo)進(jìn)入文本框時能自動選擇文本框內(nèi)容,可以在文本框的MouseUp事件中來完成,如下面的代碼所示。</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)右鍵時自動選擇文本框內(nèi)容。</p><p> MouseUp事件在用戶釋放鼠標(biāo)按鍵時發(fā)生,語法如下:</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是必需的,一個有效的對象。</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是可選的,窗體、框架或頁的位置的橫坐標(biāo)與縱坐標(biāo)。</p><p> 第3行到第6行代碼,如果用戶進(jìn)入文本框釋放鼠標(biāo)右鍵,設(shè)置文本框的SelStart 屬性為0,SelLength屬性為文本框的全部字符數(shù)
73、。</p><p> SelStart 屬性指定選中文本的起點(diǎn),語法如下:</p><p> object.SelStart [= Long]</p><p> 參數(shù)object是必需的,一個有效的對象。</p><p> 參數(shù)Long是可選的,指定選中文本的起點(diǎn)。</p><p> SelLength 屬性
74、指定文本框或組合框的文本部分中選中的字符數(shù),語法如下:</p><p> object.SelLength [= Long]</p><p> 參數(shù)object是必需的,一個有效的對象。</p><p> 參數(shù)Long是可選的,指定選中的字符數(shù)。</p><p> 運(yùn)行窗體,當(dāng)光標(biāo)進(jìn)入文本框釋放鼠標(biāo)右鍵時自動選擇文本框內(nèi)容,如圖 10
75、11所示。</p><p> 圖 1011自動選擇文本框內(nèi)容</p><p><b> 設(shè)置文本框數(shù)據(jù)格式</b></p><p> 文本框在用來輸入數(shù)據(jù)時,除了限制輸入的數(shù)據(jù)類型外,還可以設(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、事件過程,在文本框輸入數(shù)據(jù)時使用Format函數(shù)格式化為兩位小數(shù)格式。</p><p> 控件的Exit事件在同一窗體中的一個控件即將把焦點(diǎn)轉(zhuǎn)移到另一個控件之前發(fā)生,語法如下:</p><p> Private Sub object_Exit( ByVal Cancel As MSForms.ReturnBoolean)</p><p> 參數(shù)Object是必
79、需的,一個有效的對象。</p><p> 參數(shù)Cancel是必需的,事件狀態(tài)。如果設(shè)置為False表示由該控件處理這個事件(默認(rèn)方式)。設(shè)置為True表示由應(yīng)用程序處理這個事件,并且焦點(diǎn)留在當(dāng)前控件上。</p><p> 當(dāng)文本框在輸入完數(shù)據(jù)失去焦點(diǎn)時使用Format函數(shù)格式化自定義數(shù)值格式。Format函數(shù)語法如下:</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ù)據(jù)請參閱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事件過程,在兩個文本框輸入完數(shù)據(jù)后,使用文本框的Change事件使TextBox3顯示其相乘
84、的金額并格式化為兩位小數(shù)的數(shù)據(jù)格式。</p><p> Change事件在控件的 Value 屬性改變時發(fā)生,語法如下:</p><p> Private Sub object_Change( )</p><p> 參數(shù)object是必需的,一個有效的對象。</p><p> Change事件過程可以使顯示在控件上的數(shù)據(jù)同步或一致。在
85、本例中,當(dāng)TextBox1或TextBox2的數(shù)據(jù)發(fā)生改變時,兩者相乘的金額的金額也隨之改變并在TextBox3中顯示。</p><p> 因?yàn)槲谋究虻臄?shù)據(jù)類型是文本字符串,不能直接進(jìn)行計算的,所以計算前先使用Val函數(shù)轉(zhuǎn)換為數(shù)字,才能進(jìn)行計算。</p><p> 運(yùn)行窗體,輸入數(shù)據(jù)后格式化為兩位小數(shù)的數(shù)據(jù)格式,如圖 1021所示。</p><p> 圖 1
86、021設(shè)置文本框的數(shù)據(jù)格式</p><p> 限制文本框的輸入長度</p><p> 在使用文本框輸入數(shù)據(jù)時,可能希望限制能輸入的字符長度,即只能輸入一定長度的字符,超過設(shè)置數(shù)值就不能輸入,這時可以通過設(shè)置文本框的MaxLength屬性來實(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> 工作表的激活事件過程,將文本框的MaxLength屬性設(shè)置為6,使文本框只能輸入6個字符,超過6個字符即不能輸入
88、。</p><p> 應(yīng)用于文本框控件的MaxLength屬性規(guī)定用戶可以在文本框中輸入的最多字符數(shù),語法如下:</p><p> object.MaxLength [= Long]</p><p> 參數(shù)object是必需的,一個有效的對象。</p><p> 參數(shù)Long是可選的,整數(shù),表示所允許的字符數(shù)。</p>
89、<p> 如果將MaxLength屬性設(shè)置為0,表示只要內(nèi)存允許則沒有限制。</p><p><b> 將光標(biāo)返回文本框中</b></p><p> 在用文本框往工作表錄入數(shù)據(jù)時,一般會在錄入到工作表前驗(yàn)證輸入的數(shù)據(jù)是否正確,如果錯誤,則清空文本框內(nèi)容,提示用戶重新輸入。但此時光標(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、 "身份證號碼錄入錯誤!"</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事件,在輸入身份證號碼后即將把焦點(diǎn)轉(zhuǎn)移到錄入按鈕控件之前檢查輸入的身份證號碼是否正確。</p><p> Exit事件在一個控件從同一窗體的另一個控件實(shí)際接收到焦點(diǎn)之前發(fā)生,語法如下:</p><p> Private Sub object_Exit( ByVal Cancel
94、 As MSForms.ReturnBoolean)</p><p> Cancel參數(shù)為事件狀態(tài)。False表示由該控件處理這個事件(這是默認(rèn)方式)。True表示由應(yīng)用程序處理這個事件,并且焦點(diǎn)應(yīng)當(dāng)留在當(dāng)前控件上。</p><p> 第3行代碼,使用Len函數(shù)和Trim函數(shù)檢查輸入的身份證號碼是否為15位或18位。</p><p> 第4行到第6行代碼,如果
95、輸入的身份證號碼不正確,清空文本框以便重新輸入并提示用戶,設(shè)置Cancel參數(shù)為True使光標(biāo)停留在文本框中。</p><p> 在Exit事件中之所以把文本框?yàn)榭找沧鰹橥ㄟ^驗(yàn)證的條件之一,因?yàn)槿绻患由稀癟extBox1.Text <> ""”這一條件,那么在窗體顯示后,如果用戶取消輸入或關(guān)閉輸入窗體,也會提示輸入錯誤。所以在錄入到工作表之前再驗(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;請輸入身份證號碼!"</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列最后一個單元格中并重新選擇文本框準(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)移動到對象的實(shí)例中,語法如下 :</p><p> object.SetFocus</p><p> 參數(shù)object.是必需的,一個有效的對象。</p&g
101、t;<p> 運(yùn)行窗體,在輸入框中輸入身份證號碼后自動驗(yàn)證輸入的數(shù)據(jù),如果輸入數(shù)據(jù)錯誤,清空文本框并提示用戶重新輸入,如圖 1041所示。</p><p> 圖 1041提示用戶重新輸入</p><p><b> 文本框的自動換行</b></p><p> 在使用使用文本框顯示或錄入一段很長的文本時,需要將文本框設(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軟件的二次開發(fā)能力而附加"
104、 _</p><p> #007 & "于其中的編程語言。VBA的確非常強(qiáng)大,其與VB完全一" _</p><p> #008 & "致的語法結(jié)構(gòu),高效控制Office對象模型的能力,令無" _</p><p> #009
105、 & "數(shù)人為之折腰。利用VBA,幾乎可以在Office里面做任何" _</p><p> #010 & "其他程序能做的事情。但是,應(yīng)該清楚的認(rèn)識到VBA是依" _</p><p> #011 & "托其宿主─—Excel(或
106、其他Office組件)而存在的,對" _</p><p> #012 & "于Excel用戶來講,VBA只不過是錦上添花的東西,切不可" _</p><p> #013 & "本末倒置,撿了芝麻丟了西瓜,把明明能夠利用Excel內(nèi)置" _</p&g
107、t;<p> #014 & "功能完成的任務(wù),硬是搬到VBA里面去做,以為用代碼實(shí)現(xiàn)" _</p><p> #015 & "就是高人一頭的表現(xiàn)。其實(shí),真正的高手,會盡量發(fā)揮" _</p><p> #016 &a
108、mp; "Excel自身的威力,不到萬不得已的時候是不會去<Alt+F11>的。"</p><p> #017 End With</p><p> #018 End Sub</p><p><b> 代碼解析:</b></p><p> 窗體的Initialize事件過
109、程,在窗體顯示時將文本框設(shè)置成多行顯示文本。</p><p> 第3行代碼設(shè)置文本框的WordWrap屬性。WordWrap屬性指定一個控件的內(nèi)容在行末是否自動換行,語法如下:</p><p> object.WordWrap [= Boolean]</p><p> 參數(shù)object是必需的,一個有效的對象。</p><p> 參數(shù)
110、Boolean是可選的,控件是否擴(kuò)展以適應(yīng)文本的大小,設(shè)置為True,文本換行,設(shè)置為False,文本不換行。</p><p> 第4行代碼設(shè)置文本框的MultiLine屬性。MultiLine屬性規(guī)定控件能否接受和顯示多行文本,語法如下:</p><p> object.MultiLine [= Boolean]</p><p> 參數(shù)object是必需的,
111、一個有效的對象。</p><p> 參數(shù)Boolean是可選的,控件是否支持多行文本,設(shè)置為True,以多行顯示文本,設(shè)置為False,不多行顯示文本。如果將多行文本框的MultiLine屬性設(shè)置為False,則文本框的所有字符都將合并為一行,包括非打印字符(如,回車和換行)。</p><p> 對于既支持WordWrap屬性又支持MultiLine屬性的控件,當(dāng)MultiLine屬性
112、為False時,WordWrap屬性被忽略。</p><p> 運(yùn)行窗體,文本框顯示如圖 1051所示。</p><p> 圖 1051文本框自動換行</p><p><b> 多個文本框數(shù)據(jù)相加</b></p><p> 在技巧102 中,我們在TextBox1、TextBox2中輸入完數(shù)據(jù)后,利用文本框
113、的Change事件使TextBox3顯示其兩者相乘的金額,但是如果窗體中有多個文本框,需要在每一個文本框的Change事件中寫上相同的重復(fù)代碼,因此使用類模塊可以簡化代碼。</p><p> 在附件的窗體有七個文本框,其中六個用來輸入數(shù)據(jù),一個用來顯示其他六個文本框相加后的合計數(shù),首先打開VBE,插入一個類模塊建立一個類,類模塊的名字就是類的名字修改為“cmds”,在類模塊中輸入下面的代碼:</p>
114、<p> Public WithEvents cmd As MSForms.TextBox</p><p><b> 代碼解析:</b></p><p> 使用Public語句聲明變量cmd是用來響應(yīng)由TextBox對象觸發(fā)的事件的對象變量。</p><p> 在窗體的Initialize事件中寫入下面的代碼:</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的類
118、型為集合。</p><p> 第5行到第9行代碼,將窗體中的六個文本框賦給col集合。</p><p> ?。P(guān)于類模塊請參閱論壇中有關(guān)的資料。)</p><p> 在類模塊中寫入下面的代碼:</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> 窗體中的六個文本框統(tǒng)一的
121、Change事件,當(dāng)任何一個文本框中的數(shù)據(jù)發(fā)生變化時,所有文本框相加的合計數(shù)顯示在最后一個文本框中。</p><p> 運(yùn)行窗體在文本框中輸入數(shù)據(jù)結(jié)果如圖 1061所示。</p><p> 圖 1061多個文本框數(shù)據(jù)相加</p><p><b> 控件跟隨活動單元格</b></p><p> 在工作表中使用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- vba的控件及用戶窗體
- vba控件與用戶窗體
- 用戶可以輕松地在報表或窗體上創(chuàng)建一個計算控件
- 5窗體與控件
- 用戶窗體的
- windows應(yīng)用程序開發(fā)初步常用窗體控件
- vba中的對話框和自定義窗體
- windows應(yīng)用程序開發(fā)進(jìn)階高級窗體控件
- 動態(tài)加載用戶控件
- excel2010vba編程中使用日期控件
- 淺談c#開發(fā)中webbrowser控件和窗體通信案例研究
- 構(gòu)建用戶界面和使用控件
- 構(gòu)建用戶界面和使用控件
- png透明窗體全攻略(控件不透明)vc++程序指導(dǎo)
- 一個原創(chuàng)地儀表控件
- 江蘇銀行密碼衛(wèi)士安全控件用戶說明
- 窗體
- 窗體底端
- 基于ArcGIS Engine的房屋拆遷用戶控件設(shè)計研究.pdf
- android常用控件及布局
評論
0/150
提交評論