ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

带你入门VBA,第四讲(如何控制关于工作薄与工作表)

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-10-15 11:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以下是引用lpdcd在2004-10-15 9:50:00的发言: 请问:程序放错地方了,什么程序应该在Thisworkbook中,什么程序应在模块中。

如果你想让EXCEL自动为你服务(如打开、关闭文件、单击单元格、更换工作表就自动执行你设置的程序,而不需要去点击按纽或宏--执行宏来触发宏的运行)就考虑用事件程序,也就是放到 MIRCROSOFT EXCEL对象中,如果程序要用手工控制,如点击某个按纽或通过宏选项执行宏才让程序运行,这种情况下用宏按纽方便。

举个例子:填充非空单元格颜色

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Value <> "" Then Target.Interior.ColorIndex = 3 End If End Sub

上面是一个事件程序,当工作表内容改变时就运行Target.Interior.ColorIndex = 3

如果这用宏来完成则很不方便,如果这样则,在单元格中每填入一个数字都要点一下按纽运行下面的宏 Sub 矩形1_单击() If ActiveCell.Value <> "" Then ActiveCell.Interior.ColorIndex = 3 End If End Sub

TA的精华主题

TA的得分主题

发表于 2004-10-15 13:35 | 显示全部楼层

Sub 按钮1_单击() Dim a As Integer, d As Integer d = Application.Worksheets.Count If d <> 0 Then For a = 1 To d Sheets(a).Name = "A" & a Sheets(a).Protect password:=123 Next a End If End Sub

先交一题

[此贴子已经被作者于2004-10-15 14:16:12编辑过]

TA的精华主题

TA的得分主题

发表于 2004-10-15 13:40 | 显示全部楼层

Sub 按钮2_单击() Dim a As Integer, d As Integer d = Application.Worksheets.Count If d <> 0 Then For a = 1 To d Sheets(a).Unprotect password:=123 Next a End If End Sub

一次性解除工作表保护

[此贴子已经被作者于2004-10-15 14:15:57编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-10-15 13:59 | 显示全部楼层
以下是引用yigepure在2004-10-15 13:35:00的发言:

Sub 按钮1_单击() Dim a As Integer, b As Integer d = Application.Worksheets.Count If d <> 0 Then For a = 1 To d Sheets(a).Name = "A" & a Sheets(a).Protect password:=123 Next a End If End Sub

先交一题

好!

可以再简化一些

Sub 按钮1_单击() Dim a As Integer, b As Integer 应该是 d d = Application.Worksheets.Count 这一句可简化为d=sheets.count If d <> 0 Then 这一句可不要,因为工作薄中至少会有一个工作表 For a = 1 To d Sheets(a).Name = "A" & a Sheets(a).Protect password:=123 Next a End If 这一句可不要,因为工作薄中至少会有一个工作表 End Sub

TA的精华主题

TA的得分主题

发表于 2004-10-15 14:08 | 显示全部楼层

Private Sub workbooks_beforeclose(ByVal sh As Object, a As Integer) Dim b As Integer b = Application.Worksheets.Count If b > 1 Then For a = 2 To b Sheets(a).Visible = false Next a End If End Sub

兰老师,我将这段代码放在THISBOOK中为什么关闭时,还是不能运用呢,哪里出错了呢.请指教

[此贴子已经被作者于2004-10-15 14:12:10编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-10-15 14:18 | 显示全部楼层
以下是引用yigepure在2004-10-15 14:08:00的发言:

Private Sub workbooks_beforeclose(ByVal sh As Object, a As Integer) Dim b As Integer b = Application.Worksheets.Count If b > 1 Then For a = 2 To b Sheets(a).Visible = false Next a End If End Sub

兰老师,我将这段代码放在THISBOOK中为什么关闭时,还是不能运用呢,哪里出错了呢.请指教

可能是你的工作表的保护还未解除,程序中加入解除保护的语句可能就行了

TA的精华主题

TA的得分主题

发表于 2004-10-15 14:37 | 显示全部楼层

我的第二个按钮就是解除工作表密码的呀.我已经解除了工作表的保护.并加以保存了.然后随意在一个单元格内输了一个数字.

但是这个代码不起作用.关闭前,出现提示是否保存修改,这时还是看得到A2,A3,这两个工作表呀.

TA的精华主题

TA的得分主题

 楼主| 发表于 2004-10-15 14:51 | 显示全部楼层
以下是引用yigepure在2004-10-15 14:37:00的发言:

我的第二个按钮就是解除工作表密码的呀.我已经解除了工作表的保护.并加以保存了.然后随意在一个单元格内输了一个数字.

但是这个代码不起作用.关闭前,出现提示是否保存修改,这时还是看得到A2,A3,这两个工作表呀.

文件传上来

TA的精华主题

TA的得分主题

发表于 2004-10-15 14:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
NNpJTxpR.rar (7.76 KB, 下载次数: 71) 呵呵,来了

TA的精华主题

TA的得分主题

发表于 2004-10-15 15:09 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 11:47 , Processed in 0.046084 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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