【问题标题】:Check if Data was entered by the User or by a macro [VBA]检查数据是由用户输入还是由宏输入 [VBA]
【发布时间】:2017-11-24 07:06:40
【问题描述】:

在我的 VBA 项目中,我有不同的按钮(带有自定义 UI 编辑器的功能区栏)启动 Subs,这些按钮将数据输入到单元格中。我想防止用户自己向单元格输入数据,因为这可能会破坏例程。有没有办法验证数据是手动输入的还是自动输入的?我想到了一个控制表,如果我在一个函数中,我会将一个变量设置为 1,并在 worksheet_change 子中检查这个变量。无论如何,我认为这可能是一种冒险的方式,因为 Sub 总是会崩溃,然后该值仍为 1,并且无法再输入任何值。

【问题讨论】:

标签: vba excel validation


【解决方案1】:

我建议您使用 Protect 函数简单地锁定用户输入的工作表。

你必须使用这个函数的UserInterfaceOnly 属性来实现你想要做的事情。

Sheets(“sheetname”).Protect Password:="Secret", UserInterFaceOnly:=True

这将保护您的工作表免受用户输入的影响,并让 VBA 更改工作表中的值。

编辑 - 禁用警报

您在 cmets 中询问是否可以在用户选择这些单元格时禁用警报。下面的代码应该可以解决问题。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
End Sub

【讨论】:

  • 按预期工作。谢谢!
  • 其实我现在还有一个问题。如果用户双击该字段,他会收到一条通知,表明它是只读的。我可以停止这个对话框吗?我试过:Application.DisplayAlerts = False 但这并没有做任何事情......
  • @C.Henke 我编辑了我的答案,请阅读 Edit 部分,这应该可以满足您的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 2013-10-11
  • 2020-01-15
  • 2020-09-03
相关资源
最近更新 更多