2013-12-17 3 views
2

У меня возникла одна проблема в Excel 2013. В моем проекте у меня есть пользовательская форма, содержащая список, в котором перечислены имена всех открытых книг Excel.Userform в Excel 2013 исчезает при переключении активной книги позади

Когда пользователь нажимает на определенное имя в списке, активируется соответствующая книга. Таким образом, пользовательская форма всегда на высоте, и пока пользователь нажимает на имена в списке, он может видеть, что все открытые книги активируются один за другим за активной пользовательской формой.

Это путь он используется для работы в Excel 2010.

Теперь, после обновления с 2010 до 2013 года, если пользователь нажимает на имя в списке, выбранные книги активируется, но UserForm исчезает.

Что именно было нарушено в Excel 2013 и как избежать этой проблемы?

ответ

1

Да, поведение по умолчанию изменилось. В Pre Excel 2013 различные книги отображаются в одном главном окне Excel, если они открыты в том же экземпляре. Но в Excel 2013 они отображаются в их собственном окне. И из-за этого пользовательская форма modeless будет видна только над книгой, которая была активной при загрузке пользовательской формы.

И я не думаю, что у этого есть исправление. Это по дизайну и не может быть исправлено.

1

@ Сиддхарт, исходя из того, что вы сказали, я думаю, что у меня есть решение. Когда вы открываете форму, она будет отображаться только сверху ActiveWorkbook. Пока весь код находится в одном и том же потоке кода (не уверен, что терминология правильная), вы застряли в одной и той же книге; Но если вы используете команды или Application.Ontime, то, похоже, он запускает собственный поток кода, который достаточно независим для работы. Сначала Activate рабочая тетрадь/лист, а затем Unload форма и удаленный вызов макроса, который показал форму в первую очередь.

К сожалению, вам нужно использовать Unload вместо Hide, из-за вышеупомянутой проблемы; что означает, что вам нужно сохранить все/все выбранные параметры.

Private Sub lstFiles_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 
    ThisWorkbook.Application.Workbooks(lstFiles.Text).Activate 
    Unload Me 
    Application.Run "USER_Macro1" 
    'Application.OnTime Now(), "USER_Macro1" 
End Sub 

Private Sub USER_Macro1(Optional Control) ' As IRibbonControl) 
    ModelessForm.Show vbModeless 
End Sub 

Я проверил это в Excel 2013 и до сих пор, даже, кажется, работает независимо от Screenupdating = false вопроса видели в другом месте.

+0

Application.Run сделал трюк для меня! (У меня есть .xlam add-in, которая показывает форму на WOrkbook_Open). –

Смежные вопросы