以用户窗体打开工作簿,但隐藏工作簿

时间:2019-09-30 16:58:51

标签: excel vba

我创建了一个excel用户窗体,希望将其用作唯一可见的用户界面,即工作簿不可见(或隐藏)。
在我的Workbook_Open()过程中,在显示用户窗体之前,将工作簿的Windows().Visible属性设置为False。窗体显示正确,但它仍在屏幕上显示空白(无工作表)Excel窗口。似乎尚未打开工作簿,因为用户窗体控件后面的代码在诸如Application.Calculation之类的语句中给出了错误的对象“ _Application”失败的“计算”。

我假设Thisworkbook.Activate将打开工作簿。 我需要它在Windows级别上进行工作,而不是向用户隐藏窗口,而不是对Application隐藏窗口,以免影响同时打开的其他工作簿。

'-------------------------
Public Sub Workbook_Open()

Set UIwb = ThisWorkbook
Application.ScreenUpdating = False
UIwb.Activate
UIwb.Windows(1).Visible = False
Application.ScreenUpdating = True

'Show Splash Screen (Form)
SplashScreen.Show vbModeless

' Instantiate a new UI Object
Set PT_UI = New ConfigUI
' Clear Global status flags
RPT_STATUS = NO_DATA

End Sub  ' Workbook_Open()
'=========================

任何人都可以建议如何使用VBA实现无窗口用户界面吗?

1 个答案:

答案 0 :(得分:0)

尝试将其放在Thisworkbook代码上:

如果您在应用程序中吃午餐,则工作簿将最小化,其他用户将看不到该工作簿(因为已隐藏):

Sub AutoOpen()

If (Environ$("Username") = "windowsUser" Then

ThisWorkbook.ActiveWindow.WindowState = wdWindowStateMinimize

Else
ThisWorkbook.Windows(1).Visible = False

End If
End Sub

然后将其放在用户窗体代码中-它将在用户窗体初始化时运行:

Public Declare PtrSafe Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1

Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub UserForm_Initialize()
Dim bwind As Long

Load ME
ME.Show vbModeless

If ME.Visible = True Then
bwind = FindWindow(vbNullString, ME.Caption)
Else
bwind = 0
End If
SetWindowPos bwind, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
SetWindowPos bwind, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub
相关问题