ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 怎样才能让宏自动帮我查找清空区域?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-1-1 13:44 | 显示全部楼层 |阅读模式
本帖最后由 合肥狮子 于 2013-1-5 10:13 编辑

怎样才能让宏自动帮我查找清空区域?



Sub 事中选定区域清空()
Dim Myarr As Range
On Error Resume Next
ConF1 = MsgBox("是否已备份?确认清空内容?", vbYesNo)
   Set Myarry = Application.InputBox("请选择清空范围", "选择", Type:=8)
If ConF1 = vbYes Then
   ConF2 = InputBox("请输入确认密码", "密码输入框")
   If ConF2 = "123" Then
   If Err <> 0 Then MsgBox "没有选择区域", 64, "温馨提示": Exit Sub
      Myarry.ClearContents
   End If
End If
End Sub
————————————————
每次都要手工选择很烦,我想改成Sub 自动选定通讯录区域清空(),请您帮忙!
1、在给定的区域内查找“通讯录”所在列,
2、查找通讯录所在列上一个通讯录下两行开始、下一个通讯录上一行结束,
3、把内容清空;
就是让宏自动帮我查找清空区域,免去我每次查找的麻烦!
感谢yangyangzhifeng 的无私支持!谢谢!{:soso_e183:}
已经做好的附件:
★Excel 201212答疑解惑.rar (71.52 KB, 下载次数: 13)




TA的精华主题

TA的得分主题

发表于 2013-1-5 00:45 | 显示全部楼层
你的工作表有太多函数,现改为数组及禁事件和改为手动重算,速度应该可以了
  1. Sub 事中选定区域清空()
  2.     Dim Myarr As Range, i&, conf1, conf2, ar, rng As Range, st$, c&, r&, rr As Range, brr, rw, cc
  3.     On Error Resume Next
  4.     conf1 = MsgBox("是否已备份 确认清空内容 ", vbYesNo)
  5.     Set Myarr = Application.InputBox("请选择清空范围", "选择", Type:=8)
  6.     If Err <> 0 Then MsgBox "没有选择区域", 64, "温馨提示": Exit Sub
  7.     conf2 = InputBox("请输入确认密码", "密码输入框")
  8.     If conf2 <> "123" Then MsgBox "密码错误!": Exit Sub
  9.     ar = Split(Myarr.Address, "$")
  10.     Set rng = Myarr.Find("通讯录", lookat:=xlWhole, searchorder:=xlByRows)
  11.     st = rng.Address: r = rng.Row
  12.     Application.ScreenUpdating = False
  13.     brr = Myarr: rw = Myarr.Row: cc = Myarr.Column
  14.     Application.EnableEvents = False
  15.     Application.Calculation = xlCalculationManual
  16.     Do
  17.         c = rng.Column
  18.         For i = r To Val(ar(UBound(ar)))
  19.             If brr(i - rw + 1, c - cc + 1) <> "通讯录" And brr(i - rw + 1, c - cc + 1) <> "住址 电话 QQ" Then
  20.                 If rr Is Nothing Then Set rr = Cells(i, c) Else Set rr = Union(rr, Cells(i, c))
  21.                 If rr.Areas.Count = 255 Then rr.ClearContents: Set rr = Nothing
  22.             End If
  23.         Next
  24.         If Not rr Is Nothing Then rr.ClearContents
  25.         Set rng = Myarr.FindNext(rng)
  26.     Loop Until rng.Address = st Or rng.Row <> r
  27.     Application.Calculation = xlCalculationAutomatic
  28.     Application.EnableEvents = True
  29.     Application.ScreenUpdating = True
  30. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-5 10:09 | 显示全部楼层
yangyangzhifeng 发表于 2013-1-5 00:45
你的工作表有太多函数,现改为数组及禁事件和改为手动重算,速度应该可以了

非常好用了!谢谢!谢谢!!!
使用注意事项:要选中矩形区域才行,不能选择几列!

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-4 10:53 | 显示全部楼层

“自动查找清空区域”用宏真的做不到吗?

“自动查找清空区域”用宏真的做不到吗?

TA的精华主题

TA的得分主题

发表于 2013-1-4 11:50 | 显示全部楼层
合肥狮子 发表于 2013-1-4 10:53
“自动查找清空区域”用宏真的做不到吗?

试试看
  1. Sub 事中选定区域清空()
  2.     Dim Myarr As Range, i&, conf1, conf2, ar
  3.     On Error Resume Next
  4.     conf1 = MsgBox("是否已备份?确认清空内容?", vbYesNo)
  5.     Set Myarr = Application.InputBox("请选择清空范围", "选择", Type:=8)
  6.     If conf1 = vbYes Then
  7.         conf2 = InputBox("请输入确认密码", "密码输入框")
  8.         If conf2 = "123" Then
  9.             If Err <> 0 Then MsgBox "没有选择区域", 64, "温馨提示": Exit Sub
  10.             ar = Split(Myarr.Address, "$")
  11.             For i = Val(ar(2)) To Val(ar(4))
  12.                 If Cells(i, "bg") <> "通讯录" And Cells(i, "bg") <> "住址、电话、QQ" Then Cells(i, "bg").ClearContents
  13.             Next
  14.         End If
  15.     End If
  16. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-4 14:10 | 显示全部楼层

这个VBA宏的设计思路、使用方法、注意事项

本帖最后由 合肥狮子 于 2013-1-4 14:12 编辑
yangyangzhifeng 发表于 2013-1-4 11:50
试试看

谢谢您!
我选择了A1:DA2000区域,来清空通讯录,结果不行!
我不知道,不理解这个宏,也不会使用这个宏。
还请告诉我这个VBA宏的设计思路、使用方法、注意事项,谢谢!

感觉这个宏是《清空某列中非“通讯录”“住址、电话、QQ"的单元格》。

TA的精华主题

TA的得分主题

发表于 2013-1-4 14:24 | 显示全部楼层
就是你理解的这样,不过不是某列而是只对BG列起作用

TA的精华主题

TA的得分主题

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

这个宏只要把bf列修改为包含“通讯录”所在的列就行了,怎么修改?

本帖最后由 合肥狮子 于 2013-1-4 18:13 编辑
yangyangzhifeng 发表于 2013-1-4 14:24
就是你理解的这样,不过不是某列而是只对BG列起作用


可是我需要的是在A1:DA2000区域内的,这个咋办?
还有你这个选择区域也没有意思呀???

这个宏只要把bf列修改为包含“通讯录”所在的列就行了,怎么修改?

TA的精华主题

TA的得分主题

发表于 2013-1-4 18:42 | 显示全部楼层
合肥狮子 发表于 2013-1-4 18:07
可是我需要的是在A1:DA2000区域内的,这个咋办?
还有你这个选择区域也没有意思呀???

试试看
  1. Sub 事中选定区域清空()
  2.     Dim Myarr As Range, i&, conf1, conf2, ar, rng As Range, st$, c&, r&
  3.     On Error Resume Next
  4.     conf1 = MsgBox("是否已备份 确认清空内容 ", vbYesNo)
  5.     Set Myarr = Application.InputBox("请选择清空范围", "选择", Type:=8)
  6.     If Err <> 0 Then MsgBox "没有选择区域", 64, "温馨提示": Exit Sub
  7.     conf2 = InputBox("请输入确认密码", "密码输入框")
  8.     If conf2 <> "123" Then MsgBox "密码错误!": Exit Sub
  9.     ar = Split(Myarr.Address, "$")
  10.     Set rng = Myarr.Find("通讯录", lookat:=xlWhole, searchorder:=xlByRows)
  11.     st = rng.Address: r = rng.Row
  12.     Do
  13.         c = rng.Column
  14.         For i = r To Val(ar(UBound(ar)))
  15.             If Cells(i, c) <> "通讯录" And Cells(i, c) <> "住址 电话 QQ" Then Cells(i, c).ClearContents
  16.         Next
  17.         Set rng = Myarr.FindNext(rng)
  18.     Loop Until rng.Address = st Or rng.Row <> r
  19. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-4 20:39 | 显示全部楼层
yangyangzhifeng 发表于 2013-1-4 18:42
试试看

1、启动宏,选择A1:DA2000区域,之后就是cpu死运行不停止;
2、用任务管理器强行关闭后,选择A:DA列区域,宏没反应;
这个咋办呢?还请赐教!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-4 00:30 , Processed in 0.052266 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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