Как показать пользовательскую форму скрыть ТОЛЬКО экземпляр Excel, который содержит пользовательскую форму - PullRequest
0 голосов
/ 03 апреля 2019

Я хотел бы открыть рабочую книгу и показать только определенную пользовательскую форму (и скрыть рабочую книгу, содержащую пользовательскую форму). Я знаю, как открыть форму при открытии рабочей книги, однако мои попытки скрыть ТОЛЬКО эту конкретную рабочую книгу потерпели неудачу. Мне нужно, чтобы пользователи могли работать и / или открывать другие окна Excel при использовании пользовательской формы. Какие-либо предложения? Спасибо, JP

Я пробовал следующие методы:

myUserform.show vbModeless
Application.WindowState = xlMinimized

Вышеуказанный метод не выглядит последовательным и выглядит забавно, если в настоящее время открыты другие окна Excel. Я также попробовал:

myUserform.show vbModeless
Application.Visible = False

Этот второй метод не позволяет пользователям продолжать работать с другими окнами Excel (которые мне нужны)

1 Ответ

0 голосов
/ 04 апреля 2019

Редактировать: объединенный код, приведенный ниже, изолирует экземпляр Excel с пользовательской формой, заставляя открывать другие файлы в другом экземпляре и заставляя открывать этот файл в своем собственном экземпляре. Позволяет использовать Application.Visible = False

Сначала убедитесь, что этот экземпляр Excel предназначен только для файла UserForm.

Когда вы открываете книгу, убедитесь, что она единственная в экземпляре.

Модуль ThisWorkbook:

'I'll explain why you need the App variable below
Private WithEvents App As Application
Private Sub Workbook_Open()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set Wb = ThisWorkbook
    If Application.Workbooks.Count > 1 Then
        'Not on its own instance
        Wb.Close False
    Else
        'Alright, it's the only workbook, lets open the form
        Set App = Application
        Application.Visible = False
        UserFormName.Show vbModeless
    End If
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

Возможно, вы думаете: «Ну, это означает, что я должен убедиться, что я открою этот файл перед любыми другими файлами, иначе он не будет работать». Это правда, но вы можете обойти это, создав ярлык для Excel, указав параметр «/ X», который нужно открыть для нового экземпляра, и файл. Таким образом, он откроется в новом экземпляре, даже если открыты другие файлы. Другими словами, найдите файл EXCEL.exe, создайте для него ярлык и измените цель на "C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE" /X "FilePath\FileName.xlsm" Путь EXCEL может отличаться в зависимости от версии Excel.

Что произойдет, если я попытаюсь открыть другой файл Excel, и он попытается открыть его в этом случае? Именно здесь в игру вступает переменная App. Следующие две подписки являются обработчиками событий, когда вы пытаетесь открыть файл или новую книгу.

'On new blank Workbook Open
Private Sub App_NewWorkbook(ByVal Wb As Workbook)
    Set cwb = ThisWorkbook
    If Wb.Name <> cwb.Name Then
        Dim opFile As Variant
        Application.DisplayAlerts = False
        Wb.Close False
        opFile = Shell("EXCEL /X ", vbNormalFocus)
        Application.DisplayAlerts = True
    End If
End Sub
'On File Workbook Open
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
    Set cwb = ThisWorkbook
    If Wb.Name <> cwb.Name Then
        Dim fDir As String, opFile As Variant
        fDir = Wb.Path & "\" & Wb.Name
        Application.DisplayAlerts = False
        Wb.Close False
        opFile = Shell("EXCEL /X """ & fDir & """", vbNormalFocus)
        Application.DisplayAlerts = True
    End If
End Sub

Новый экземпляр excel становится «предпочтительным для Windows», поэтому любые новые открытые книги будут пытаться открываться в новом экземпляре, оставляя только пользовательскую форму. И готово, этот файл всегда должен быть в своем собственном экземпляре. Если вы попытаетесь открыть другой файл или новую книгу, они должны открыться в новом экземпляре с этими обработчиками.

Примечание. Некоторые обработчики событий активируются при открытии файла. Если вы вносите какие-либо изменения в код, вам может потребоваться сохранить и снова открыть файл, чтобы они работали должным образом.

...