Excel VBA形式滞后

时间:2012-04-09 15:25:21

标签: excel vba

我正在创建一个excel应用程序,当用户转到特定工作表时,该应用程序将打开用户窗体。当用户单击此工作表时,将显示该表单。但是,我不希望用户能够看到表单中的内容。我只是想让它在没有滞后的情况下打开或者已经加载到那张表中。有没有办法做到这一点?

感谢。

2 个答案:

答案 0 :(得分:2)

以下内容尽可能接近您所寻求的内容。

我创建了一个默认名称为UserForm1的表单。我在ThisWorkbook中包含了以下代码。

如果用户点击“Sheet2”标签,代码会加载UserForm1,最大化并显示它。退出表单后,代码将切换为“Sheet3”。

这与您的规范不完全匹配,因为您可以在表单出现之前看到“Sheet2”几分之一秒。我试过预加载表单。我尝试在SheetDeactivate事件例程中关闭屏幕更新,而不是再次打开它,直到我退出SheetActivate事件例程。但是我没有尝试过任何阻止这种短暂闪光的事情。

尝试使用此代码并确定它足够好。

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

  If Sh.Name = "Sheet2" Then
    Load UserForm1
    With UserForm1
      .Width = Application.Width
      .Height = Application.Height
      .Show
    End With
    Application.EnableEvents = False    ' Surpress SheetActivate event
    Worksheets("Sheet3").Activate
    Application.EnableEvents = True
  End If

End Sub

答案 1 :(得分:2)

您可以先隐藏工作表中的所有单元格:

Worksheets("Sheet3").Cells.EntireRow.Hidden = True
Worksheets("Sheet3").Cells.EntireColumn.Hidden = True
MyUserForm.Show 'You can show modally here if you like

当您准备再次向用户显示内容时,您可以使用:

MyUserForm.Hide
Worksheets("Sheet3").Cells.EntireRow.Hidden = False
Worksheets("Sheet3").Cells.EntireColumn.Hidden = False

这里的优势在于,您不会在此过程中丢失行和列的高度和宽度 - 它们将恢复为原始格式。

看起来像这样: enter image description here