ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: yuanzhuping

VBA常用技巧代码解析

    [复制链接]

TA的精华主题

TA的得分主题

发表于 2009-2-22 12:10 | 显示全部楼层

关于157楼删除空行

本帖已被收录到知识树中,索引项:开发帮助和教程
DelBlankRow过程删除工作表中已使用的区域的所有空行。
请教版主:

如果是删除sheet1中所有空行(不仅仅是已使用过的区域)如何实现?

TA的精华主题

TA的得分主题

发表于 2009-2-22 14:14 | 显示全部楼层
收藏了。谢谢yuanzhuping版主。

TA的精华主题

TA的得分主题

发表于 2009-2-22 14:42 | 显示全部楼层
万分感谢
期待楼主的WORD版全教程······

TA的精华主题

TA的得分主题

发表于 2009-2-22 14:47 | 显示全部楼层
原帖由 menghuazhang 于 2009-2-22 12:10 发表
DelBlankRow过程删除工作表中已使用的区域的所有空行。
请教版主:

如果是删除sheet1中所有空行(不仅仅是已使用过的区域)如何实现?


Sub DelBlankRow()
     For i =65536To 1 Step -1
         If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then
             Rows(i).Delete
        End If
     Next
j = Sheet1.UsedRange.Rows.Count
Rows(j + 1).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.EntireRow.Hidden = True

End Sub

上面的代码比较笨,自己试了一下可以删除数据之间的空行,不过所有数据下面又会生成新的空行,只能把它隐藏了~

[ 本帖最后由 Hoer 于 2009-2-22 15:00 编辑 ]

TA的精华主题

TA的得分主题

发表于 2009-2-22 14:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复 1楼 yuanzhuping 的帖子

好像看看

TA的精华主题

TA的得分主题

发表于 2009-2-22 16:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2009-2-22 20:03 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-23 07:10 | 显示全部楼层

第3部分 Wordbook(工作簿)对象

技巧44         禁用宏则关闭工作簿
       通常情况下,当应用程序的宏安全性的安全级别设置为“中”时,打开包含Microsoft Excel 4.0版的宏的工作簿,将显示如图1所示的“安全警告”对话框。
Snap1.jpg
       图1
       如果用户选择“禁用宏”按钮,则会显示如图2所示的警告消息框,当用户选择“否”时,不能打开该工作簿;用户选择“是”时,打开该工作簿,但VBA宏被禁止,而Microsoft Excel 4.0版的宏未被禁止。
Snap2.jpg
       图2
       我们可以利用禁用VBA宏不能禁止Microsoft Excel 4.0版的宏这个特点,使用Microsoft Excel 4.0版的宏来实现禁用宏则关闭工作簿的功能。
       步骤1        新建或打开需要添加此项功能的工作簿文件。
       步骤2        按<Ctrl+F11>组合键为工作簿添加一个宏表,添加的宏表名称默认为“Macro1”。
       步骤3        在宏表“Macro1”的A1至A7单元格中输入下面的内容。
  1. #001  禁用宏则关闭工作簿
  2. #002  =ERROR(FALSE)
  3. #003  =IF(ERROR.TYPE(RUN("TestMacro"))=4)
  4. #004  =  ALERT("因禁用了宏功能,文件将被关闭!",3)
  5. #005  =  FILE.CLOSE(FALSE)
  6. #006  =END.IF()
  7. #007  =RETURN()
复制代码
完成后的宏表如图3所示。
Snap5.jpg
       图3
代码解析:
       Microsoft Excel 4.0宏函数以等号(=)开始,其他不是由等号开始的内容将被视作注释。通常用作定义的宏名称或者作为宏函数实现功能的注释内容设置为斜体字样以示区别,如图3中单元格A1所示。
       第2行代码关闭错误检查功能。如果关闭错误检查,那么当宏执行遇到错误时,Microsoft Excel 将不予理会而继续执行。
       第3行到第6行代码使用If函数与End.If函数构成条件判断语句。其中,第3行中的语句通过检查宏函数RUN("TestMacro")的返回错误类型是否为4(禁用宏时的返回结果),判断工作簿是否禁用了宏功能。如果第3行的结果为True,则执行下面的语句。
       在第4、5行代码,插入几个空格来表示相关代码之间的层次结构。第4行中的代码显示一个消息框。第5行中的代码关闭当前活动工作簿,设置参数值为Fasle表示关闭时工作簿时不保存对其所作的更改。
第7行代码终止当前代码的执行。Microsoft Excel 4.0宏要求每个宏必须使用RETURN或HALT函数结束。
       步骤4        为每个表添加工作表级别的名称“Auto_Activate”,并将引用都指向宏表“Macro1”的A2单元格。“Auto_Activate”是一个自动宏,表被激活时自动执行。
       添加工作表级别的名称的方法如下:选择一张工作表,假设为表“Sheet1”,单击菜单“插入”→“名称”→“定义名称”。在“定义名称”对话框中添加名称,如图4所示。
Snap6.jpg
       图4
       输入完成后单击“确定”按钮,完成一张工作表的“Auto_Activate”的定义。完成定义后的名称将在“定义名称”对话框中显示,如图5所示。依次为每个表添加“Auto_Activate”名称。
Snap7.jpg
       图5
       此外,使用VBA也可以实现同样的操作,并且使用VBA的好处是能够隐藏名称,以避免名称被删除或修改。代码如下:
  1. #001  Sub AddPrivateNames()
  2. #002      Dim sht As Object
  3. #003      For Each sht In Sheets
  4. #004          ThisWorkbook.Names.Add sht.Name & "!Auto_Activate", _
  5. "=Macro1!$A$2", False
  6. #005      Next
  7. #006  End Sub
复制代码
步骤5        运行下面的代码,隐藏宏表工作表:
  1. #001  Sub HideMacroSheet()
  2. #002      ThisWorkbook.Excel4MacroSheets(1).Visible = xlSheetHidden
  3. #003  End Sub
复制代码
步骤6        保存工作簿。
       当应用程序的宏安全性的安全级设置为“中”时,如果用户打开该工作簿文件并选择“禁用宏”,将显示如图 2所示的警告消息框。当用户选择“是”时,活动工作表上的自动宏“Auto_Activate”将被执行,执行结果显示如图6所示的消息框,当用户选择“确定”按钮后,将强制关闭该工作簿文件。
Snap8.jpg
       图6

[ 本帖最后由 yuanzhuping 于 2009-2-23 07:13 编辑 ]

技巧44 禁用宏则关闭工作簿.rar

7.36 KB, 下载次数: 2262

点评

这部分有点难理解,做个记号!  发表于 2011-10-15 10:37

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-23 07:38 | 显示全部楼层

第3部分 Wordbook(工作簿)对象

技巧45         关闭工作簿不显示保存对话框
       当用户更改工作簿后,没有进行保存操作而直接关闭工作簿时,将显示如图所示的消息框,提示用户是否保存对工作簿的更改,如果希望不显示该消息框而直接关闭关闭工作簿,可以在关闭时进行相应的设置。
Snap1.jpg
45-1        使用Close方法关闭工作簿
       使用Close方法关闭工作簿的,可以在Close方法中指定相应的参数,如下面的代码所示。
  1. #001  Sub wbClose_1()
  2. #002      ThisWorkbook.Close SaveChanges:=False
  3. #003  End Sub
复制代码
代码解析:
       wbClose_1过程使用Close方法关闭工作簿,并放弃所有对工作簿的更改。
       应用于Workbook对象的Close方法关闭对象,语法如下:
expression.Close(SaveChanges, Filename, RouteWorkbook)
       其中SaveChanges参数是可选的,如果工作簿没有改变则忽略此参数;如果工作簿发生了改变并且在另外的窗口中也打开了该工作簿,则仍然忽略此参数;如果工作簿发生了改变并且没有在另外的窗口中打开,则此参数将指定是否在工作簿中保存所发生的更改。取值与操作如表格所示:
Snap2.jpg
       如果希望在关闭工作簿时自动保存更改,将SaveChanges参数值设置为True即可。
       还可以在使用Close方法关闭工作簿时设置Workbook对象的Saved属性,如下面的代码所示。
  1. #001  Sub wbClose_2()
  2. #002      ThisWorkbook.Saved = True
  3. #003      ThisWorkbook.Close
  4. #004  End Sub
复制代码
代码解析:
       wbClose_2过程使用Close方法关闭工作簿,并放弃所有对工作簿的更改。
       Workbook对象的Saved属性指示工作簿从上次保存至今是否发生过更改,如果工作簿进行了更改,则该属性值为False,否则为True。应用程序在关闭工作簿之前判断该属性的值,如果其值为False,则显示提示是否保存的消息框,询问用户是否保存对工作簿所做的更改。
       第2行代码将该属性的值设置为True,使Excel认为已经保存了对工作簿所作的更改(实际上没有保存更改),从而不再显示提示是否保存的消息框。
       如果需要保存对工作簿所作的更改,那么应该在Close方法之前使用Save方法保存工作簿,代码如下:
  1. #001  Sub wbClose_3()
  2. #002      ThisWorkbook.Save
  3. #003      ThisWorkbook.Close
  4. #004  End Sub
复制代码
代码解析:
       wbClose_3过程使用Save方法保存工作簿所做的更改,然后使用Close方法关闭工作簿。
45-2        单击工作簿关闭按钮关闭工作簿
       如果是通过单击工作簿的关闭按钮等操作关闭工作簿的,则使用BeforeClose事件过程来控制,如下面的代码所示。
  1. #001  Private Sub Workbook_BeforeClose(Cancel As Boolean)
  2. #002       Me.Saved = True
  3. #003  End Sub
复制代码
代码解析:
       工作簿的Workbook_BeforeClose事件,将工作簿的Saved属性设置为True,不保存更改而直接关闭工作簿,且不显示提示保存的消息框。
       如果希望保存对工作簿的更改,则在Workbook_BeforeClose事件中使用Save方法保存工作簿,如下面的代码所示。
  1. #001  Private Sub Workbook_BeforeClose(Cancel As Boolean)
  2. #002      Me.Save
  3. #003  End Sub
复制代码

技巧45 关闭工作簿不显示保存对话框.rar

6.75 KB, 下载次数: 1542

点评

Workbook对象的Saved属性指示工作簿从上次保存至今是否发生过更改,如果工作簿进行了更改,则该属性值为False,否则为True。应用程序在关闭工作簿之前判断该属性的值,如果其值为False,则显示提示是否保存的消息框,   发表于 2011-10-15 10:41

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-2-23 08:06 | 显示全部楼层

第3部分 Wordbook(工作簿)对象

技巧46         禁用工作簿的关闭按钮
       一般情况下,用户可以通过菜单“文件”→“关闭”、工作簿窗口右上角的“关闭窗口”按钮或者任务栏中图标右键菜单中的“关闭”菜单项关闭工作簿。如果希望禁用上述关闭工作簿的功能,而只能通过代码关闭工作簿,则可以在相应的工作簿事件中实现,如下面的代码所示。
  1. #001  Dim BClose As Boolean
  2. #002  Private Sub Workbook_BeforeClose(Cancel As Boolean)
  3. #003      If BClose = False Then
  4. #004          Cancel = True
  5. #005          MsgBox "此功能已经被禁止,请使用""关闭""按钮关闭工作簿!", vbExclamation, "提示"
  6. #006      End If
  7. #007  End Sub
  8. #008  Public Sub CloseWorkbook()
  9. #009      BClose = True
  10. #010      Me.Close
  11. #011  End Sub
复制代码
代码解析:
       第1行代码在模块顶部声明变量BClose为Boolean类型,默认初始值为False。
       第2行到第7行代码工作簿的BeforeClose事件过程,通过变量BClose的当前值决定是否能够关闭工作簿,只有当BClose的值为True时,才允许关闭工作簿。如果变量BClose的值为False时将参数Cancel的值设置为True,以禁止关闭操作。
       第8行到第11行代码CloseWorkbook过程,将变量BClose的当前值设置为True后使用Close方法关闭工作簿。关于Close方法请参阅技巧45-1。
       在添加以上代码后,用户只能通过调用CloseWorkbook过程关闭工作簿。如果通过菜单“文件”→“关闭”或者单击工作簿窗口右上角的“关闭窗口”按钮关闭工作簿,将显示如图所示的消息框。
Snap3.jpg

技巧46 禁用工作簿的关闭按钮.rar

4.82 KB, 下载次数: 1571

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 01:58 , Processed in 0.055621 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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