Excel中的控件自动改变名称问题

luquansen 2018-02-03 11:41:24
1. Excel中创建了几个控件,TextBox和ListBox,命名方式就是从1到N,写完事件代码后测试正常,但是发给其他人之后,有些人可以正常运行,但是有些人打开后报错,进入设计模式后发现控件名称自动发生改变了,导致事件代码没有对象而报错,网上查了一下也有人发生类似情况,但是没找到解决方案。

2. 为了解决上面的问题,我想通过动态创建控件的方式实现,文件启动后先删除所有控件,再通过以下代码创建:
With Sheet2.OLEObjects.Add(ClassType:="Forms.TextBox.1", Left:=10, Top:=10)
.name = "TextBoxOBJ"
.Visible = False
End With

结果有时候是好的,有时候又出现控件名称(表单左上角)名称与代码命名一致,但是属性中的名称是默认命名“TextBox21”,结果又因为事件代码没有对象而报错。

请问以上问题如何解决?求助各位高人。
...全文
1879 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
一斤锅包肉 2019-03-15
  • 打赏
  • 举报
回复
我也遇到了,win7系统升win10 ,打开Excel它不会去用以前设置的名字去读函数,而且读一些它重新命名的函数,你在设计模式的时候双击按钮,就给你新建了一个函数。 问题没有解决。感觉是初始化的问题,为什么不是读的控件上的名字呢。
舉杯邀明月 2018-03-08
  • 打赏
  • 举报
回复
引用 16 楼 luquansen 的回复:
谢谢楼上各位的帮忙,原因找到了,应该是公司邮件系统的原因。 通过邮件发送基本都有问题,但是通过U盘拷贝就你没发生过,而且只针对ActiveX控件,对表单控件没影响,所以现在我全部改成通过表单控件唤醒窗体进行操作了,看起来稍微有点突兀,不过解决问题了。
能解决问题就好。  不过我感到奇怪: 发送文档,应该是用“附件”形式发送的吧? 但“邮件系统”不可能去改变“附件”的内容吧!
luquansen 2018-03-07
  • 打赏
  • 举报
回复
谢谢楼上各位的帮忙,原因找到了,应该是公司邮件系统的原因。 通过邮件发送基本都有问题,但是通过U盘拷贝就你没发生过,而且只针对ActiveX控件,对表单控件没影响,所以现在我全部改成通过表单控件唤醒窗体进行操作了,看起来稍微有点突兀,不过解决问题了。
脆皮大雪糕 2018-02-05
  • 打赏
  • 举报
回复
不同的人操作习惯不同,所以有些人OK,有些人报错
脆皮大雪糕 2018-02-05
  • 打赏
  • 举报
回复
我想,我重现了你的问题 你的button放在sheet里面,sheet上同时又有大量的数据吧。有的人的操作习惯是把数据copy一份出来操作的 按照以下操作试试是不是会出现你所说的情况 1、新建一个excel,在sheet1上放一个按钮,事件里面随便msgbox一下 2、sheet1上ctrl+a全选,然后ctrl+c,再到到sheet2上 ctrl+a然后ctrl+v 。这时候sheet2上拷贝了按钮,按钮名和sheet1上的一样。 3、觉得sheet2上的数据弄乱了,在sheet2上 ctrl+a 全选,然后delete. 这时候数据都没了,但按钮还在。 4、到sheet1上再把数据拷贝过来:sheet1上ctrl+a全选,然后ctrl+c,再到到sheet2上 ctrl+a然后ctrl+v 。这下sheet2和sheet1看上去一样,但是实际上按钮重叠了,最上层按钮的名字自动往下加编号了,点击到的也是最上层的按钮,触发不到你原来写的代码,你要的那个按钮在最下层……
舉杯邀明月 2018-02-05
  • 打赏
  • 举报
回复
引用 9 楼 chewinggum 的回复:
………… 测试了一下,至少在2013里面是可以修改name的 在sheet里面放了两个按钮,第二个按钮的点击事件代码里面写:
Sheet1.Buttons(1).Name = "b1"
执行后再监视这个按钮的属性 当然,从属性上看,改变名字并不会影响事件回调函数的调用。 EXCEL里面控件的name 属性控制和VB6并不一样
呵呵,并不是“不一样”,而是此“Name”非彼“Name”啊………… 你看看你这个Name的“类型”,是String吧!!! 你觉得代表“对象”的名称,会是String类型? 还有,“同一个容器”中,对象名是唯一的吧! 你可以试试,再多画几个Button,可以把它们的“Name”全部用代码改为b1,却并不会出错。
舉杯邀明月 2018-02-05
  • 打赏
  • 举报
回复
你也看到了,“不会影响事件回调函数的调用”, 所以呢,这个并不是真正的“对象名”,要改对象名,可不是这么简单的…………
脆皮大雪糕 2018-02-05
  • 打赏
  • 举报
回复
引用 8 楼 Chen8013 的回复:
[quote=引用 6 楼 chewinggum 的回复:]
在工程里搜索一下".Name" 看看有没有代码动到控件名称了

这些“名称”,在“一般情况”下是无法用代码更改的。

(看3楼回复)我用的就是2007,也没有发生“对象名称变化”的问题啊。[/quote]

测试了一下,至少在2013里面是可以修改name的
在sheet里面放了两个按钮,第二个按钮的点击事件代码里面写:
Sheet1.Buttons(1).Name = "b1"


执行后再监视这个按钮的属性


当然,从属性上看,改变名字并不会影响事件回调函数的调用。
EXCEL里面控件的name 属性控制和VB6并不一样

舉杯邀明月 2018-02-05
  • 打赏
  • 举报
回复
引用 6 楼 chewinggum 的回复:
在工程里搜索一下".Name" 看看有没有代码动到控件名称了
这些“名称”,在“一般情况”下是无法用代码更改的。 (看3楼回复)我用的就是2007,也没有发生“对象名称变化”的问题啊。
脆皮大雪糕 2018-02-05
  • 打赏
  • 举报
回复
在工程里搜索一下".Name" 看看有没有代码动到控件名称了
脆皮大雪糕 2018-02-05
  • 打赏
  • 举报
回复
只有2013环境,重现不了问题。难不成是2007的bug?
赵4老师 2018-02-05
  • 打赏
  • 举报
回复
引用 12 楼 chewinggum 的回复:
我想,我重现了你的问题 你的button放在sheet里面,sheet上同时又有大量的数据吧。有的人的操作习惯是把数据copy一份出来操作的 按照以下操作试试是不是会出现你所说的情况 1、新建一个excel,在sheet1上放一个按钮,事件里面随便msgbox一下 2、sheet1上ctrl+a全选,然后ctrl+c,再到到sheet2上 ctrl+a然后ctrl+v 。这时候sheet2上拷贝了按钮,按钮名和sheet1上的一样。 3、觉得sheet2上的数据弄乱了,在sheet2上 ctrl+a 全选,然后delete. 这时候数据都没了,但按钮还在。 4、到sheet1上再把数据拷贝过来:sheet1上ctrl+a全选,然后ctrl+c,再到到sheet2上 ctrl+a然后ctrl+v 。这下sheet2和sheet1看上去一样,但是实际上按钮重叠了,最上层按钮的名字自动往下加编号了,点击到的也是最上层的按钮,触发不到你原来写的代码,你要的那个按钮在最下层……
luquansen 2018-02-04
  • 打赏
  • 举报
回复
引用 3 楼 Chen8013 的回复:
我刚才用Excel 2007 。画了两个“表单控件”的按钮、两个ActiveX控件的按钮、1个AcitveX控件的Label。 保存、关闭,然后重新打开,所有的控件名称都没变…… 再关闭、打开,还是没有变!
我在自己的电脑上也不会出现问题,而我发给其他人之后,就有的人会有这个问题,我怀疑和环境有关系,但是也找不到原因
舉杯邀明月 2018-02-03
  • 打赏
  • 举报
回复
从来没听说过“控件会自动变化名称”!!! 那是根本不可能的事! 如果“发生变化”唯一的可能就是人为更改! 如果是VBA窗体中的,你“锁定工程”吧,自己设置个密码(如果只对“发给别人的文档”设置,乱填密码都行),  这样就可以防止被别人乱改了(可以防住绝大多数人)。 如果是“表单控件”,就用保护工作簿的方式,选择只保护工作簿的对象(这个我没有具体试过)。
赵4老师 2018-02-03
  • 打赏
  • 举报
回复
我是用Load语句动态生成控件数组的。
舉杯邀明月 2018-02-03
  • 打赏
  • 举报
回复
我刚才用Excel 2007 。画了两个“表单控件”的按钮、两个ActiveX控件的按钮、1个AcitveX控件的Label。 保存、关闭,然后重新打开,所有的控件名称都没变…… 再关闭、打开,还是没有变!
luquansen 2018-02-03
  • 打赏
  • 举报
回复
引用 1 楼 Chen8013 的回复:
从来没听说过“控件会自动变化名称”!!! 那是根本不可能的事! 如果“发生变化”唯一的可能就是人为更改! 如果是VBA窗体中的,你“锁定工程”吧,自己设置个密码(如果只对“发给别人的文档”设置,乱填密码都行),  这样就可以防止被别人乱改了(可以防住绝大多数人)。 如果是“表单控件”,就用保护工作簿的方式,选择只保护工作簿的对象(这个我没有具体试过)。
我也觉得很神奇,但是确实发生了:https://social.technet.microsoft.com/Forums/it-IT/bc0e6df5-62cd-43b5-aa03-5f56435ff3fd/excel2007activex 那么请问对第二个问题有什么看法?

2,461

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧