我创建了一个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实现无窗口用户界面吗?
答案 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