电竞比分网-中国电竞赛事及体育赛事平台

分享

VBA常用代碼解析(第二十六講)

 wdmexcel 2015-09-14

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)參閱VBAFormat函數(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)TextBox1TextBox2的數(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(10) = .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)行窗體,文本框顯示。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多