在vba运行时冻结Excel编辑 [英] Freeze excel editing while vba is running

查看:118
本文介绍了在vba运行时冻结Excel编辑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个要通过vba脚本编辑的Excel工作表,但是我需要用户在脚本运行时不能编辑任何单元格或单击任何按钮.由于单击excel按钮后我会执行Shell程序,因此在此VBA子运行期间启用了编辑.我需要的是一种以编程方式锁定除VBA以外的所有单元格以进行编辑的方法.我该怎么办?

I have an excel sheet that I want to edit via vba script, but I need the users to not be able to edit any cells or click any buttons while the script is running. Due to a programs that I Shell after the excel button click, editing is enabled during this VBA sub run. What I need is a way to programmaticaly lock all cells for editing except by VBA. How can I do this?

伪代码:

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

推荐答案

在使用用户窗体时,在窗体的属性"对话框中将其设置为 modal (按 F4 (如果看不到):

As you are using a UserForm, set it to be modal in the Properties dialog of the form (press F4 in case it is not visible):

这样,除非关闭窗体,否则用户无法在窗体外部单击Excel.

This way, the user cannot click in Excel outside the form unless it is closed.

此外,您可以尝试在执行过程中禁用按钮.这段代码应该做到这一点:

Also, you can try to disable the buttons during the execution. This code should do that:

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

这篇关于在vba运行时冻结Excel编辑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆