Страницы: 1
RSS
Удаление наложенных стрелок microsoft excel 2007
 
Уважаемые форумчане!
Возникла проблема по excel. Обычно вопросы по офису решаю сама, но тут ничего не могу поделать.
Рисую схему - схема состоит из стрелок и прямоугольников - больше ничего, но их надо нарисовать очень много.
Для упрощения задачи - так как много в схеме повторений, я стала копировать стрелки с прямоугольниками,  либо сами стрелки. И тут заметила, что с каждым копированием скопированная стрелка визуально утолщается, а файл тяжелеет и приложение его с трудом обрабатывает, открывает и закрывает.
Заметила, если встать на стрелку и нажать клавишу delete, стрелки, лежащие на исходной, удаляются (на каждую надо жать клавишу delete), а файл уменьшается в весе. Но если такие манипуляции проводить с каждой стрелкой - это потеря огромного количества времени.
Скажите, кто знает, как удалить такие стрелки минимумом операций? Ведь должна же быть функция в excel, предусматривающая удаление этой проблемы?
Спасибо.
 
Цитата
karabelena написал: как удалить такие стрелки минимумом операций?
какие стрелки?
? макросом (запускать, находясь на Активном листе)
Код
Sub delShapes()
For Each shp In ActiveSheet.Shapes
   shp.Delete
Next
End Sub
p.s. ознакомьтесь с Правилами форума, Всегда прикладывайте файл! (урезанный пример, отражающий проблему).. экстрасенсов нет!  8)  ...
Изменено: JeyCi - 04.09.2016 05:24:14
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
На работе интернета нет. Постараюсь как-нибудь скинуть и через смартфон отправить.
 
Код
Sub DeleteShapes() : ActiveSheet.DrawingObjects.Delete:End Sub
Я сам - дурнее всякого примера! ...
 
Цитата
karabelena написал:
Ведь должна же быть функция в excel, предусматривающая удаление этой проблемы?
Нет. Самое оптимальное - это не копировать так, чтобы копировалось то, чего копировать не надо. Excel сам по себе не понимает, какие стрелки Вам нужны и были скопированы ошибочно, а какие надо удалить.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
karabelena написал: Рисую схему - схема состоит из стрелок и прямоугольников - больше ничего...
И с какого боку здесь XL?! Мо быть лучше в Visio поупражняться?.. ;)
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Чтобы удалить только стрелки
Код
Sub DeleteLines()
  ActiveSheet.Lines.Delete
End Sub

Прямоугольники останутся.
Хотя, наверное, правильнее было бы удалять только наложенные дубли стрелок и прямоугольников, но для этого нужен пример, так как могут быть нюансы.
 
Написал код, который на активном листе удалит дубликаты стрелок  и прямоугольников, а также прямоугольники с нулевой высотой или шириной
Код
Sub DelExtraLinesAndRects()
'ZVI:2016-09-05 http://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&TID=81585&MID=681866
'Удаление дубликатов стрелок и прямоугольников на активном листе
'Удаляются также прямоугольники с нулевой высотой или шириной
  
  Dim Col As Collection
  Dim i As Long, k As String, lin As Line, rec As Rectangle

  On Error Resume Next
  
  ' Удаление дубликатов стрелок
  Application.StatusBar = "Удаление дубликатов стрелок..."
  Set Col = New Collection
  For Each lin In ActiveSheet.Lines
    With lin
      k = .Left & .Top & .Width & .Height
      Col.Add vbNullString, k
      If Err Then
        i = i + 1
        .Delete
        Err.Clear
        If i Mod 100 = 0 Then Application.StatusBar = "Удалено дубликатов стрелок: " & i
      End If
    End With
  Next
  Application.StatusBar = False
  If MsgBox("Удалено дубликатов стрелок: " & i _
            & vbLf & "Для удаления дубликатов прямоугольников нажмите OK", _
            vbOKCancel) <> vbOK Then Exit Sub

  'Удаление дубликатов и невидимых прямоугольников
  Application.StatusBar = "Удаление дубликатов и невидимых прямоугольников..."
  i = 0
  Set Col = New Collection
  For Each rec In ActiveSheet.Rectangles
    With rec
      k = .Left & .Top & .Width & .Height
      If .Width = 0 Or .Height = 0 Then
        Err.Raise 1
      Else
        Col.Add vbNullString, k
      End If
      If Err Then
        i = i + 1
        .Delete
        Err.Clear
        If i Mod 100 = 0 Then Application.StatusBar = "Удалено дубликатов и невидимых прямоугольников: " & i
      End If
    End With
  Next
  Application.StatusBar = False
  MsgBox "Удалено дубликатов и невидимых прямоугольников: " & i, vbOK
  
End Sub
Изменено: ZVI - 04.09.2016 21:20:24
 
Обновил код выше для удаления также и прямоугольников с нулевой высотой или шириной, который обычно "цепляются" при копировании из web-страниц или могут возникать при изменении высоты строк или ширины столбцов.
 
Можно обойтись и без макросов. Выделить один из объектов--появится вкладка "Средства рисования"--найти и нажать "Область выделения"--Ctrl+A выделяем все-- Ctrl+ЛКМ(левая кнопка мыши) выделяем выборочно -- Delete.
Страницы: 1
Читают тему
Наверх