powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / UserForm пропадает в момент программного удаления листа. VBA
19 сообщений из 19, страница 1 из 1
UserForm пропадает в момент программного удаления листа. VBA
    #37937485
malema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я пытаюсь создать подобие навигатора по листам с помощью UserForm, поскольку листов в книге очень много и ходить по ним неудобно. Всё работает замечательно: выбираю в списке на UserForm название листа и тот активируется. Но листы периодически теряют актуальность, в таком случае я нажимаю кнопку на листе, нужные данные переносятся в разные таблички, а сам лист удаляется. И почему-то в этот момент закрывается UserForm, хотя нигде в коде такого не прописано. Если я удаляю лист вручную - UserForm не закрывается. Я попробовала перенести UserForm в отдельную книгу, но в таком случае непонятно, как к нему обратиться из основной книги... Буду благодарна за советы и науку:)
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937496
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А код-то где?
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937539
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может не закрывается, а прячется за окном экселя?
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937547
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо делать надстройку к Excel
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937554
malema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если кратко, то вот (в сокращённом варианте та же проблема). Процедура, вызываемая при нажатии кнопки на листе. Листы созданы по одному шаблону, так что обработчик общий.

Public Sub RemoveOrder(curSheet As Worksheet)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If UserForm4.Visible = True Then UserForm4.ListBox1.RemoveItem (UserForm4.ListBox1.ListIndex)
curSheet.Delete
Application.ScreenUpdating = True
End Sub


Кнопка на листе:
Private Sub CommandButton2_Click()
Call RemoveOrder(Me)
End Sub

Вот собственно и всё...
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937560
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нужно сделать отдельный модуль, туда перенести вашу процедуру, сделать её паблик, создать макрос с вызовом этой процедуры и привязать его к кнопке на тулбаре или в меню
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937561
malema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не прячется, я искала:) Свойство UserForm4.Visible принимает значение False
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937568
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
malemaЕсли кратко, то вот (в сокращённом варианте та же проблема).а можно в виде файла, где проявляется этот глюк?
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937595
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это не глюк. Например, при удалении элемента управления на листе происходит сброс состояния VBA-проекта, ЕМНИП.
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937603
malema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, вот файлик, там только основное вместе с глюком. На первом листе вызывается сама форма со списком листом, на остальных листах - кнопка Удалить, после нажатия на которую запускается та процедура удаления. Обратите внимание, при этом форма исчезает. Кода минимум.
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937616
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦаЭто не глюк. Например, при удалении элемента управления на листе происходит сброс состояния VBA-проектапохоже на то. По крайней мере, форма действительно не прячется, а терминируется. Ну, в принципе, полагаю, можно просто запускать ее вновь после удаления листа
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937619
malema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЦЦа, как же в таком случае поступить? Перенести все кнопки с листа в менюшку, как советовал Konst_One, чтобы не оставалось на листе ни одного элемента управления? (если я правильно поняла). Ещё у меня была мысль перенести эту форму в отдельную книгу, тогда по идее на неё ничего не должно влиять. Но я так и не нашла, как обратиться к форме, которая находится в другой книге, чтобы удалить оттуда лишнюю строку с названием листа, например.
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937638
malema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, проблема в том, что вызов процедуры происходит с самого удаляемого листа. Пока этот вызов до конца не обработан - форма висит. Лист удалился - и всё, после этого больше ничего не происходит, все процедуры завершили свою работу. Если б хотя бы существовало событие у книги типа Workbook_SheetDelete, можно было бы туда повторное отображение формы вставить... Всё что я пока придумала - снимать галочку на первом листе, чтобы пользователь повторно её ставил, запуская тем самым форму. Но заказчик капризничает, говорит, что я смухлевать хочу)) И правда некрасиво как-то получается.
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937730
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> проблема в том, что вызов процедуры происходит с самого удаляемого листа

Нет. Проблема в том, что удаляется лист с кодом. Если создать на форме кнопку с кодом для удаления текущего листа:
Код: vbnet
1.
2.
3.
4.
5.
Private Sub CommandButton1_Click()
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub

и удалять листы без кода, все нормально. Но как только удаляешь лист с кнопкой - форма пропадает.

> Если б хотя бы существовало событие у книги типа Workbook_SheetDelete, можно было бы туда повторное отображение формы вставить...

Не получается. Я пробовал в коде книги отслеживать число листов, и при уменьшении числа (лист удален) вызывать процедуру отображения формы из Лист1 (ее сделал Public)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim numSheets&

Private Sub Workbook_Open()
numSheets = Sheets.Count
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'Stop
DoEvents
If numSheets > Sheets.Count Then Лист1.CheckBox2_Click
numSheets = Sheets.Count
End Sub

Но при удалении листа с кнопкой код просто не выполняется.

Кстати, почему бы не сделать кнопку удаления на форме, а из листов код убрать?
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37937739
Казанский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
malemaЯ пытаюсь создать подобие навигатора по листам с помощью UserForm, поскольку листов в книге очень много и ходить по ним неудобно.А Вы знаете про такую штуку, как правый клик по кнопкам перемещения по листам (они слева на панели ярлычков листов)? Может, и форма не нужна?
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37941077
malema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Казанский, ого! кстати, не знала))) Спасибо)) Но это всё равно не очень удобно в моём случае, поскольку в названиях листов недостаточно информации, и я в своей форме вывожу ещё парочку нужных полей. Короче, понятно, что тут остаётся только смириться. Я перенесла навигатор в отдельную книгу и проблема отпала. Спасибо всем откликнувшимся! Творческих успехов :)
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37941136
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
malema,

А что, есть желание оставить как есть, с кнопкой "Удалить" именно на листе? Есть вариантик с выносом обработчика событий нажатия кнопки из модуля класса листа в рамках одного VBA-проекта. По крайней мере, можно попробовать.
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37941195
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не, денонсирую. При удалении листа удаляеЦЦа его класс (даже если он пуст) из VBA-проекта с ресетом проекта (и последующей необходимостью его перекомпиляции). Так что вынос кода в другой VBA-проект (книгу или надстройку) будет правильней.
...
Рейтинг: 0 / 0
UserForm пропадает в момент программного удаления листа. VBA
    #37942607
malema
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЦЦа, зато теперь понятно, почему так происходит, так что ответ на свой вопрос я получила. Ещё раз спасибо за разъяснения:)
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / UserForm пропадает в момент программного удаления листа. VBA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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