打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel VBA解读(98):工作簿事件示例——强制用户必须在指定单元格中输入数据


在《Excel VBA解读(92):Workbook对象的Open事件和BeforeClose事件》中,我们详细介绍了Workbook_BeforeClose事件。该事件在关闭工作簿之前发生。

 

下面的示例使用Workbook_BeforeClose事件强制用户必须在指定的单元格中输入数据,否则就不能关闭该工作簿。如果用户想要关闭工作簿但没有在指定的所有单元格中都输入数据,那么Excel会弹出提示信息,列出还没有输入数据的单元格,并将这些单元格的背景设置为黄色。

 

1演示了事件的运行效果。


1

 

下面是ThisWorkbook模块中的代码:

Dim strRng As String

 

Private SubWorkbook_BeforeClose(Cancel As Boolean)

   Dim strPrompt As String

   Dim rng1 As Range, rng2 As Range, rng3 As Range

   

    '设置必须要输入数据的单元格

   Set rng1 =Sheets('Sheet1').Range('A2:A5,B1,C2:C5,D3:D5')

   Set rng2 = Sheets('Sheet2').Range('E1,F2:F5,G3')

   Set rng3 = Sheets('Sheet3').Range('A1,B2:B5,C1')

   

   strRng = ''

   strPrompt = '请检查工作表,确保所有需要输入数据的单元格中都有数据.' & vbCrLf & _

              '否则,不能关闭或者保存工作簿,除非所有指定单元格中都输入了数据.' & vbCrLf & _

              '我们将还没有输入数据的单元格添加了黄色背景.'

   

    '调用子过程,检查单元格

   CheckCells rng1

   CheckCells rng2

   CheckCells rng3

   

    '如果存在必须输入数据的单元格没有数据,则提示用户

    '并且不能关闭工作簿

   If strRng <> '' Then

        MsgBox strPrompt & vbCrLf &vbCrLf & strRng, vbCritical, '数据输入未完成'

        Cancel = True

   Else

        ThisWorkbook.Save

        Cancel = False

   End If

   

   Set rng1 = Nothing

   Set rng2 = Nothing

   Set rng3 = Nothing

End Sub

 

'检查指定区域的单元格中是否有数据

'如果没有则添加黄色背景色

Sub CheckCells(rng As Range)

   Dim cell As Range

   Dim blnStart As Boolean

   

   blnStart = True

   

   For Each cell In rng

        If cell.Value = vbNullString Then

            cell.Interior.ColorIndex = 6 '黄色

            If blnStart Then strRng = strRng& cell.Parent.Name & vbCrLf

            blnStart = False

            strRng = strRng &cell.Address(False, False) & ', '

        Else

            cell.Interior.ColorIndex = 0 '无颜色

        End If

   Next cell

   

   If strRng <> '' Then strRng = Left$(strRng, Len(strRng)- 2) & vbCrLf & vbCrLf

 

End Sub

 

Private SubWorkbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

   Target.Interior.ColorIndex = 0

End Sub

 

在上面的代码中,还使用了Workbook_SheetChange事件,其语法为:

Workbook_SheetChange(ByVal Sh AsObject, ByVal Target As Range)

 

说明:

  • 当工作簿的任意工作表中的单元格由于用户操作或外部链接产生变化时发生此事件。

  • 参数Sh,代表工作表对象。

  • 参数Target,代表单元格对象,即发生变化的单元格。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
完全手册Excel VBA典型实例大全:通过368个例子掌握
Python对excel的基本操作
VBA在Excel中的应用(一)
[分享]关于Like运算符的使用
浅谈Excel开发:三 Excel 对象模型
Excel VBA与数据统计 第四章 对象
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服