ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 一段代码放到sheet表上后可运行,关闭再开出现损坏

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-11-25 11:51 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
各位大神,我想开发一个VBA的小软件,用来查询螺纹规格,其中有以下代码:

Sub Worksheet_SelectionChange(ByVal Target As Range)  '多级菜单的方法
        Application.EnableEvents = False
        Application.ScreenUpdating = False
        On Error Resume Next
        
        '实现在第3行的点击效果
        If Target.Row <> 3 Then GoTo end1
        Application.CellDragAndDrop = False  '若禁止工作表内拖拽,只需该代码
   
        If Target.Count > 1 Then GoTo end1    '选择的单元格大于2个,就退出
        If Target.Column <> 4 Then GoTo end1
        Sheets("基础数据").Activate
        row2 = Sheets("基础数据").Cells(Rows.Count, "b").End(xlUp).Row
        'MsgBox row2
        
        myarr = Sheets("基础数据").Range("a2:b" & row2)   '将所有菜单装入数组
        'MsgBox UBound(myarr)
        
        If UBound(myarr) < 3 Then GoTo end1   '如果菜单个数少于3个就退出
        Set myDic = CreateObject("Scripting.Dictionary")       '建立一级菜单字典
        Set mytwoDic = CreateObject("Scripting.Dictionary")    '建立二级菜单字典
        
        Sheets("螺纹规格查询").Activate
        If Target.Column = 4 And Target.Offset(0, -1) <> "" Then
              For i = 1 To UBound(myarr)
                  t = myarr(i, 1)
                  If t <> "" Then T1 = t
                  If t = "" Then t = T1
                  If t = Target.Offset(0, -1) Then
                      mytwoDic(myarr(i, 2)) = myarr(i, 2) '将菜单值写入键
                  End If
              Next
   
              '二级菜单实现
              With Target.Validation
                  .Delete
                  .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(mytwoDic.Keys, ",")
              End With
         End If
     
end1:   Set myDic = Nothing
        Set mytwoDic = Nothing
        Application.EnableEvents = True
        Application.ScreenUpdating = True
        Application.CellDragAndDrop = True
        
End Sub

      把它放在“螺纹规格查询”表上,一切正常,公称直径一栏可以出现下拉菜单,但关闭后重新打开,就会出现以下报警:

image.png
点“是”后,这段代码不在原表上,而是在自动产生的一个sheet6的表上了,这个似乎是工作簿?“螺纹规格查询表“上没有这段代码,无法实现二级菜单了,不知道是什么原因?请大神帮助,谢谢!
image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-25 12:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
刚才忘了上传文件,补上,这个是打开后,代码已经不在正常的sheet表上了。

螺纹查询2.0.zip

75.96 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2024-11-25 14:03 | 显示全部楼层
工作表名称遭损坏,复制成了另一个文件。

螺纹查询2.1.rar

56.93 KB, 下载次数: 15

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-25 16:44 | 显示全部楼层
2楼,你好!这个文件,你把“Sub Worksheet_SelectionChange(ByVal Target As Range)  这个代码全部复制到sheets(螺纹规格查询)下面,然后存盘退出,再次打开又会损坏,这是主要问题;该如何避免这种情况?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-11-25 16:46 | 显示全部楼层
只要把代码放在要产生2级菜单上的那个表上,关闭再开,就又会损坏,搞不清什么原因

TA的精华主题

TA的得分主题

发表于 2024-11-26 09:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-11-26 09:11 | 显示全部楼层
这是代码建立数据有效性经常会出现的问题,
只有在每次关闭文件时,自动删除工作表内所有的数据有效性并保存文件,就不会出现这种提示啦

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-11 08:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
哦,这样的啊!之前也一直用有效性,不过之前的数据量较少,没有出现这个问题,这次量一大,就出现这个问题;原来是这个原因,太感谢了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-12-11 18:53 | 显示全部楼层
测试了,只要把有效性数据删除再存盘,打开就没有这个问题了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 15:37 , Processed in 0.033609 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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