powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как удалить VBA графические объекты?
19 сообщений из 19, страница 1 из 1
Как удалить VBA графические объекты?
    #34073947
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Excel
Красивый (на мой вгляд) графический прогресс-бар. Не получается его программно удалять по завершении процесса. Макрорекордер не помог.
Подскажите как его программно удалять.
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074059
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Private Sub CommandButton1_Click()
' рисуется прямоугольникActiveSheet.Shapes.AddShape(msoShapeRectangle, 96.75, 90#, 408#, 19.5).Select
Selection.ShapeRange.Fill.Visible = msoTrue
Selection.ShapeRange.Fill.Transparency = 0#
Selection.ShapeRange.Line.Weight = 0.75
Selection.ShapeRange.Line.DashStyle = msoLineSolid
Selection.ShapeRange.Line.Style = msoLineSingle
Selection.ShapeRange.Line.Transparency = 0#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.ForeColor.SchemeColor = 64
Selection.ShapeRange.Line.BackColor.RGB = RGB(255, 255, 255)
' тестовый цикл
For x = 100 To 500 Step 3
Shapes.AddLine(x, 100, x + 2, 100).Select
Selection.ShapeRange.Line.ForeColor.SchemeColor = 12
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.Weight = 12#
Selection.ShapeRange.Line.Visible = msoTrue
Selection.ShapeRange.Line.Style = msoLineSingle
Cells(1, 1).Activate
Next x


End Sub

' Как все это стереть?
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074256
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
talgat
Извини, пожалуйста, я немножко переписал твой макрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Sub Макрос7()
'
' Макрос7 Макрос
' Макрос записан 20.10.2006 (DTK)
'

'
 
 ActiveSheet.Shapes.AddShape(msoShapeRectangle,  96 . 75 ,  90 #,  408 #,  19 . 5 ).Select
        With Selection.ShapeRange.Fill
            .Visible = msoFalse
            .Transparency =  0 #
        End With
        With Selection.ShapeRange.Line
            .Weight =  0 . 75 
            .DashStyle = msoLineSolid
            .Style = msoLineSingle
            .Transparency =  0 #
            .Visible = msoTrue
            .ForeColor.SchemeColor =  64 
            .BackColor.RGB = RGB( 255 ,  255 ,  255 )
        End With
    For x =  100  To  500  Step  3 
        ActiveSheet.Shapes.AddLine(x,  100 , x +  2 ,  100 ).Select
            With Selection.ShapeRange.Line
                .ForeColor.SchemeColor =  12 
                .Visible = msoTrue
                .Weight =  12 #
                .Visible = msoTrue
                .Style = msoLineSingle
            End With
        Cells( 1 ,  1 ).Activate
    Next x
End Sub

Для удаления графических объектов использовал следующий код (кстати, кнопку он тоже удаляет)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Sub Макрос8()
'
' Макрос8 Макрос
 Dim n As Variant, i As Integer
 On Error Resume Next
        n = ActiveSheet.Shapes.Count
        i =  0 
        For i = i +  1  To n
            ActiveSheet.Shapes(i).Select
            Selection.Delete
        Next i
End Sub

У кода есть недостаток: за один заход он не убирает все графические объекты.
Надеюсь, коллеги не сочтут за труд и в случае необходимости поправят.
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074297
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To SirFisher:
Кнопку удаляет. А линии только частично. И прямоугольник остается.
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074317
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конструкция i = i + 1 To n совсем не понятна.
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074335
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
talgatTo SirFisher:
Кнопку удаляет. А линии только частично. И прямоугольник остается.
Выше написал, что макрос удаляет кнопку и еще сырой. Для полного удаления графических объектов приходится несколько раз вызывать Макрос8.

talgatКонструкция i = i + 1 To n совсем не понятна.
Пошаговое выделение объекта, i после каждого цикла приращивается на 1.
Моё предложение не панацея и требует доработки, чем сейчас и занят. Также буду рад, если Вы подскажете полноценное решение.
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074397
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On Error Resume Next
n = ActiveSheet.Shapes.Count
MsgBox (n) For i = 500 To 520
ActiveSheet.Shapes(i).Select
Selection.Delete
Next i
Как ни странно n принимает разные значения. От чего зависит значение я не пойму.
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074419
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
talgatOn Error Resume Next
n = ActiveSheet.Shapes.Count
MsgBox (n) For i = 500 To 520
ActiveSheet.Shapes(i).Select
Selection.Delete
Next i
Как ни странно n принимает разные значения. От чего зависит значение я не пойму.
Такую штуковину уже сделал и тоже пока не могу ума дать, почему за 1 проход не удаляет все графические объекты.
Кроме того, можно еще упростить код:
Код: plaintext
1.
ActiveSheet.Shapes(i).Select
Selection.Delete
записав как
Код: plaintext
ActiveSheet.Shapes(i).Delete

P.S. Кстати, Вы правы, инструкция i=i+1 не нужна.
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074507
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
talgat
Всё работает.
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub Макрос99()
'
' Макрос99 Макрос
  ActiveSheet.Shapes.SelectAll
  Selection.Delete
End Sub
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074521
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SirFisher talgat
Всё работает.
Код: plaintext
1.
2.
3.
4.
5.
6.
Sub Макрос99()
'
' Макрос99 Макрос
  ActiveSheet.Shapes.SelectAll
  Selection.Delete
End Sub


Спасибо!
Как нашли решение?
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074537
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плохо что кнопка удаляется.
Она нужна для запуска процесса.
Но это уже другой вопрос. Спасибо!
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074539
SvIva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SirFisher
Так вы удалите нужные кнопки, только для линий:
Код: plaintext
1.
2.
3.
4.
5.
6.
For i =  1  To ActiveSheet.Shapes.Count
   If InStr( 1 , ActiveSheet.Shapes(i).Name, "Line") >  0  Then
    ActiveSheet.Shapes(i).Select
    Selection.Delete
    If i >  1  Then i = i -  1 
   End If
Next
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074543
SirFisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
talgat
Немножко побродил в хелпе VBA по семейству Shape.
Прошу меня извинить, у нас уж за полночь. До свидания.
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074587
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvIva SirFisher
Так вы удалите нужные кнопки, только для линий:
Код: plaintext
1.
2.
3.
4.
5.
6.
For i =  1  To ActiveSheet.Shapes.Count
   If InStr( 1 , ActiveSheet.Shapes(i).Name, "Line") >  0  Then
    ActiveSheet.Shapes(i).Select
    Selection.Delete
    If i >  1  Then i = i -  1 
   End If
Next

If InStr(1, ActiveSheet.Shapes(i).Name, "Line") > 0 Then
Дает ошибку. Хотя до ошибки линии удаляются, а прямоугольник нет.
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074665
SvIva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Естественно, дает ошибку, здесь показан принцип и нет проверки на конец коллекции Shape.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
For i =  1  To ActiveSheet.Shapes.Count
   If InStr( 1 , ActiveSheet.Shapes(i).Name, "Line") >  0  Then
    ActiveSheet.Shapes(i).Select
    Selection.Delete
    If i >  1  Then i = i -  1 
'    Вот эта проверка
    If i = ActiveSheet.Shapes.Count Then Exit For
End If
А для прямоугологика нужна доп.проверка на имя "Rectangle".
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074687
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvIvaЕстественно, дает ошибку, здесь показан принцип и нет проверки на конец коллекции Shape.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
For i =  1  To ActiveSheet.Shapes.Count
   If InStr( 1 , ActiveSheet.Shapes(i).Name, "Line") >  0  Then
    ActiveSheet.Shapes(i).Select
    Selection.Delete
    If i >  1  Then i = i -  1 
'    Вот эта проверка
    If i = ActiveSheet.Shapes.Count Then Exit For
End If
А для прямоугологика нужна доп.проверка на имя "Rectangle".
СпасибА
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34074776
Фотография talgat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получилось прикольно. При переходе с листа на лист срабатывает прогресс-бар.
...
Рейтинг: 0 / 0
Как удалить VBA графические объекты?
    #34075750
SvIva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так будет красивее и быстрее работать (утро вечера мудреннее !).
Код: plaintext
1.
2.
3.
4.
5.
Sub test1()
Dim myShp As Shape
For Each myShp In ActiveSheet.Shapes
   If Left(myShp.Name,  4 ) = "Line" Or Left(myShp.Name,  4 ) = "Rect" Then myShp.Delete
Next
End Sub
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как удалить VBA графические объекты?
    #38043640
Joann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все это ерунда, а вот действительно важные вопросы здесь как раз и не затрагиваются...
Раз уж это прогрессбар, то естественно он должен доводить до пользователя состояние выполнения процесса по времени, но вот как раз время - то исполнения самого прогресс-бара непостоянно.
Попробуйте запустите его раз 10-15 подряд (даже на очень неслабой машине с i5) - картина становится оооочеень забавной. И даже элементарный процесс, который отображается (10м или 15м) прогрессбаром затянется на часы уже по вине самого этого прогрессбара.
Далее, почему уже созданные объекты так долго удаляются (и программно и вручную)?
Кто знает, в чем тут подвох?
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как удалить VBA графические объекты?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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