在vba运行时冻结excel编辑

时间:2013-02-15 21:48:51

标签: excel vba locking freeze editing

我有一个excel表,我想通过vba脚本编辑,但我需要用户在脚本运行时无法编辑任何单元格或单击任何按钮。由于在单击excel按钮后我运行的程序,在此VBA子运行期间启用了编辑。我需要的是一种程序化锁定所有单元格以进行编辑的方法,除了VBA。我怎么能这样做?

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.....

4 个答案:

答案 0 :(得分:4)

您是否考虑过禁用键盘输入?这可能是实现你所需要的一种蛮力方式,但这是一种思想。

您可以使用

Application.DataEntryMode = 

禁用键盘输入。在脚本启动后将其设置为关闭,并在脚本结束之前将其重新打开。

同样,这可能被视为蛮力,但只是一个想法。

希望有所帮助。

答案 1 :(得分:4)

当您使用UserForm时,请在表单的“属性”对话框中将其设置为模态(如果不可见,请按 F4 ):

enter image description here

这样,除非关闭,否则用户无法在表单外部单击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

答案 2 :(得分:1)

以下为我工作:

在开头使用Application.Interactive = False并在结尾处重新启用它。这将禁用用户单击/输入尝试,直到Macro / Userform /任何代码部分完成其操作。

答案 3 :(得分:0)

我试图评论Steventnorris和Even-Steven,但我无法做到,所以只是在这里给出答案。

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

我刚尝试了这个,它阻止我编辑工作表,以防万一其他人正在尝试。