Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4603|回复: 4

[分享] 【烟花原创】VBA零基础之第96篇 Application对象(十四)

[复制链接]
发表于 2014-2-12 00:16 | 显示全部楼层 |阅读模式
本帖最后由 hwc2ycy 于 2014-2-12 17:43 编辑

  加载宏的模板完成后,今天就给加载宏添加相关的代码。
  准备工作:
   上一讲的加载宏文件制作好并加载。

  打开EXCEL后,切换到VBE中,找到工程资源管理器
    96-1.jpg
  在VBE中没有找到的工程资源管理器的话就找到菜单 视图工程资源管理器
  (或者直接按CTRL+R键)。

  依次展开 demo1.xlamMicrosoftExcel对象,双击Thisworkbook,在代码区中敲入下列代码:
   Option Explicit
   Dim WithEvents xlapp As Excel.Application
   'WithEvents 关键字
   '说明 varname 是一个用来响应由ActiveX 对象触发的事件的对象变量

   Private Sub Workbook_AddinInstall()
   '当工作簿作为加载宏安装时,发生此事件。
    Set xlapp = Application
   End Sub

   Private Sub Workbook_AddinUninstall()
    '当任一作为加载宏的工作簿卸载时发生此事件。
    Set xlapp = Nothing
    '释放对象
   End Sub

   Private Sub Workbook_Open()
    Set xlapp = Application
    '引象引用
   End Sub

  代码输入完成后,检查无误,保存(CTRL+S)。

  接下来我们以这个模板添加功能:
   通过日志的方式记录在
EXCEL中打开,新建,关闭工作簿的的操作。

  先添加三个应用程序事件:
  添加应用程序事件的方法与以前基本添加工作簿,工作表事件过程的操作基本上相差不多,
  也是直接在代码区上方右边的下拉列表中选择相应的事件过程即可。
  不同之处在于代码区左边的对象下拉列表选择的对象不同。
  上面录入的代码中有一句声明Dim WithEvents xlapp As Excel.Application
  这时得派她上场了,在代码区上方左边的下拉列表中选择xlapp,然后在右边的过程列表分别添加三个事件:
   打开是WorkbookOpen事件
   新建是NewWorkbook事件
   关闭是WorkbookBeforeClose事件
  完整代码如下:
  Option Explicit

  Dim WithEvents xlapp As Excel.Application
  'WithEvents 关键字
  '说明 varname 是一个用来响应由ActiveX 对象触发的事件的对象变量

  Dim strFilename$
  '日志文件(包含具体的路径,文件名以日期为主,TXT格式
  Dim strMsg$
  '添加到日志的内容
  '时间,操作,工作簿名

  Private Sub Workbook_AddinInstall()
   '当工作簿作为加载宏安装时,发生此事件。
   Set xlapp = Application
  End Sub

  Private Sub Workbook_AddinUninstall()
   '当任一作为加载宏的工作簿卸载时发生此事件。
   Set xlapp = Nothing
   '释放对象
  End Sub

  Private Sub Workbook_Open()
   Set xlapp = Application
   '引象引用
  End Sub

  Private Sub xlapp_NewWorkbook(ByVal Wb AsWorkbook)
   strFilename = ThisWorkbook.Path & Application.PathSeparator &Format(Now, "YYYY-MM-DD.txt")
   'Format函数,与工作表函数TEXT有异曲同工之效
   strMsg = Format(Now, "YYYY-MM-DD hh:mm:ss") & " 新建了工作簿 "& Wb.Name
   WriteInfo strFilename, strMsg
   'WriteInfo自定义过程,输出日志
  End Sub

  Private Sub xlapp_WorkbookBeforeClose(ByValWb As Workbook, Cancel As Boolean)
   strFilename = ThisWorkbook.Path & Application.PathSeparator &Format(Now, "YYYY-MM-DD.txt")
   strMsg = Format(Now, "YYYY-MM-DD hh:mm:ss") & "  关闭工作簿 " &Wb.Name
   WriteInfo strFilename, strMsg
  End Sub

  Private Sub xlapp_WorkbookOpen(ByVal Wb AsWorkbook)
   strFilename = ThisWorkbook.Path & Application.PathSeparator &Format(Now, "YYYY-MM-DD.txt")
   strMsg = Format(Now, "YYYY-MM-DD hh:mm:ss") & " 打开了工作簿 "& Wb.Name
   WriteInfo strFilename, strMsg
  End Sub

  Sub WriteInfo(strFullName As String, strMsgAs String)
   On Error Resume Next
   Open strFullName For Append As #1
   'Open语句,打开指定文件,以追加方式写入
   Print #1, strMsg
   '写入日志内容
   Close #1
   '关闭文件
  End Sub

  日志内容如下图:

    96-2.jpg
  代码保存后,就可以进行测试了:
   1.可以直接关闭
EXCEL再重新打开进行测试。
    2.如果不嫌麻烦的话可以直接在加载宏取消勾选,确定,再勾选,再确定
      3.直接运行加载宏中的Workbook_Open过程
    如果实在没有运行的话,还是关闭EXCEL再次重新打开吧。
   
    对了,日志是保存在加载宏文件所在的位置,文件名是YYYY-MM-DD.txt格式。

  还是有问题的话就下载我的附件测试吧(象征性的收10BB)。
      demo1.rar (15.84 KB, 下载次数: 23, 售价: 10 个金币)

评分

参与人数 2 +2 收起 理由
tanchenglong + 1 赞一个!
2677598003 + 1 版主辛苦,很给力!

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-3-16 12:05 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-18 13:42 | 显示全部楼层
回复

使用道具 举报

发表于 2015-4-2 17:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2015-11-10 08:16 | 显示全部楼层
好贵的说 先mark一下 以后回来再看!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 13:33 , Processed in 0.350732 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表