powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA и Exel, Описание свойств рабочего окна
15 сообщений из 15, страница 1 из 1
VBA и Exel, Описание свойств рабочего окна
    #34342685
Eriksson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, подскажите пожалуйста:
Как создать окно, которое автоматически запускалось бы при открытии этого exel документа, а так же имело следующие свойства:
- оно всегда было на экране по верх всех остальных окон
- его нельзя было закрыть (нет кнопок закрытия окна) - только если закрыть этот exel документ
- и чтобы оно не захватывало управление.
Когда создаешь обычное окно - оно перехватывает все управления на себя и после этого нельзя работать с документом, пока не закроешь это окно. А мне необходимо создать вспомогательное окно, которое всегда было бы на экране, но позволяло работать с Exel документом.
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34342722
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34344230
Eriksson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо,
но что-то не получается (
Я работаю в VB 6.3 тот, что при Exel'е - и он выдает ошибку, что не знает такой функции SetWindowPos. Нужно подключать какую-то библиотеку? Что я должен прописать в тексте программы? (в разделе инициализации окна)
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34344259
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот этот модуль подключи к твоему проекту
а в форме затем напишешь
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Form_Load()
   SetTransparent hwnd,  150    ' прозрачное окно
   Me.Left = (Screen.Width - Me.Width) \  2    ' Form1  в центр экрана
   Me.Top = (Screen.Height - Me.Height) \  2 
   On_Top Me.hwnd  ' поверх всех
End Sub

Private Sub Form_Unload(Cancel As Integer)
   Off_Top Me.hwnd  ' обычное окно
End Sub
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34344435
Eriksson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Exel VB нету событий Form_Load() и Form_Unload()

Я прописываю:

Private Sub UserForm_Initialize()
Dim i
i = SetWindowPos(hWnd_, HWND_TOPMOST, 0, 0, 0, 0, &H1 Or &H2)

End Sub

Он впринципе заглатывает, но окно
1. Двигается - хотя код &H1 должен запрещать его перемещение.
2. Оно по умолчанию, как и все создаваемые диалоговые окна при Exel - не дают возможность работать с листами, ячейками Exel, пока открыто это диалоговое окно.
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34344494
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eriksson1. Двигается - хотя код &H1 должен запрещать его перемещение.
Оригинальная интерпретация.
SetWindowPos FunctionSWP_NOMOVE
Retains the current position (ignores X and Y parameters).

SWP_NOSIZE
Retains the current size (ignores the cx and cy parameters).
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34345087
Eriksson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
)) я не так понял? я думал это код... но все же - даже прописывая SWP_NOMOVE - окно всеравно двигается (((

Да впринципе пофиг - пускай двигается. Главеное, чтобы диалоговое окно позволяло работать с Exel документами, в то время как оно запущенно. Чтобы оно не перехватывало все управление...
Подскажите пожайлуста - как это сделать?
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34346364
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eriksson,
флаг SWP_NOMOVE говорит функции SetWindowPos: игнорируй свои параметры X и Y. И всё.

ErikssonГлавеное, чтобы диалоговое окно позволяло работать с Exel документами, в то время как оно запущенно. Чтобы оно не перехватывало все управление...
Подскажите пожайлуста - как это сделать?
UserForm1.Show vbModeless
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34349645
VBAworms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Все работает!
Только появилась еще одна проблема:
При выполнении процедуры удаления OLE Объектов - удаляется это диалоговое окно, которое, как я понимаю, не является OLE объектом.

Процедура:

For Each objOle In Worksheets(2).OLEObjects
If objOle.Name <> UserForm6.Name Then objOle.delete
Next objOle

даже описал так, но всеравно окно закрывается... Подскажите пожалуста - почему? Что надо прописать, чтобы оно не закрывалось?

(Eriksson)
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34349681
VBAworms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Самое интересное, что если в рабочей области нет OLE объектов, то все нормально, а если они там есть, то удаляются они и диалоговое окно.
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34350438
VBAworms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините - окно исчезает не при удалении, а после завершения процедуры CommandButton4_Click() , так как если ставим Msgbox - то при выскакивании диалогового окна Msgbox - окно еще существует... но... вот потом... что происходит потом? почему оно пропадает ?

Private Sub CommandButton4_Click()

For Each objOle In Worksheets(2).OLEObjects
If objOle.Name <> UserForm6.Name Then objOle.delete
Next objOle

MsgBox ("stop")

End Sub
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34353938
VBAworms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема заключается в следующем:
Если окно Userform1 выводиться со следующим свойством:
UserForm1.Show vbModeless
то появляется косяк... - при выполнении процедуры удаления OLE объектов, закрывается и само окно UserForm1.
Если же окно UserForm1 открывать со стандартной настройкой:
UserForm1.Show vbModal
то все работает нормально - окно не закрывается...
Но мне то надо, чтобы был режим vbModeless - чтобы с запуском диалогового окна можно было бы обращаться к ячейкам книги Exel'a.

Подскажите пожайлуста решение данной проблемы? Является ли это мой косяк? или же это косяк VB?
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34354638
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VBAworms,
это не твой косяк. При добавлении/удалении OLE-объектов на лист VBA-шный проект ресетится, со всеми вытекающими. Возможные выходы: 1) сделать вид, что удаляешь: делаешь OLE-объекты невидимыми вместо удаления, реально удаляешь по закрытию формы; 2) удалить, но сохранение состояния/переходы между состояниями сделать помимо VBA-проекта (что-нибудь связанное с таймерами или SendKeys и сохранением состояния во временном файле).
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34354647
Фотография Бенедикт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня вот ещё интересует: не решает ли поставленную задачу своя панель инструментов, а не UserForm?
...
Рейтинг: 0 / 0
VBA и Exel, Описание свойств рабочего окна
    #34354837
VBAworms
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое,

1. Панель инструментов - впринципе можно переделать, но это будет каряво, так как у меня в этом Userform находятся не только командные кнопки, но и поля информации. В добавок - есть один случай, который предусматривает создание и удаление кнопок в этом диалоговом окне...

2. А есть какой-то патч или может все корректно будет работать на MS Office 2007 ?

3. Если не создавать OLE объекты, а делать их невидимыми - насколько это может отрозиться на работоспособности, когда все объекты невидимые и не используются... Как быстро прорисовывается окно ? Так же как и обычно или же это отразится на скорости прорисовки окна, даже если они будут невидимыми... Дело в том, что у меня в зависимости от выборки могут создаваться до 2000 ComboBox'ов, и CkeckBox'ов - это означает, что мне зачастую придеться держать 2000 объектов невидимыми.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA и Exel, Описание свойств рабочего окна
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]