工作表事件
- vba 事件的概念和 js 中的時(shí)間的概念是相似的,就是一定的操作會(huì)自動(dòng)觸發(fā)相應(yīng)的代碼邏輯
- 工作表時(shí)間就是針對(duì) worksheet 的,對(duì)工作表進(jìn)行一定的操作可以觸發(fā)我們自己編寫的邏輯代碼,而不用手動(dòng)運(yùn)行
- 下面的圖片中第一個(gè)下拉框一定要選中 worksheet ,這樣我們就可以在后面的下拉框中選擇相應(yīng)的工作表事件,然后在自動(dòng)生成的sub 中進(jìn)行代碼邏輯的編寫
- 常用工作表事件總結(jié)
工作簿事件
- 工作簿事件基本也沒啥可說的就是作用的對(duì)象不同而已
文件備份代碼
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim wb As Workbook
Set wb = ThisWorkbook
wb.SaveCopyAs wb.Path & "\" & Format(Now(), "yyyymmddhhmmss") & ".xlsm"
End Sub
程序事件
- 程序事件的話對(duì)所有的工作簿都是有效的
- 一個(gè)工作簿中程序事件的代碼一般是放在工作簿對(duì)象下,而不是工作表
- 一個(gè)工作簿中編寫相應(yīng)的 excel 程序后,excel 打開的工作簿都會(huì)有相應(yīng)的事件的響應(yīng)
一、程序事件的編寫
1、基本步驟
'這里的聲明很重要
Public WithEvents app As Excel.Application
Private Sub app_NewWorkbook(ByVal Wb As Workbook)
MsgBox "正在新建工作簿"
End Sub
Private Sub app_WorkbookNewSheet(ByVal Wb As Workbook, ByVal Sh As Object)
MsgBox "你正在新建工作表" & Wb.Name & ":" & Sh.Name
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
MsgBox " cant close"
' Cancel = True
End Sub
Private Sub Workbook_Open()
'這里的賦值也是很關(guān)鍵的一步,一般就是在這個(gè)工作簿事件中進(jìn)行賦值的
Set app = Excel.Application
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
MsgBox "正在切換工作表"
End Sub
- 然后就是在下拉框中選擇我們定義的 app 進(jìn)行程序事件代碼編寫
2、常見的程序事件
圖片來自博文:https://www.cnblogs.com/lidapengwww/p/12580225.html
3、注意事項(xiàng)
- 事件引起的操作本身也可能再次引發(fā)事件,這樣程序就會(huì)存于一個(gè)死循環(huán),解決的方法就是在事件的響應(yīng)代碼最前面關(guān)閉事件(enableEvents= false),處理完成之后再開啟事件
4、excel 中的表單控件和 AX 控件的區(qū)別
- 表單控件使用和功能更加簡單直接插入控件指定相應(yīng)的宏就能使用了
- AX 控件沒有指定宏的選項(xiàng),但是可以編寫更強(qiáng)大的代碼,支持事件的響應(yīng)也更多
- AX 控件中的單選按鈕如果要實(shí)現(xiàn)分組互斥的話就需要將一組的
groupname 屬性設(shè)置為一樣的,默認(rèn)按sheet進(jìn)行分組也就是一個(gè)工作表只有一個(gè)單選按鈕能被選中
二、加載宏的使用
- 加載宏的意義是通用代碼的重復(fù)使用,所以編寫的時(shí)候盡量不要依賴具體的對(duì)象進(jìn)行編寫
1、保存加載宏
- 如果想單獨(dú)打開一個(gè)未編寫程序事件程序的工作簿,還想讓它能夠使用其他文件中編寫的程序事件的話,就需要進(jìn)行以下的操作
2、打開加載宏
3、添加快捷按鈕
4、刪除加載宏
- 刪除之前先要去掉加載宏的勾選
- 去掉之后去保存加載宏的界面就可以看到以前保存的加載宏文件就可以刪除了
|