|
102 設(shè)置文本框數(shù)據(jù)格式 文本框在用來輸入數(shù)據(jù)時(shí),除了限制輸入的數(shù)據(jù)類型外,還可以設(shè)置文本框的數(shù)據(jù)格式,如下面的代碼所示。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox1= Format(TextBox1,'0.00') End Sub Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox2= Format(TextBox2,'0.00') End Sub 代碼解析: 文本框的Exit事件過程,在文本框輸入數(shù)據(jù)時(shí)使用Format函數(shù)格式化為兩位小數(shù)格式。 控件的Exit事件在同一窗體中的一個(gè)控件即將把焦點(diǎn)轉(zhuǎn)移到另一個(gè)控件之前發(fā)生,語法如下: Private Sub object_Exit(ByVal Cancel As MSForms.ReturnBoolean) 參數(shù)Object是必需的,一個(gè)有效的對(duì)象。 參數(shù)Cancel是必需的,事件狀態(tài)。如果設(shè)置為False表示由該控件處理這個(gè)事件(默認(rèn)方式)。設(shè)置為True表示由應(yīng)用程序處理這個(gè)事件,并且焦點(diǎn)留在當(dāng)前控件上。 當(dāng)文本框在輸入完數(shù)據(jù)失去焦點(diǎn)時(shí)使用Format函數(shù)格式化自定義數(shù)值格式。Format函數(shù)語法如下: Format(expression[,format[,firstdayofweek[,firstweekofyear]]]) 參數(shù)expression是必需的,任何有效的表達(dá)式。 參數(shù)format是可選的,有效的命名表達(dá)式或用戶自定義格式表達(dá)式。 參數(shù)firstdayofweek是可選的,常數(shù),表示一星期的第一天。 參數(shù)firstweekofyear是可選的,常數(shù),表示一年的第一周。 在本例中,將文本框的數(shù)據(jù)格式化成自定義的兩位小數(shù)的數(shù)值格式,關(guān)于Format函數(shù)格式化日期和時(shí)間等其他數(shù)據(jù)請(qǐng)參閱VBA中Format函數(shù)的幫助。 Private Sub TextBox1_Change() TextBox3= Format(Val(TextBox1) * Val(TextBox2),'0.00') End Sub Private Sub TextBox2_Change() TextBox3= Format(Val(TextBox1) * Val(TextBox2),'0.00') End Sub 代碼解析: 文本框的Change事件過程,在兩個(gè)文本框輸入完數(shù)據(jù)后,使用文本框的Change事件使TextBox3顯示其相乘的金額并格式化為兩位小數(shù)的數(shù)據(jù)格式。 Change事件在控件的 Value 屬性改變時(shí)發(fā)生,語法如下: Private Sub object_Change() 參數(shù)object是必需的,一個(gè)有效的對(duì)象。 Change事件過程可以使顯示在控件上的數(shù)據(jù)同步或一致。在本例中,當(dāng)TextBox1或TextBox2的數(shù)據(jù)發(fā)生改變時(shí),兩者相乘的金額的金額也隨之改變并在TextBox3中顯示。 因?yàn)槲谋究虻臄?shù)據(jù)類型是文本字符串,不能直接進(jìn)行計(jì)算的,所以計(jì)算前先使用Val函數(shù)轉(zhuǎn)換為數(shù)字,才能進(jìn)行計(jì)算。 運(yùn)行窗體,輸入數(shù)據(jù)后格式化為兩位小數(shù)的數(shù)據(jù)格式。
▲103 限制文本框的輸入長(zhǎng)度 在使用文本框輸入數(shù)據(jù)時(shí),可能希望限制能輸入的字符長(zhǎng)度,即只能輸入一定長(zhǎng)度的字符,超過設(shè)置數(shù)值就不能輸入,這時(shí)可以通過設(shè)置文本框的MaxLength屬性來實(shí)現(xiàn),如下面的代碼所示。 Private Sub Worksheet_Activate() Me.TextBox1.MaxLength= 6 End Sub 代碼解析: 工作表的激活事件過程,將文本框的MaxLength屬性設(shè)置為6,使文本框只能輸入6個(gè)字符,超過6個(gè)字符即不能輸入。 應(yīng)用于文本框控件的MaxLength屬性規(guī)定用戶可以在文本框中輸入的最多字符數(shù),語法如下: object.MaxLength [=Long] 參數(shù)object是必需的,一個(gè)有效的對(duì)象。 參數(shù)Long是可選的,整數(shù),表示所允許的字符數(shù)。 如果將MaxLength屬性設(shè)置為0,表示只要內(nèi)存允許則沒有限制。
▲104 將光標(biāo)返回文本框中 在用文本框往工作表錄入數(shù)據(jù)時(shí),一般會(huì)在錄入到工作表前驗(yàn)證輸入的數(shù)據(jù)是否正確,如果錯(cuò)誤,則清空文本框內(nèi)容,提示用戶重新輸入。但此時(shí)光標(biāo)已經(jīng)不在文本框中,需要重新選擇文本框才能輸入。 可以在Exit事件中可以設(shè)置Cancel參數(shù)值使光標(biāo)停留在當(dāng)前文本框中,如下面的代碼所示。 Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) WithTextBox1 If .Text <> ““ And Len(Trim(.Text))<> 15 And Len(Trim(.Text)) <> 18 Then .Text = ““ MsgBox '身份證號(hào)碼錄入錯(cuò)誤!' Cancel = True End If EndWith End Sub 代碼解析: 文本框的Exit事件,在輸入身份證號(hào)碼后即將把焦點(diǎn)轉(zhuǎn)移到錄入按鈕控件之前檢查輸入的身份證號(hào)碼是否正確。 Exit事件在一個(gè)控件從同一窗體的另一個(gè)控件實(shí)際接收到焦點(diǎn)之前發(fā)生,語法如下: Private Sub object_Exit(ByVal Cancel As MSForms.ReturnBoolean) Cancel參數(shù)為事件狀態(tài)。False表示由該控件處理這個(gè)事件(這是默認(rèn)方式)。True表示由應(yīng)用程序處理這個(gè)事件,并且焦點(diǎn)應(yīng)當(dāng)留在當(dāng)前控件上。 第3行代碼,使用Len函數(shù)和Trim函數(shù)檢查輸入的身份證號(hào)碼是否為15位或18位。 第4行到第6行代碼,如果輸入的身份證號(hào)碼不正確,清空文本框以便重新輸入并提示用戶,設(shè)置Cancel參數(shù)為True使光標(biāo)停留在文本框中。 在Exit事件中之所以把文本框?yàn)榭找沧鰹橥ㄟ^驗(yàn)證的條件之一,因?yàn)槿绻患由稀?/span>TextBox1.Text <> ““”這一條件,那么在窗體顯示后,如果用戶取消輸入或關(guān)閉輸入窗體,也會(huì)提示輸入錯(cuò)誤。所以在錄入到工作表之前再驗(yàn)證文本框是否為空,如下面的代碼所示。 Private Sub CommandButton1_Click() WithTextBox1 If .Text <> ““ Then Sheet1.Range('a65536').End(xlUp).Offset(1,0) = .Text .Text = ““ Else MsgBox '請(qǐng)輸入身份證號(hào)碼!' End If .SetFocus EndWith End Sub 代碼解析: 輸入按鈕的Click事件,把文本框數(shù)據(jù)錄入到工作表A列最后一個(gè)單元格中并重新選擇文本框準(zhǔn)備下一次輸入。 第3行代碼,在輸入到工作表前檢查文本框是否為空。 第4、5行代碼,如果文本框不為空,錄入數(shù)據(jù)到工作表并清空文本框內(nèi)容。 第7行代碼,如果文本框?yàn)榭?,提示用戶輸入?shù)據(jù)。 第8行代碼,使用SetFocus方法將光標(biāo)返回到文本框中以便重新輸入。 SetFocus方法將焦點(diǎn)移動(dòng)到對(duì)象的實(shí)例中,語法如下: object.SetFocus 參數(shù)object.是必需的,一個(gè)有效的對(duì)象。 運(yùn)行窗體,在輸入框中輸入身份證號(hào)碼后自動(dòng)驗(yàn)證輸入的數(shù)據(jù),如果輸入數(shù)據(jù)錯(cuò)誤,清空文本框并提示用戶重新輸入。
▲105 文本框的自動(dòng)換行 在使用使用文本框顯示或錄入一段很長(zhǎng)的文本時(shí),需要將文本框設(shè)置成多行顯示,否則文本內(nèi)容只能在一行中顯示,示例代碼如下: Private Sub UserForm_Initialize() WithTextBox1 .WordWrap = True .MultiLine = True .Text = Space(4) & 'VBA(VisualBasic for Application)是' _ & '微軟公司為了加強(qiáng)Office軟件的二次開發(fā)能力而附加' _ & '于其中的編程語言。VBA的確非常強(qiáng)大,其與VB完全一' _ & '致的語法結(jié)構(gòu),高效控制Office對(duì)象模型的能力,令無' _ & '數(shù)人為之折腰。利用VBA,幾乎可以在Office里面做任何' _ & '其他程序能做的事情。但是,應(yīng)該清楚的認(rèn)識(shí)到VBA是依' _ & '托其宿主─—Excel(或其他Office組件)而存在的,對(duì)' _ & '于Excel用戶來講,VBA只不過是錦上添花的東西,切不可' _ & '本末倒置,撿了芝麻丟了西瓜,把明明能夠利用Excel內(nèi)置' _ & '功能完成的任務(wù),硬是搬到VBA里面去做,以為用代碼實(shí)現(xiàn)' _ & '就是高人一頭的表現(xiàn)。其實(shí),真正的高手,會(huì)盡量發(fā)揮' _ & 'Excel自身的威力,不到萬不得已的時(shí)候是不會(huì)去<Alt+F11>的。' EndWith End Sub 代碼解析: 窗體的Initialize事件過程,在窗體顯示時(shí)將文本框設(shè)置成多行顯示文本。 第3行代碼設(shè)置文本框的WordWrap屬性。WordWrap屬性指定一個(gè)控件的內(nèi)容在行末是否自動(dòng)換行,語法如下: object.WordWrap [=Boolean] 參數(shù)object是必需的,一個(gè)有效的對(duì)象。 參數(shù)Boolean是可選的,控件是否擴(kuò)展以適應(yīng)文本的大小,設(shè)置為True,文本換行,設(shè)置為False,文本不換行。 第4行代碼設(shè)置文本框的MultiLine屬性。MultiLine屬性規(guī)定控件能否接受和顯示多行文本,語法如下: object.MultiLine [=Boolean] 參數(shù)object是必需的,一個(gè)有效的對(duì)象。 參數(shù)Boolean是可選的,控件是否支持多行文本,設(shè)置為True,以多行顯示文本,設(shè)置為False,不多行顯示文本。如果將多行文本框的MultiLine屬性設(shè)置為False,則文本框的所有字符都將合并為一行,包括非打印字符(如,回車和換行)。 對(duì)于既支持WordWrap屬性又支持MultiLine屬性的控件,當(dāng)MultiLine屬性為False時(shí),WordWrap屬性被忽略。運(yùn)行窗體,文本框顯示。
|
|
|