如何隐藏userform背后的工作簿?

时间:2018-04-20 21:59:07

标签: excel vba excel-vba userform visible

我尝试过多种方法来隐藏userform背后的特定工作簿!

我使用的最后一个代码是:

Private Sub UserForm_Layout()
  Application.Left = MainWindow.Left
  Application.Top = MainWindow.Top
End Sub
Private Sub UserForm_Activate()
  Application.Left = Me.Left
  Application.Top = Me.Top
  Application.Width = Me.Width * 0.85
  Application.Height = Me.Height * 0.85
End sub

它会隐藏用户窗体后面的应用程序窗口,但是如果打开多个工作簿并激活其中一个,当我之后点击userform时,它将只移动用户窗体中的活动工作簿!

如何指示始终只使用此功能影响特定工作簿?

此外,通过从一个UF跳转到另一个UF,每次都会执行相同的代码!

基本上,我需要隐藏在userform后面的特定工作簿并且用户无法访问,但是我打算打开的所有其他已经打开的工作簿或工作簿都不会受此影响!其他工作簿必须是可访问的,可见的,不应该消失,或者如果我使用这个或类似的功能就移动!

我也尝试过application.visible = false,但是它很危险,因为它也会影响其他工作簿,应用程序OFC在任务栏上不可见,任何错误都可能导致应用程序在后台保持打开状态而用户不可见!

如果您建议任何其他方法来实现上述要求,我将很乐意尝试!

日Thnx

1 个答案:

答案 0 :(得分:0)

尝试隐藏表单的父窗口

id

或确定表单的屏幕坐标并将其应用于父

Private Sub UserForm_Initialize()
    ThisWorkbook.Windows(1).Visible = False
End Sub

Private Sub UserForm_Terminate()
    ThisWorkbook.Windows(1).Visible = True
End Sub

要使用GetSystemMetrics function获取屏幕分辨率:

Private Sub UserForm_Initialize()
    With ThisWorkbook.Windows(1)
        .WindowState = xlNormal
        .Left = Me.Left + Application.Left  'Calculate exact Screen.Left coordinate
        .Top = Me.Top + Application.Top     'Calculate exact Screen.Top coordinate
        .Width = Me.Width * 0.85
        .Height = Me.Height * 0.85
    End With
End Sub