ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教各位老师,如何判断指定的表单按钮是否存在?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-2-23 14:52 | 显示全部楼层 |阅读模式
本帖最后由 炽幻恶魔 于 2020-2-23 15:55 编辑

如题,A5单元格画了一个按钮,起名"btn6",注意是表单按钮,而不是Activex按钮。当按钮存在时候,以下语句通过,但是当按钮不存在了,以下语句就是出错,后面的语句直接不能运行。该怎么办?
Set Sht1 = ThisWorkbook.Worksheets("sheet1")
Sht1.Shapes("btn6").delete

另外,表单按钮修改按钮表面的文字,必须用这种先选择后修改的方式吗?
Sht1.Shapes("btn6").Select
    Selection.Characters.Text = "-"
就必须用这种先选择后修改的方式吗?改成下面这样就报错,有不用选择直接修改的方式吗?谢谢!
Sht1.Shapes("btn6").Characters.Text = "-"

TA的精华主题

TA的得分主题

发表于 2020-2-23 16:04 | 显示全部楼层
问:如题,A5单元格画了一个按钮,起名"btn6",注意是表单按钮,而不是Activex按钮。当按钮存在时候,以下语句通过,但是当按钮不存在了,以下语句就是出错,后面的语句直接不能运行。该怎么办?
Set Sht1 = ThisWorkbook.Worksheets("sheet1")

Sht1.Shapes("btn6").delete


答:用On Error Resume Next语句设置陷阱,然后判断Err值,若为0,表明未出现错误,否则出现了错误。事后记得用On Error GoTo 0语句及时恢复Excel的错误处理机制。

问:另外,用以下语句得到空值,查看属性发现表单按钮的TopLeftCell属性貌似算个对象?像这种表单控件怎么确定所在单元格的地址?
a = Sht1.Shapes("btn6").TopLeftCell还有就是表单按钮修改按钮表面的文字,必须用这种先选择后修改的方式吗?
Sht1.Shapes("btn6").Select
     Selection.Characters.Text = "-"

也不许用这种先选择后修改的方式吗?改成下面这样就报错,有不用选择直接修改的方式吗?谢谢!

Sht1.Shapes("btn6").Characters.Text = "-"

答:参考代码句ActiveSheet.Shapes("Button 1").TextFrame.Characters.Text = "你我他",即在Characters属性前添加TextFrame属性。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-23 18:30 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
gbgbxgb 发表于 2020-2-23 16:04
问:如题,A5单元格画了一个按钮,起名"btn6",注意是表单按钮,而不是Activex按钮。当按钮存在时候,以下语 ...

非常感谢你的帮助,但是我具体还是想知道有没有办法判断按钮是否存在,这个有办法吗

TA的精华主题

TA的得分主题

发表于 2020-2-23 18:45 | 显示全部楼层
Set Sht1 = ThisWorkbook.Worksheets("sheet1")
on error resume next
Sht1.Shapes("btn6").delete
on error goto 0

TA的精华主题

TA的得分主题

发表于 2020-2-23 18:46 | 显示全部楼层
炽幻恶魔 发表于 2020-2-23 18:30
非常感谢你的帮助,但是我具体还是想知道有没有办法判断按钮是否存在,这个有办法吗

问:非常感谢你的帮助,但是我具体还是想知道有没有办法判断按钮是否存在,这个有办法吗
答:你真的让人奇怪,难道我的回答还不能解决你的疑问??显然Err值非0,已经表明这个按钮不存在。你究竟想问的是什么?你该不会认为表格中有其它的按钮存在就要那代码句生效吧,那真叫奇葩了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-23 19:09 来自手机 | 显示全部楼层
我是这么想的,如果有判断按钮控件是否存在的语句,我可以这么写:
if exist按钮1 then
  按钮1删除
end if
如果没有,我就得多写两句
先设置陷阱
然后判断错误值
最后还要恢复错误机制。
问题是可以解决,我只是本着尽可能精简的方向这么问的,就是为了多学两句,如果没有其他写法那就算了。还是谢谢你

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-23 20:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
gbgbxgb 发表于 2020-2-23 18:46
问:非常感谢你的帮助,但是我具体还是想知道有没有办法判断按钮是否存在,这个有办法吗
答:你真的让人 ...

非常感谢!这个论坛的人可真是万能,哈哈哈

TA的精华主题

TA的得分主题

发表于 2020-2-23 20:30 | 显示全部楼层
炽幻恶魔 发表于 2020-2-23 20:15
非常感谢!这个论坛的人可真是万能,哈哈哈

本不想再跟帖的,既然你又在7楼追帖,虽然7楼的内容我不知究竟是正话还是反话,反正现在无事,那就借此回复下你6楼的跟帖。

1.你想要所谓的精简代码句,就你这个例子来说,不要说可能没有,即便有,其代码的运行效果也不一定就高到哪里去,甚至相反。
2.代码的运行效率跟代码量不能划等号。初学者往往认为越精简的代码句越好,孰不知它往往是个坑,因为代码的效率与设计的代码的计算方法有关,而不是跟代码量有关。即不能认为代码看起来精简、酷而认为那就是好代码。
3.事实上,VBA就是个办公辅助工具而已,它不是用来解决什么大的系统性问题的,往往就是一段解决某一问题而写的小程序而已,故从这个角度看,能解决问题的就是好代码,这个代码若是自己写成的,那对你来说,就是最好的代码。总之,没必要过多关注VBA代码是否高效。现在的计算机速度已经很快了,就算等个2秒或3秒的又何妨。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-2-23 20:48 | 显示全部楼层
gbgbxgb 发表于 2020-2-23 20:30
本不想再跟帖的,既然你又在7楼追帖,虽然7楼的内容我不知究竟是正话还是反话,反正现在无事,那就借此回 ...

晕,我哪来的反话呀,是真的谢谢,折腾了我两天,发到论坛上分分钟搞定,工作完成了,有感而发,真心感谢!哈哈哈
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 08:37 , Processed in 0.043979 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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