我可以在处理某些东西时冻结Excel吗?

时间:2012-01-18 10:58:23

标签: excel vba excel-vba

在处理某些内容时是否可以冻结Excel?我正在使用2007.我已经知道从VBA冻结工作表的更新是可能的,但我正在寻找整个事情的一点冻结(使用等待光标,也许是一些不错的东西,比如使窗户变暗或者其他东西)

有没有人曾经从VBA尝试过这样的事情?

2 个答案:

答案 0 :(得分:3)

  
    
      

有没有人曾经从VBA尝试过这样的事情?

    
  

是。根据我正在进行的处理类型,我隐藏整个Excel应用程序或显示带有进度更新的用户表单以避免任何用户干扰

示例1 (隐藏应用程序)

Option Explicit

Sub Sample()
    Application.Visible = False

    '~~> Rest of the code

    Application.Visible = True
End Sub

示例2 (使用禁用“X”的用户表单)

创建一个Userform并将此代码放在那里

Option Explicit

Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, _
ByVal wFlags As Long) As Long

Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Const MF_BYPOSITION = &H400&

Private Sub UserForm_Initialize()
    Dim lHwnd As Long

    lHwnd = FindWindow("ThunderDFrame", "Please Wait...")

    Do While lHwnd = 0
        lHwnd = FindWindow("ThunderDFrame", "Please Wait...")
        DoEvents
    Loop

    RemoveMenu GetSystemMenu(lHwnd, 0), 6, MF_BYPOSITION
End Sub

'~~> The below code will not be there
'~~> This is just there so that if you try the above code then you can exit the form
Private Sub UserForm_Click()
    Unload Me
End Sub

用法就像这样

Option Explicit

Sub Sample()
    UserForm1.Show vbModeless

    '~~> Rest of the code

    Unload UserForm1
End Sub

答案 1 :(得分:1)

要在处理期间冻结Excel,请将screenupdating设置为false。确保在完成后将其设置为true,否则用户将无法与Excel交互。除了不会在屏幕上通过大量移动和闪烁吓跑您的用户,这大大加快了处理速度。

Sub Sample()
    Application.ScreenUpdating = False

    '~~> Rest of the code

    Application.ScreenUpdating= True
End Sub

我同意JMax的说法,进度条是一个很好的选择。您可以在此处找到多个不同的Excel VBA进度条:http://spreadsheetpage.com/index.php/blog/progress_bars_the_movie/

顺便说一句,你可以跳过这部电影并直接进入下面的链接。你可能会觉得这部电影很有趣,但它说的是“进度条=好,旋转的东西=坏”。