1

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

谢谢。

4

2 回答 2

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
于 2012-04-09T16:47:52.507 回答
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

这里的优点是您不会在此过程中丢失行和列的高度和宽度 - 它们会完全恢复到原始格式。

看起来像这样: 在此处输入图像描述

于 2012-04-09T16:52:05.810 回答