Страницы: 1
RSS
Самопроизвольное закрытие UserForm при StartUpPosition = 1 (Center)
 
Всем добрый день.

Внезапно столкнулся с такой проблемой:
есть UserForm, которая вызывается двойным щелчком по ячейке
Код
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

        If Target.Cells.Count > 1 Then Exit Sub
         If Not Application.Intersect(Range("i1:i10000"), Target) Is Nothing Then
             UserForm1.Show
             Cancel = True
             
       End If
      
       If Target.Cells.Count > 1 Then Exit Sub
         If Not Application.Intersect(Range("j2:j10000"), Target) Is Nothing Then
             UserForm1.Show
             Cancel = True
         End If
      
   End Sub

в UserForm находиться ListBox со списком, значения из которого по щелчку вставляются в активную ячейку:

Код
Private Sub ListBox1_Click()

ActiveCell.FormulaR1C1 = ListBox1.Text

Unload Me
End Sub


Стартовая позиция UserForm при открытии - центр экрана (1-CenterOwner)

Проблема заключается в следующем, если активная ячейка находится в районе центра экрана, то при двойном щелчке открывается UserForm и сразу выбирается значение из ListBox, которое находится под указателем мыши, при этом нет возможности выбрать другое значение.  Если экран сдвинуть в сторону, то все работает как надо.

Как сделать так, чтобы по двойному щелчку открывалась только UserForm, но не срабатывал выбор в ListBox?

Заранее спасибо.


Во вложении макрос, желтым цветом пометил колонки, которые срабатывают на запуск UserForm.

 
вариант сместить форму
Код
If Not Application.Intersect(Range("i1:j10000"), Target) Is Nothing Then
            UserForm1.StartUpPosition = 0
            'UserForm1.Top = Target.Top + UserForm1.Height
            UserForm1.Top = Application.Top + Application.Height / 2
            UserForm1.Left = Target.Left + UserForm1.Width
            UserForm1.Show
            Cancel = True
         End If
Изменено: V - 07.02.2018 13:42:48
 
Назначьте в Listbox на двойной клик.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Пробовал такой вариант, но опять же, если активная ячейка будет в районе открытия формы, то сработает клик на ListBox.
Как вариант, можно изменить выбор в ListBox на двойной щелчок (DblClick), тогда проблемы нет.
 
Цитата
Srg.Stark написал:
Пробовал такой вариант,
Это вы о чем?
в моем варианте форма смещается в сторону и под двойной клик не попадает.
 
Все верно, но если раздвинуть столбцы так, чтобы I и J были на краю экрана, то форма смещается вправо за край экрана и не дает выбрать значение
 
Все верно, но если раздвинуть столбцы так, чтобы I и J были на краю экрана, то форма смещается вправо за край экрана и не дает выбрать значение

Цитата
Alemox написал: Назначьте в Listbox на двойной клик.
Спасибо, это на запасной вариант, но хотелось бы выбирать одним щелчком.
 
Цитата
Srg.Stark написал:
если раздвинуть столбцы так, чтобы I и J были на краю экрана, то форма смещается вправо за край экрана
зачем? усложняете себе жизнь?
Тогда как вариант дописывайте проверку и делайте расположение слева.

для данной процедуры обычный выпадающий список не подойдет? без макроса.
Изменено: V - 07.02.2018 15:32:34
 
Код
Private Sub UserForm_Initialize()
    Dim t!: t = Timer
    Do While Timer - t < 0.2
        DoEvents
    Loop
End Sub

PS
Да и самопроизвольного здесь ничего нет.

NewName : Одновременное срабатывание события Click на листе, и в ListBox вызываемой формы.
Изменено: RAN - 07.02.2018 21:51:28
 
Спасибо, то что нужно.
Страницы: 1
Читают тему
Наверх