2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩157頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論