Открыть книгу как пользовательскую форму, но книга скрыта - PullRequest
0 голосов
/ 30 сентября 2019

Я создал пользовательскую форму excel, которую я хотел бы использовать в качестве единственного видимого пользовательского интерфейса, т. Е. Книгу не видимую (или скрытую).
В своей процедуре Workbook_Open () я установил для свойства рабочей книги Windows().Visible значениеЛожь перед отображением пользовательской формы. Форма отображается правильно, но она по-прежнему показывает пустое (без рабочего листа) окно Excel на экране. Похоже, что рабочая книга не была открыта, так как код элементов управления пользовательской формы выдает ошибку «Вычисление» объекта «_Application» завершилась неудачно в таких операторах, как Application.Calculation.

Я предположил, что Thisworkbook.Activate откроет рабочую книгу. Мне нужно, чтобы это работало на уровне Windows, скрывая окно от пользователя, а не от приложения, чтобы не влиять на другие книги, открытые одновременно.

'-------------------------
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 голосов
/ 30 сентября 2019

попробуйте поместить это в код этой рабочей книги:

Если вы запустите приложение, книга будет свернута, другие пользователи не увидят книгу (потому что она скрыта):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...