中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
VBA常用代碼解析(第五講)



下面應(yīng)一位粉絲的要求,開始把我以前的一些學(xué)習(xí)資料整理了一下,然后分20期發(fā)給各位有需要的朋友,您也可以索取源文件,郵箱:546039945@qq.com!

026 禁止刪除指定工作表

在工作表事件中是沒有工作表刪除事件的,為了防止用戶誤刪除重要的工作表,除了使用保護(hù)工作簿方法外,還可以使用下面的代碼。

Public Ctl As CommandBarControl

Sub DelSht()

SetCtl = Application.CommandBars.FindControl(ID:=847)

Ctl.OnAction= 'MyDelSht'

End Sub

Sub ResSht()

SetCtl = Application.CommandBars.FindControl(ID:=847)

Ctl.OnAction= ““

End Sub

Sub MyDelSht()

If VBA.UCase$(ActiveSheet.CodeName)= 'SHEET2' Then

MsgBox '禁止刪除' & ActiveSheet.Name & '工作表!'

Else

ActiveSheet.Delete

EndIf

End Sub

代碼解析:

DelSht過程將工作表標(biāo)簽右鍵菜單中的“刪除工作表”菜單的OnAction屬性設(shè)置為“MyDelSht”。

3行代碼使用Set語句將工作表標(biāo)簽右鍵菜單中的“刪除工作表”菜單賦給變量Ctl,并將其OnAction屬性設(shè)置為MyDelSht過程,該菜單被單擊時(shí)將運(yùn)行“MyDelSht”過程而不是系統(tǒng)默認(rèn)的設(shè)置。OnAction屬性返回或設(shè)置一個(gè)VBA的過程名,該過程在用戶單擊或更改某命令欄控件的值時(shí)運(yùn)行。

ResSht過程將工作表標(biāo)簽右鍵菜單中的“刪除工作表”菜單的OnAction屬性恢復(fù)為默認(rèn)設(shè)置。

MyDelSht過程判斷所要?jiǎng)h除的工作表的代碼名稱是否是“SHEET2,如果是則禁止刪除該表而只顯示一個(gè)提示消息框。

為了不影響其他工作簿的使用,在VBE中雙擊ThisWorkbook寫入下面的代碼。

Private Sub Workbook_Activate()

CallDelSht

End Sub

Private Sub Workbook_Deactivate()

CallResSht

End Sub

代碼解析:

工作簿的Activate事件和Deactivate事件代碼,在工作簿激活時(shí)運(yùn)行DelSht過程,在關(guān)閉或打開其他工作簿時(shí)運(yùn)行ResSht過程,這樣只禁止刪除本工作簿中“SHEET2”工作表,并不影響其他工作簿。當(dāng)刪除本工作簿中的“SHEET2”工作表時(shí),并不會(huì)執(zhí)行刪除工作表操作而只會(huì)顯示禁止刪除工作表的消息框。

027 自動(dòng)建立工作表目錄

如果在工作簿中有許多工作表,使用時(shí)往往會(huì)建立一張目錄表并插入超鏈接以方便選擇工作表。但是如果工作簿中的工作表經(jīng)常添加和刪除,使用手工建立目錄很不方便,此時(shí)可以使用工作表的Activate事件自動(dòng)建立工作表的目錄,如下面的代碼所示。

Private Sub Worksheet_Activate()

Dimsh As Worksheet

Dima As Integer

DimR As Integer

R =Sheet1.[A65536].End(xlUp).Row

a =2

If Sheet1.Cells(2,1) <> ““ Then

Sheet1.Range('A2:A' & R).ClearContents

EndIf

ForEach sh In Worksheets

If sh.CodeName <> 'Sheet1'Then

Sheet1.Cells(a1).Value = sh.Name

a = a + 1

End If

Next

End Sub

代碼解析:

工作表的Activate事件,在“目錄”工作表激活時(shí)自動(dòng)建立工作簿中除“目錄”工作表外所有工作表的目錄。

2、34行代碼聲明變量類型。

5行代碼取得A列最后非空單元格的行號(hào)。

6行代碼設(shè)置變量a的初始值為2,從A2單元格開始建立工作表目錄。

7行到第9行代碼判斷是否存在工作表目錄,如果存在先清空原來的目錄,以便更新目錄。

10行到第15代碼遍歷工作簿的所有工作表,將除“目錄”工作表外所有工作表的名稱寫入到A列單元格中。

為了建立到各工作表的鏈接,使用工作表的SelectionChange事件,如下面的代碼所示。

Private Sub Worksheet_SelectionChange(ByVal TargetAs Range)

DimR As Integer

R =Sheet1.[A65500].End(xlUp).Row

On ErrorResume Next

If Target.Count= 1 Then

If Target.Column = 1 Then

If Target.Row > 1 And Target.Row<= R Then

Sheets(Target.Value).Select

End If

End If

EndIf

End Sub

代碼解析:

工作表的SelectionChange事件,當(dāng)選擇A列工作表目錄中工作表名稱時(shí)自動(dòng)選擇該單元格所對(duì)應(yīng)的工作表。

5、6、7行代碼限制該事件觸發(fā)的條件。

8行代碼選擇單元格所對(duì)應(yīng)的工作表。

“目錄”工作表激活后自動(dòng)在A列建立工作簿中除“目錄”工作表以外所有表的目錄,

028 工作表的深度隱藏

在使用VBA開發(fā)的工作簿文件完成交與用戶使用后,我們往往希望用戶在打開工作簿時(shí)啟用宏,此時(shí)除了使用“禁用宏則關(guān)閉工作簿”的功能外,還可以隱藏所有有數(shù)據(jù)的工作表,如果用戶在打開工作簿時(shí)禁用宏則只顯示一張空白的工作表,達(dá)到強(qiáng)制啟用宏的效果,代碼如下:

Dim sh As Worksheet

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Sheet1.Visible= True

ForEach sh In ThisWorkbook.Sheets

If sh.Name <> '空白' Then

sh.Visible = xlSheetVeryHidden

End If

Next

ActiveWorkbook.Save

End Sub

Private Sub Workbook_Open()

ForEach sh In ThisWorkbook.Sheets

If sh.Name <> '空白' Then

sh.Visible = xlSheetVisible

End If

Next

Sheet1.Visible= xlSheetVeryHidden

End Sub

代碼解析:

2行到第10行代碼是工作簿的BeforeClose事件過程,在工作簿關(guān)閉前隱藏除“空白”表以外的所有的工作表。

3行代碼將“空白”表的Visible屬性設(shè)置為True,使其可見。

應(yīng)用于ChartsWorksheets對(duì)象的Visible屬性決定對(duì)象是否可見,語法如下:

expression.Visible

參數(shù)expression是必需的,該表達(dá)式返回上面的對(duì)象之一。

Visible屬性可以設(shè)置為表格所示的XlSheetVisibility常量之一。

4行到第8行代碼使用For Each...Next語句遍歷工作簿中所有的工作表,將除“空白”表以外的所有工作表的Visible屬性設(shè)置為xlSheetVeryHidden,使之隱藏。

Visible屬性設(shè)置為xlSheetVeryHidden后工作表不能通過“格式”→“工作表”→“取消隱藏”菜單來顯示隱藏的工作表。

9行代碼使用Save方法保存代碼所在工作簿的更改,在關(guān)閉工作簿時(shí)不顯示消息框。

10行到第18行代碼是工作簿的Open事件過程,在打開工作簿時(shí)將除“空白”表以外的所有工作表的Visible屬性設(shè)置為xlSheetVisible,取消隱藏。如果打開工作簿時(shí)禁用宏,則工作簿中除了“空白”表以外,其他的工作表還處于深度隱藏的狀態(tài),,這樣就達(dá)到強(qiáng)制用戶啟用宏的效果,當(dāng)然這還需要VBA工程保護(hù)的配合。

029 防止更改工作表的名稱

工作表的名稱顯示在工作表標(biāo)簽上,除了在相應(yīng)的功能菜單中可以對(duì)其進(jìn)行重命名操作外,在工作表標(biāo)簽上雙擊鼠標(biāo)也能修改工作表名稱。一旦修改了工作表名稱,可能就會(huì)產(chǎn)生一連串的問題,例如在其他工作簿中對(duì)該工作表的引用將會(huì)失效,通過工作表名稱引用工作表的代碼也將出錯(cuò)。

Excel沒有提供修改工作表名稱的相關(guān)事件,要禁止用戶修改工作表名稱,需采取其他一些▲。比如在工作表BeforeClose事件中檢驗(yàn)工作表名稱,如果工作表名稱不是指定的字符串,則將其修改為指定字符串,即保持工作表名稱不變,代碼如下。

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Sheet1.Name<> 'Excel Home' Then Sheet1.Name = 'Excel Home'

ThisWorkbook.Save

End Sub

代碼解析:

工作簿的BeforeClose事件過程,在關(guān)閉當(dāng)前工作簿時(shí)判斷Sheet1工作表名稱,如果不是指定的字符串“Excel Home”,則將其恢復(fù)為“ExcelHome”后保存工作簿,從而避免更改Sheet1工作表名稱。

030 工作表中一次插入多行

在工作表的中插入多行空行,需要使用Insert方法,如下面的代碼所示。

Sub InSertRows_1()

Dimi As Integer

Fori = 1 To 3

Sheet1.Rows(3).Insert

Next

End Sub

代碼解析:

nSertRows_1過程使用Insert方法在數(shù)據(jù)區(qū)域的第2行和第3行之間插入三行空行。

Insert方法應(yīng)用于Range對(duì)象時(shí)在工作表或宏表中插入一個(gè)單元格或單元格區(qū)域,其他單元格作相應(yīng)移位以騰出空間,語法如下:

expression.Insert(ShiftCopyOrigin)

參數(shù)expression是必需的,該表達(dá)式返回一個(gè)Range對(duì)象。

參數(shù)Shift是可選的,指定單元格的移動(dòng)方向。可為以下XlInsertShiftDirection常量之一:xlShiftToRightxlShiftDown。如果省略本參數(shù),MicrosoftExcel將依據(jù)該區(qū)域的形狀決定移動(dòng)方向。

參數(shù)CopyOrigin是可選的,復(fù)制的起點(diǎn)。

還可以使用引用多行的方法,如下面的代碼所示。

Sub InSertRows_2()

Sheet2.Range('A3').EntireRow.Resize(3).Insert

End Sub

代碼解析:

InSertRows_2過程通過引用多行區(qū)域的方法實(shí)現(xiàn)一次插入多行。

2行代碼中的Range(A3).EntireRow屬性返回Range(A3)單元格所在的一整行,然后使用Resize屬性調(diào)整行數(shù)后插入三行空行。

也可以直接指定相應(yīng)行再調(diào)整行數(shù)后插入空行,如下面的示例代碼:

Sub InSertRows_3()

Sheet3.Rows(3).Resize(3).Insert

End Sub


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
科學(xué)網(wǎng)—電子表格VBA編程計(jì)算速成(2)
Excel VBA解讀(72):隱藏工作表——Visible屬性
VBA代碼庫11:強(qiáng)制用戶啟用宏(續(xù))
Excel怎么保護(hù)自己的勞動(dòng)成果?強(qiáng)制用戶啟用宏,再加上這一步
給工作簿創(chuàng)建目錄,方法有多種,我們介紹使用VBA的方法
牛b!Excel一鍵生成N個(gè)工作表跟工作簿
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服