Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
2 / 2 / 1
Регистрация: 16.06.2013
Сообщений: 33
1

Удаление объекта Shapes

15.04.2018, 09:32. Показов 4363. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня такая ситуация. Есть лист с таблицей. На этом листе есть кнопка, которая запускает макрос. В Ходе выполнения макроса я делаю копию этого листа. Если лист есть, то его удаляю и создаю заново.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub CopySheet(ShName As String, ShName1 As String)
If SheetExists(ShName) = True Then
    Application.DisplayAlerts = False 'Отключаем предупреждения об удалении листа
    ActiveSheet.AutoFilterMode = False ' отключаем автофильтр
    Sheets(ShName).Delete             'Удалить лист
    Application.DisplayAlerts = True  'Включаем предупреждения об удалении листа
End If
Sheets(ShName1).Select
Application.CutCopyMode = False
Sheets(ShName1).Copy after:=Sheets(Worksheets.Count)   'Добавить лист
Sheets(ShName1 & " (2)").Name = ShName
'ActiveWindow.FreezePanes = False
End Sub
После этого с созданного листа нужно удалить кнопку:
Visual Basic
1
2
3
For Each IShape In Sheets(ListSm).Shapes
        If IShape.Name Like "*Button*" Then IShape.Delete
Next
Вылазит ошибка Can't enter break mode at this time. Видимо из-за того что кнопка копируется с "завязанной" на нее программой. Подскажите как это обойти. Может можно сделать копию листа без объектов Shapes или как его правильно удалить?
Миниатюры
Удаление объекта Shapes  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2018, 09:32
Ответы с готовыми решениями:

"работа с выделением Selection объекта word.Bookmarks и .shapes через excel"
Доброе время суток. Возникла проблема: Суть имеется 2 макроса оба запускаются из excel 1-ый...

Удаление объектов из списка и удаление самого объекта
Здраствуйте! Возник такой вопрос, допустим имеется структура данных (неважно, будь то словарь или...

Удаление объекта
Добрый вечер! Я бы хотел уточнить. Если у нас есть такая структура, class A{ private:...

удаление объекта
Суть проблемы: Все происходит в одном классе. Создаю в одной функции объект. Например в .h файле...

9
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
15.04.2018, 16:53 2
Paxani4, ну совершенно мутный код. Где находится макрос CopySheet? Не на том же листе, которй удаляете? Что находится в ShName и ShName1? Если удаляете лист с макросом, то макрос надо ставить в модуль, а не в лист. А лучше обойтись без миниатюр, а прислать файл. А может просто переместить нужную страницу на последнее место?
0
2 / 2 / 1
Регистрация: 16.06.2013
Сообщений: 33
15.04.2018, 18:28  [ТС] 3
Burk, CopySheet находится в модуле. ShName имя нового листа, ShName1 имя листа, который копирую. В листе ShName1 есть код
запуска макроса. Его я убрать не могу.
Visual Basic
1
2
3
Private Sub CommandButton1_Click()
Macros
End Sub
И кнопка на этом листе находится, которую как раз нужно удалить в новом листе.
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
16.04.2018, 00:13 4
а при чём тут Macros?

Добавлено через 1 минуту
Sub CopySheet(ShName As String, ShName1 As String)
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
16.04.2018, 07:11 5
Лучший ответ Сообщение было отмечено Paxani4 как решение

Решение

Paxani4, т.к. ваш файл по каким-то причинам вы выслать не можете, то пришлось делать свой, которй нормально работает и кнопку убирает без проблем. Практически это копия вашего кода. Если вы ещё не разобрались со своим, то придется всё-таки выставить его на форуме.
Вложения
Тип файла: xls CopyPage.xls (42.5 Кб, 10 просмотров)
1
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
16.04.2018, 11:33 6
Paxani4, вы, конечно, знаете, что после добавления листа он становится активным.

Добавлено через 1 час 18 минут
Paxani4, вот что ещё забыл - на быстрых компах при создании новых листов система не успевает полностью создать/скопировать лист, а уже идет новая комада (переименование) для этого листа. У меня старый комп. Поэтому после копирования вашего листа, перед переименованием поставьте оператор DoEvents, не исключено, что у вас всё заработает. Ошибка вроде и намекает на это. Этот оператор ничему не навредит.
0
2 / 2 / 1
Регистрация: 16.06.2013
Сообщений: 33
17.04.2018, 11:36  [ТС] 7
Цитата Сообщение от Burk Посмотреть сообщение
Paxani4, т.к. ваш файл по каким-то причинам вы выслать не можете, то пришлось делать свой, которй нормально работает и кнопку убирает без проблем. Практически это копия вашего кода. Если вы ещё не разобрались со своим, то придется всё-таки выставить его на форуме.
Суть вы поняли верно. Логика работы в моем файле именно такая, как в вашем примере.... На самом деле я не до конца разобрался в природе ошибки... она возникает в пошаговой отладке, после строчки
Visual Basic
1
If IShape.Name Like "*Button*" Then IShape.Delete
или
Visual Basic
1
Sheets(ShName).Delete             'Удалить лист
Видимо эта операция не совместима с пошаговой отладкой... В вашем примере тоже самое. Почему это происходит, я не знаю... и можно ли как-то от этого избавиться?

Добавлено через 5 минут
Цитата Сообщение от Alex77755 Посмотреть сообщение
а при чём тут Macros?
Macros Это основная программа, в ней вызывается Sub CopySheet(ShName As String, ShName1 As String).
Программа большая поэтому не стал ее всю выкладывать, хотел только конкретный момент уточнить с объектом IShape.
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
17.04.2018, 13:48 8
Paxani4,
Цитата Сообщение от Paxani4 Посмотреть сообщение
В вашем примере тоже самое
у меня в моём примере всё работает нормально, иначе я бы его не послал. А про DoEvents из моего последнего сообщения вы не забыли? Поставьте этот оператор после удаления страницы и после копирования перед переименованием листа. За пошаговую отладку не знаю, никогда не пользовался. На моём компе и так работает. А в моём примере что говорит и в каком месте?

Добавлено через 15 минут
Paxani4, а замените в моём файле саб без ивентов на следующий

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub CopySheet(ShName As String, ShName1 As String)
If SheetExists(ShName) = True Then
    Application.DisplayAlerts = False 'Отключаем предупреждения об удалении листа
    ActiveSheet.AutoFilterMode = False ' отключаем автофильтр
    Sheets(ShName).Delete             'Удалить лист
    DoEvents
    Application.DisplayAlerts = True  'Включаем предупреждения об удалении листа
End If
Sheets(ShName1).Select
Application.CutCopyMode = False
Sheets(ShName1).Copy after:=Sheets(Worksheets.Count)   'Добавить лист
    DoEvents
Sheets(ShName1 & " (2)").Name = ShName
For Each IShape In Sheets(ShName).Shapes
        If IShape.Name Like "*Button*" Then IShape.Delete
Next
'ActiveWindow.FreezePanes = False
End Sub
и посмотрите, будет ли работать мой файл у вас
0
2 / 2 / 1
Регистрация: 16.06.2013
Сообщений: 33
17.04.2018, 14:12  [ТС] 9
Цитата Сообщение от Burk Посмотреть сообщение
у меня в моём примере всё работает нормально, иначе я бы его не послал.
Ваш пример работает c/ без DoEvents, если не ставить брэкпоинты и не отслеживать ход работы программы. Вот скрин. Запустил с брэкпоинтом. Я без отладки писать не могу, не такой профи )
Миниатюры
Удаление объекта Shapes  
0
1846 / 1161 / 354
Регистрация: 11.07.2014
Сообщений: 4,102
17.04.2018, 16:01 10
Paxani4, я то думал, что в обычном запуске не идёт моя программа, а оказывается это при запуске через отладчик! Тут я вам пока посоветовать могу только одно - поставьте в нужных вам местах вывод через MsgBox. Какой-то конфликт отладчика с чем-то. Если вы напишете подробно мне, что врубаете при отладке (брэкпойнты ....), то могу попробовать аналогично сделать у себя. Но не исключено, что знающая отладчик публика вам поможет, когда стало ясно где проблема.

Добавлено через 10 минут
Paxani4, сейчас запустил у себя с несколькими брэкпойнтами через кнопку, всё прошло без фокусов
0
17.04.2018, 16:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2018, 16:01
Помогаю со студенческими работами здесь

Удаление объекта ef 6.0
Добрый день! У меня есть 2 класса, которые имеют связь один ко многим, есть бд, использую entity...

Удаление объекта
У каждого класса есть метод который удаляет определенный объект. deleteObject(Car car),...

Удаление объекта
Здравствуйте,форумчане) Есть метод у объекта,которые проверяет вылет за пределы,и если вылетел...

Удаление объекта
Здравствуйте, господа. Больно в гугле велики расхождения ответов на данный вопрос, потому...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru