Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2298|回复: 12

[已解决]看病啦,宏病毒杀完后的后遗症

[复制链接]
发表于 2013-4-23 13:42 | 显示全部楼层 |阅读模式
请高手解决:附件中文件原来中了宏病毒,后来清掉病毒后,打开文件老是弹出“找不到ERF!$A$2”的对话框!
最佳答案
2013-4-23 13:58
  1. Sub test()
  2.     Dim MyName As Name
  3.     Dim c&
  4.     Dim sMsg$
  5.     With ThisWorkbook
  6.         '遍历名称
  7.         For Each MyName In .Names
  8.             If MyName.Visible = False Then
  9.                 c = c + 1
  10.                 MyName.Visible = True
  11.             End If
  12.             '删除名称定义中包含AUTO字样的名称
  13.             If UCase(MyName.Name) Like "*AUTO*" Then MyName.Delete
  14.         Next
  15.     End With
  16.     If c > 0 Then
  17.         sMsg = "一共有 " & c & " 个隐藏名称"
  18.     Else
  19.         sMsg = "无隐藏名称"
  20.     End If
  21.     MsgBox sMsg
  22. End Sub
复制代码

4月运输经营表.zip

8.66 KB, 下载次数: 4

发表于 2013-4-23 13:51 | 显示全部楼层
不敢打开你的文件,目测是宏病毒杀毒软件删除了某个sheet,而你现有表中有到那个sheet A2的绝对引用
回复

使用道具 举报

发表于 2013-4-23 13:54 | 显示全部楼层
4月运输经营表.zip (8.01 KB, 下载次数: 2)
回复

使用道具 举报

发表于 2013-4-23 13:56 | 显示全部楼层
  1. Sub test()
  2.     Dim MyName As Name
  3.     Dim c&
  4.     Dim sMsg$

  5.     Application.DisplayAlerts = False
  6.     Application.ScreenUpdating = False

  7.     With ThisWorkbook
  8.         '遍历名称
  9.         For Each MyName In .Names
  10.             If MyName.Visible = False Then
  11.                 c = c + 1
  12.                 MyName.Visible = True
  13.             End If
  14.             '删除名称定义中包含AUTO字样的名称
  15.             If UCase(MyName.Name) Like "*AUTO*" Then MyName.Delete
  16.         Next
  17.     End With
  18.    
  19.     Application.DisplayAlerts = True
  20.     Application.ScreenUpdating = True

  21.     If c > 0 Then sMsg = sMsg & "一共有 " & c & " 个隐藏名称"
  22. End Sub
复制代码
回复

使用道具 举报

发表于 2013-4-23 13:58 | 显示全部楼层    本楼为最佳答案   
  1. Sub test()
  2.     Dim MyName As Name
  3.     Dim c&
  4.     Dim sMsg$
  5.     With ThisWorkbook
  6.         '遍历名称
  7.         For Each MyName In .Names
  8.             If MyName.Visible = False Then
  9.                 c = c + 1
  10.                 MyName.Visible = True
  11.             End If
  12.             '删除名称定义中包含AUTO字样的名称
  13.             If UCase(MyName.Name) Like "*AUTO*" Then MyName.Delete
  14.         Next
  15.     End With
  16.     If c > 0 Then
  17.         sMsg = "一共有 " & c & " 个隐藏名称"
  18.     Else
  19.         sMsg = "无隐藏名称"
  20.     End If
  21.     MsgBox sMsg
  22. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-4-23 14:10 | 显示全部楼层
hwc2ycy 发表于 2013-4-23 13:58

真是孤陋寡闻啊!还可以将定义的名称隐藏?是怎么做到的?明明没有代码,也没看到名称框有名称!
回复

使用道具 举报

发表于 2013-4-23 14:43 | 显示全部楼层
这个得用代码实现。
回复

使用道具 举报

发表于 2013-4-23 14:44 | 显示全部楼层
Name.Visible 属性
返回或设置一个 Boolean 值,它确定对象是否可见。可读写。
语法

表达式.Visible

表达式   一个代表 Name 对象的变量。

说明


如果将一个名称的 Visible 属性设为 False,则该名称将不出现在“定义名称”对话框中。

回复

使用道具 举报

 楼主| 发表于 2013-4-23 15:17 | 显示全部楼层
hwc2ycy 发表于 2013-4-23 14:44
Name.Visible 属性
返回或设置一个 Boolean 值,它确定对象是否可见。可读写。
语法

Sub test()
Dim MyName As Name
Dim c&
Dim sMsg$
With ThisWorkbook
For Each MyName In .Names
If MyName.Visible = TRUE Then
c = c + 1
MyName.Visible = FALSE            
End If
Next
End With
If c > 0 Then
sMsg = "一共有 " & c & " 个定义的名称"
Else
sMsg = "无定义的名称"
End If
MsgBox sMsg
End Sub

回复

使用道具 举报

发表于 2013-4-23 15:18 | 显示全部楼层
以前写的,还是可以再改下的。

这句If MyName.Visible = TRUE Then
可以改成
If MyName.Visible then

已经是逻辑值了,就不需要来=TRUE了。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 07:22 , Processed in 0.409629 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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