在vba运行时冻结excel编辑
我有一个我想通过vba脚本编辑的excel表,但我需要用户无法编辑任何单元或在脚本运行时单击任何按钮。由于在excel按钮单击后我弹出的程序,在此VBA子运行期间启用了编辑。我需要的是通过编程锁定所有单元格以进行编辑,除了VBA。我怎样才能做到这一点?在vba运行时冻结excel编辑
Psuedo_Code:
Shell _ "PROGRAM1"
Shell _ "PROGRAM2"
Dim shellobject As PROGRAM2
shellobject.Connect "PROGRAM1"
shellobject.dothings
if(shellobject.success) then
Cells(1,1).Value = "HUZZAH!"
Else
Cells(1,1).Value = "OH NO MR BILL!"
End If
shellobject.dootherthings
etc.....
当你使用一个用户窗体,将其设置为模式形式的属性对话框(按F4的情况下,它是不可见):
这样,除非关闭,否则用户不能在表单外单击Excel。
此外,您可以尝试在执行过程中禁用按钮。此代码应该这样做:
Private Sub CommandButton1_Click()
SetButtonsEnabled False
Application.EnableEvents = False
'Your code here
SetButtonsEnabled
Application.EnableEvents = True
End Sub
Private Sub SetButtonsEnabled(Optional blnEnable As Boolean = True)
Dim btn As Control
For Each btn In Me.Controls
If TypeOf btn Is CommandButton Then btn.Enabled = blnEnable
Next
End Sub
我的属性窗口中没有UserForm,只有“Sheet1 Worksheet”。这些按钮直接插入Excel表格。我不相信他们有一个用户表单容器,但用作单独的实体。 – steventnorris 2013-02-19 13:43:19
好的,所以我创建了一个小模式窗体,当Excel工作表中的按钮被点击时(简单的去和取消按钮,没什么奇特的)。这成功地锁定了一切,并设置了按钮的启用属性,使它们不被按下。感谢你在这一个坚持我。 – steventnorris 2013-02-19 14:56:49
你有没有考虑从键盘输入无效。这可能是一种完成你所需要的蛮力方式,但这是一个想法。
您可以使用
Application.DataEntryMode =
从键盘禁止输入。在脚本启动后将其设置为关闭状态,并在脚本结束之前将其关闭。
再一次,这可以被认为是蛮力,但只是一个想法。
希望有所帮助。
在我们蛮横强制事物的同时,还会添加Application.EnableEvents = False和Application.ScreenUpdating = False。 – 2013-02-15 23:00:12
这不起作用。我已经将Application.DataEntryMode = xlOff添加到开头,并将Application.DataEntryMode = xlOn添加到最后,并且在我的vba子版运行期间仍然启用了编辑。 – steventnorris 2013-02-18 21:34:15
嗯......从上面阅读您的意见,我假定你的子过程类似于这样的东西... '子ExecuteShell 壳牌(
我试图Steventnorris和偶数史蒂芬发表评论,但我不能,所以只是把答案在这里。
Application.DataEntryMode= xlOff in the beginning should be set to
Application.DataEntryMode= xlOn
and then at the end of the code
put in
Application.DataEntryMode= xlOff
我只是尝试这样做,它已经阻止了我编辑表这样万一别人正在努力。
继为我工作:
使用Application.Interactive = False
在开始和结束时重新启用它。这将禁止用户点击/输入尝试,直到宏/用户表/任何代码部分完成其操作。
不确定脚本究竟是从哪里运行的,但通常在运行VBA时无法编辑电子表格。停止脚本的唯一方法是Ctrl + Break。 – 2013-02-15 21:52:47
我可以在运行时进行编辑。它按钮点击运行,轰击两个程序,然后根据从两个带壳程序收到的响应进行编辑。 – steventnorris 2013-02-15 22:02:59
您描述的行为听起来很不寻常 - 在正常情况下,您不能在执行宏期间编辑Excel。你能发布相关的代码吗? – 2013-02-15 22:41:17