ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

不懂VBA也编程

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2008-11-20 08:36 | 显示全部楼层

回复 27楼 学呀学 的帖子

本帖已被收录到知识树中,索引项:数据类型和基本语句
感谢27楼朋友的讲解,对额外副产品问题已释疑.条件格式加一条件(ROW()=ROW(XM))加得好,佩服!
但是,用代码
ThisWorkbook.Names.Add "XM", Target定义名称的方法与在工作表单元区域进行定义造成的不同结果,还是迷惑不解.用代码定义的名称到工作表上查看进来却全是目标单元的绝对引用啊.不解.期待高手讲解一番.

5楼的补充说明没看还是没看明白?
用代码就是将“选择的单元格(绝对引用)”自动定义为名称XM,在点击鼠标或键盘的过程中完成定义的动作。选择不同的单元格,XM就引用不同的单元格。
——山菊花

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-11-20 09:58 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

4、自动录入一个“√”

录入过程中,为了反复录入符号“√”,让不少人心烦。
解决的办法可以使用数据有效性,也可以使用VBA,方法很简单。

假如I列要输入“是否三好学生”,如果是,录入一个“√”,因为第1、2行为标题行,从第3行开始,点击鼠标,显示一个“√”。
鼠标右键点击工作表标签,选择“查看代码”,将如下代码粘贴到光标处:
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     Dim Rng As Range
  3.     Application.EnableEvents = False
  4.    
  5.     For Each Rng In Target
  6.         If Rng.Row > 2 And Rng.Column = 9 Then '如果单元格行号大于2 并且 列号等于9 (I列)
  7.             Rng = IIf(Rng = "√", "", "√") '如果这个单元格原来是"√",改为空,否则,输入"√"
  8.         End If
  9.     Next
  10.    
  11.     Application.EnableEvents = True
  12. End Sub
复制代码
返回工作表,即可使用该功能。
练习:
自动录入一个“√”.zip (35.74 KB, 下载次数: 1298)


答案: 自动录入一个“√”答案.zip (37.81 KB, 下载次数: 1750)


练习2: 一行中只能录入一个“√”.zip (8.6 KB, 下载次数: 910)


原帖由 ychh_wy 于 2008-11-24 13:16 发表 (77楼)
Ctrl+A容易引起工作表假死


不是“容易”,是“一定”。
如果要避免这种情况发生,可在程序的开头加入一个判断,如果选择整行或整列,退出程序:
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.    
  3.     '如果选择的区域是整行或者整列,不运行下面的程序,直接退出。
  4.     If Target.Rows.Count = Me.Cells.Rows.Count Or _
  5.         Target.Columns.Count = Me.Cells.Columns.Count Then Exit Sub
  6.         
  7.         
  8.     Dim Rng As Range
  9.     Application.EnableEvents = False
  10.    
  11.     For Each Rng In Target
  12.         If Rng.Row > 2 And Rng.Column = 9 Then
  13.             Rng = IIf(Rng = "√", "", "√")
  14.         End If
  15.     Next
  16.    
  17.     Application.EnableEvents = True
  18. End Sub
复制代码


实例:http://club.excelhome.net/viewthread.php?tid=378366

TA的精华主题

TA的得分主题

发表于 2008-11-20 10:32 | 显示全部楼层
原帖由 山菊花 于 2008-11-19 15:29 发表
如果你的要求是“B列(第2列)输入数据后C列(B列的右边第1列)自动输入一个日期”,则中间一行代码应改为:
If Target.Column = 2 Then Target.Offset(0, 1) = Date

如果你要求“D列(第4列)输入数据后,A列(D列的左边3列)自动输入日期”,则中间一行代码改为:
If Target.Column = 4 Then Target.Offset(0, -3) = Date


山版,想扩展一下功能,我想如果后面列有数据录入的话同时在两列中自动录入序号和日期,那么序号需要将"date“改成什么?
谢谢

date是系统当前日期
target.row 是当前行号,可用这个属性,如果序号从第3行开始,即序号比行号小2:
把date改为:target.row-2
——山菊花


谢谢

[ 本帖最后由 学呀学 于 2008-11-20 15:23 编辑 ]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-11-20 15:06 | 显示全部楼层

5、自动保护录入的数据

如果希望录入的数据能够被保护,不被删改。可用程序自动将单元格锁定。
首先,选择单元格区域,按 Ctrl+1 ,打开单元格格式对话框,取消单元格的“锁定”。
然后右键点击工作表标签,选择“查看代码”,将代码粘贴在光标处:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim Rng As Range
  3.     Me.Unprotect ("123") '撤销工作表保护
  4.    
  5.     For Each Rng In Target
  6.         Rng.Locked = True '锁定单元格
  7.     Next
  8.    
  9.     Me.Protect ("123") '保护工作表
  10. End Sub
复制代码
代码中的"123“是工作表保护密码,可自由修改。

答案:
自动保护录入的数据.zip (39.97 KB, 下载次数: 2202)

原帖由 eric0712 于 2008-12-5 15:32 发表 (114楼)

能否保护的同时取消“选择锁定单元格”?


可以在“Me.Protect ("123") '保护工作表”前面加入一行:
Me.EnableSelection = 1

也可先手工设置一次工作表保护,取消该选项,这样代码更简洁。

原帖由 kw116 于 2009-2-4 17:11 发表 (242楼)


山版。问下这个保护录入的数据可以在保护的选项中添加准许设置单元格格式这个选项吗?
我的希望就是表中数据即使被保护也可以更改字体颜色
谢谢


取消单元格锁定以后,可手工设置一次保护工作表,注意选择“设置单元格格式”选项。
或者修改以上代码,将:
“Me.Protect ("123") '保护工作表”一句修改为:
“Me.Protect Password:="123", AllowFormattingCells:=True '保护工作表”
在VBE编辑窗口中,将光标定位到“Protect”中间,按F1,可查看帮助。

TA的精华主题

TA的得分主题

发表于 2008-11-20 15:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-11-20 15:42 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
占位

TA的精华主题

TA的得分主题

发表于 2008-11-20 16:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复 34楼 山菊花 的帖子

山版,这种一录入就锁定了,要修改就要去掉保护,这样太麻烦了.
我想在光标离开本工作表时,即切换到其他表簿时才加以保护,而本工作表在激活状态下都不加保护.这能办到吗?谢谢指教!

要明确,不是所有工作表都需要锁定功能,需反复修改的表或区域不要使用这种模式。
“离开本表时保护,激活本表时不保护”可以做到,但这样保护有什么意义呢?其效果完全等于不保护。
——山菊花

TA的精华主题

TA的得分主题

发表于 2008-11-20 17:20 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-11-20 17:37 | 显示全部楼层
真的不懂VBA,弄了几天公式函数脑袋就大了,非常需要这种傻瓜式的方法

TA的精华主题

TA的得分主题

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

本版积分规则

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

GMT+8, 2024-11-18 19:36 , Processed in 0.046098 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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