excel - vba excel:找出自动清除单元格的原因
问题描述
有一个问题我真的需要解决并需要您的帮助。
我查看了许多不同的 VBA Excel 网站来找到我的问题的答案,但不幸的是我一直无法找到我正在寻找的答案。我的“personal.xlsb”中有大约 200 个模块,其中包含大量代码。我还有很多用于几件事的表单和类模块。
这是我的问题: 由于某种原因,Activesheet 中的 range("B4") 在运行代码后会被自动清除。一般来说,使用哪个代码无关紧要,但在使用代码范围后,B4 将被清除。例如,我可以运行代码将 Activeworkbook.Fullname 复制到剪贴板。
当我在单元格被清除之后在 B4 中输入文本或其他内容时,之后它也会自动被清除。如果没有自动清除,我无法在单元格中输入任何文本。
我试图找出正在运行哪些代码来清除 B4,例如使用 Worksheet_SelectionChange(ByVal Target As Range) 或使用 Watch 窗口,但不幸的是到目前为止它对我没有帮助。
我没有在我的所有代码中找到引用 B4 的特定代码,或引用第 2 列第 4 行。我或多或少拼命寻找负责自动清除范围 B4 的代码。
例如,当我将它放在直接窗口中时:Range("B4").value = "B4 changed"
它会自动删除。Worksheet_SelectionChange(ByVal Target As Range) 为时已晚,无法看到单元格被清除的原因,并且 B4 上的监视窗口没有发现任何东西,即使我认为应该这样做。我已经尝试了很多东西(轻描淡写)。
当我在直接窗口中更改它时:Application.Calculation = xlManual
然后当我输入文本时它不会清除 B4,但是在我把它放回 xlAutomatic 之后,B4 无论如何都会被清除。我还检查了 usingApplication.EnableEvents = False
是否有帮助,但它不会改变自动清除 B4 的任何内容。我还检查了一些公共声明是否会引用 B4,但它们没有。也没有涉及条件格式。
请帮我找出哪些代码正在自动运行以清除 B4,我真的很感激!!
亲切的问候,
理查德
解决方案
我会逐步解决这个问题。首先创建一个新的标准模块并包括:
Public WhoAmI As String
Sub ev_on()
Application.EnableEvents = True
End Sub
Sub ev_off()
Application.EnableEvents = False
End Sub
并在工作表代码区域:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Be_4 As Range
Set Be_4 = Range("B4")
If Intersect(Target, Be_4) Is Nothing Then Exit Sub
MsgBox WhoAmI
End Sub
- 在您的流程中,您知道如果您尝试在其中手动输入一个值, B4将自动清除。
- 跑
ev_off
- 验证工作表是否未受保护且B4已解锁
- 验证B4不受数据验证的约束
- 尝试在B4中输入值
- 注意是否发生自动清除。
如果自动清除仍然发生,你有一个超出我能力的问题。如果自动清除被阻止,您将开始一个非常繁琐的过程,将您的潜艇一一更新以包括在顶部:
Sub anyroutine()
WhoAmI = "anyroutine"
' more stuff
End Sub
所以所有可疑的潜艇都会在全局字符串中记录他们的名字。然后运行ev_on
并尝试检测歹徒。
推荐阅读
- windows-10-universal - 是否可以使用 nvidia Nsight 调试 cppwinrt directx12 应用程序?
- r - msmFit 后提取系数
- mysql - 错误 MySQL 连接访问被拒绝
- javascript - CSS 无限循环动画在 Safari11 或 iOS11 中不起作用
- sql - 将日期时间/时间戳转换为日期的问题
- r - SpatialPointDataFrame 和 Queen 邻接相邻列表
- android - 如何使所有 EditText 都不可编辑(反之亦然)?
- r - 为多条轨迹绘制颜色条和色阶
- jquery - laravel中所有页面的jQuery ajax url问题
- reactjs - I18n 内化反应英语和印地语