我正在创建一个 excel 应用程序,当用户转到特定工作表时,它将打开一个用户表单。当用户单击此工作表时,将出现该表单。但是,我不希望用户能够看到工作表中的内容。我只是希望它在没有滞后的情况下打开或已经加载到该表中。有没有办法做到这一点?
谢谢。
以下内容尽可能接近您所寻求的。
我创建了一个默认名称为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
您可以先隐藏工作表中的所有单元格:
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
这里的优点是您不会在此过程中丢失行和列的高度和宽度 - 它们会完全恢复到原始格式。
看起来像这样: