Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2011, 14:33   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Определить отрыта ли UserForm vbModeless

Имеем форму которая отрывается в режиме vbModeless. Нужно определить открыта ли эта форма в данный момент или нет.
Поиск по форуму вывел на функцию:
Код:
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Function Forms_Open(Caption As String) As Boolean

If FindWindow("thunderDFrame", Caption) = 0 Then
Forms_Open = False
Else
Forms_Open = True
End If
 
End Function
Но в данном случае она всегда возвращает false.
Как быть, куда рыть?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 09.06.2011, 20:18   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Всё делается проще:
Код:
If userform1.visible Then ....
EducatedFool вне форума Ответить с цитированием
Старый 09.06.2011, 21:33   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Всё делается проще:
Код:
If userform1.visible Then ....
Вот часть кода
Код:
    DeleteBar ИмяПанели
    If МенеджерЛистов.Visible Then Unload МенеджерЛистов
........
Sub DeleteBar(namebar): On Error Resume Next    ' удаление панель
    Dim cbar As CommandBar
    For Each cbar In Application.CommandBars
        If cbar.Name = namebar Then cbar.Delete
    Next:
End Sub
Если этот код выполнятся когда панель раннее создана то все работает хорошо. Но если он выполняется когда панели нет, то на строчке IF получаем ошибку: Run-time error 5: Invalid procedure call or argument.
С уважением, Алексей.

Последний раз редактировалось tae1980; 09.06.2011 в 21:35.
tae1980 вне форума Ответить с цитированием
Старый 09.06.2011, 21:47   #4
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Спасает использование "On Error Resume Next" пред IF. Но как-то это не спортивно....
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 09.06.2011, 21:55   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Нашел еще один способ борьбы: убрать If в начало Private Sub UserForm_Initialize()
Работает и как минимум одну строчку листинга выигрываем.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 09.06.2011, 22:05   #6
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

После небольшой практики выяснилось что размещение If в начало Private Sub UserForm_Initialize() и первые вариант с "On Error Resume Next" ведут себя не много по разному. Вернулся к первому варианту, но так же от него не в восторге.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 09.06.2011, 23:24   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Спасает использование "On Error Resume Next" пред IF. Но как-то это не спортивно....
Неужели... по сравнению с изначально предложенным вами использованием WinAPI - ещё как "спортивно"...

И ведь никто не запрещает сделать всё по фэн-шую:
Код:
On Error Resume Next
If userform1.visible Then ....
On Error GoTo 0
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с userform Garf Помощь студентам 1 17.05.2011 21:07
VBA Userform Garf Помощь студентам 0 10.04.2011 21:36
userform alegl Помощь студентам 1 16.12.2010 00:58
UserForm i777 Microsoft Office Excel 2 17.11.2010 02:04
VBA (UserForm) Zhene4ka2607 Помощь студентам 2 08.06.2009 16:59