Excel зависает после ListBox_DblClick, если курсор мыши перемещается за пределы Listbox во время события - PullRequest
1 голос
/ 27 мая 2019

Контекст

Я использую событие Listbox_DblClick в пользовательской форме Excel (в .xlam AddIn), чтобы сделать кучу вещей (которые в основном обновляют пользовательскую форму, но alost выполняет некоторые внешние записи ...). Эти действия могут занять до нескольких секунд.

Задача

Winbdows Excel будут почти заморожены, если пользователь переместит курсор мыши за пределы списка во время события ListBox_DblClick.

Последствия

Я не могу щелкнуть нигде в пользовательской форме, ActiveSheet или в окне VBA. Даже кнопка закрытия Excel не отвечает. Но, похоже, ничего не работает (последняя строка события уже запущена, ничего не видно на процессоре ...)

Чтобы снова иметь возможность взаимодействовать с Excel, мне нужно:

  • временно переместить курсор мыши над ListBox
  • или временно изменить текущее приложение Windows (например, дважды нажав Alt + Tab).

В таком случае с Excel все в порядке. Других последствий нет, и после этого замораживания все идет хорошо.

Что я уже проверил

  • Это не относится к проблеме EnableEvents или ScreenUpdating. Они правильно управляются макросом. Даже добавление двух строк для установки их в True в конце события не решает проблему.

  • Это не значит, что макрос все еще работает . Добавление Debug.Print "Finished" в конце события показывает, что «Готово» печатается нормально, а Excel хранится в замороженном состоянии.

  • Так как я не хочу, чтобы пользователь запускал новое событие, пока текущее событие все еще выполняется, я предотвращаю это, блокируя / разблокируя множество ListBox (включая объект, привязанный к событию), используя ListBox.Locked в начале / конце события. Но комментирование этих строк не решает проблему.

Минимальный воспроизводимый пример

  • Добавление массива в пользовательскую форму
  • Добавьте следующий код
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
        For n = 1 To 3000
            Me.Caption = n
        Next n
        Me.ListBox1.List = Array("Apple")
    End Sub

    Private Sub UserForm_Initialize()
        Me.ListBox1.List = Array("Apple", "Banana")
    End Sub
  • Двойной щелчок по «Банану» и перемещение курсора мыши

Примечание

В этой форме сообщения 2012 ( Редактирование элементов списка в событии Dblclick останавливает Excel, если мышь не перемещается по списку ), пользователь, похоже, сталкивается с подобной проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...