Я довольно новичок, когда дело доходит до программирования, однако я смог создать пару полезных приложений в Excel, которые автоматизируют некоторые из моих повседневных задач.
В настоящее время у меня возникает неприятная проблема при попытке открыть новую книгу с помощью workbooks.open()
в Excel 2016.
Я создал книгу с кнопкой, которая вызывает пользовательскую форму.После запуска формы пользователь может выбрать для загрузки и открытия несколько типов файлов .xls.Когда пользователь нажимает кнопку OK формы, все соответствующие функции вызываются, выбранные рабочие книги открываются, а форма выгружается и скрывается.
Однако лента последней открытой книги, которая, кстати, является активной в данный момент, не отвечает и единственный способ преодолеть это - ALT + TAB между открытыми окнами.
Кажется, что "фокус" все еще находится на исходной книге с кнопкой, потому что, если я вызову Msgbox
после того, как форма выгружена, это то, где она появляется.Стоит отметить, что это происходит, хотя первоначальная рабочая книга не является активной.
После некоторых экспериментов мне удалось решить эту проблему, отключив Application.ScreenUpdating
при вызове моей функции, а затем снова включив ее непосредственно перед выгрузкой формы.
Однако это работает только тогда, когда несколько рабочих книг открываются одновременно.Если пользователь выбирает открыть только одну книгу, проблема остается.Я натолкнулся на предложение сделать пользовательскую форму немодальной, что действительно решает проблему, но создает другие виды нежелательного поведения.
Упрощенная версия кода, которая повторяет проблему, выглядит следующим образом:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False 'solves the issue but only for multiple files - comment out to replicate the problem
If OptionButton1 Then
Workbooks.Open ("http://www.admie.gr/fileadmin/user_upload/reports/DayAheadSchedulingUnitAvailabilities/20180602_DayAheadSchedulingUnitAvailabilities_01.xls")
Else
Workbooks.Open ("http://www.admie.gr/fileadmin/user_upload/reports/DayAheadSchedulingUnitAvailabilities/20180603_DayAheadSchedulingUnitAvailabilities_01.xls")
Workbooks.Open ("http://www.admie.gr/fileadmin/user_upload/reports/DayAheadSchedulingUnitAvailabilities/20180604_DayAheadSchedulingUnitAvailabilities_01.xls")
End If
Application.ScreenUpdating = True 'solves the issue but only for multiple files - comment out to replicate the problem
Unload UserForm1
UserForm1.Hide
MsgBox ActiveWorkbook.Name 'for debugging purposes - comment out to replicate the problem - the msgbox will be displayed on the workbook which called the userform, although it's not the active one
End Sub
Sub Button1_Click() 'calls the userform
UserForm1.OptionButton1.Value = True
Load UserForm1
UserForm1.Show vbModeless 'comment out to replicate the problem - solves the issue but creates unwanted behavior
End Sub
Кто-нибудь имел дело с этим раньше?
Что бы вы предложили?