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

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

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

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


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