Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.09.2008, 09:57   #1
treiber
 
Регистрация: 03.09.2008
Сообщений: 6
По умолчанию Excel: Удаление графиков и картинок с листа

На листе имеется несколько картинок и графиков.
Можно ли каким-либо макросом удалить:
- все картинки и графики
- одновременнон все образовавшиеся пустые строки (занимаемые ранее этими картинками и графиками)?
treiber вне форума
Старый 03.09.2008, 10:09   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Удалить все объекты можно, например, так:
Код:
ActiveSheet.Shapes.SelectAll
    Selection.Delete
А откуда мы можем узнать, что строки, на которых находились эти объекты, пусты? Справа (слева) от них ничего нет?
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 03.09.2008, 10:41   #3
treiber
 
Регистрация: 03.09.2008
Сообщений: 6
По умолчанию

Я так полагаю, что перед уничтожением каждого объекта (картинки, графики) надо определить диапазон клеток (строки и столбцы), который занимает объект.
Если в строках данного диапазона "Пусто", значит в этих строках ничего нет и их можно уничтожить.
Иначе уничтожаются только пустые строки из диапазона, занимаемого объектом.
treiber вне форума
Старый 03.09.2008, 11:24   #4
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Так подойдет?
Код:
Sub Main()

    Dim Shp As Object, FirstR As Long, LastR As Long, a As Double, x As Double, i As Long
    Application.ScreenUpdating = False
    For Each Shp In ActiveSheet.Shapes
        Shp.Select
        With Selection
            FirstR = .TopLeftCell.Row: LastR = FirstR
            a = .ShapeRange.Height: x = 0
            Do
                x = x + Rows(LastR).RowHeight
                LastR = LastR + 1
            Loop While a > x
            .Delete
        End With
        For i = LastR To FirstR Step -1
            If Rows(i).Text = "" Then Rows(i).Delete
        Next
    Next
    
End Sub
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 04.09.2008 в 05:24.
SAS888 вне форума
Старый 04.09.2008, 12:24   #5
treiber
 
Регистрация: 03.09.2008
Сообщений: 6
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Так подойдет?
SAS888, Большое спасибо за VBA-код.
Все заработало, правда не сразу.
При запуске модуля вначале выдавалась ошибка "не определенная переменная объекта"
при выполнении строки
For Each Snp In ActivSheet.Shapes
а затем (после добавления вами строки Application.ScreenUpdating = False) - и на ней.

Но как оказалось, что эта ошибка присуща электронным таблицам в OpenOffice 4.2.1
Это уже у меня не первый случай в различиях и возможных проблемах при работе с электронными таблицами от Microsoft Excel при их использовании на OpenOffice.

Мне так кажется, что OpenOffice не понимает Objekt и Shapes.

На Microsoft Excel все идет нормально, а после введения вами строки
Application.ScreenUpdating = False
все стало намного быстрее удаляться и не мигает очередная удаляемая строка.
Итак проблема решена - спасибо.

Я не силен в VBA, и если можно - то несколько вопросов:

1. Правильно ли я понял:
-переменные FirstR и LastR - это переменные куда записываются найденные координаты 1-й и последней строки диапазона, занимаемого картинкой?
А каким образом вообще определяется размер картинки (высота на ширину) и соответственно требуемый для ее размещения диапазон клеток (строки и столбцы)
Можно ли картинку (зная ее размер), поместить в одну строку (одна клетка или несколько) - предварительно расширив строку / клетку до нужного размера ?

2. Между двумя командами присвоения используетсся двоеточие :
Означает ли это, что просто в одной строке использованы две команды присвоения
FirstR = .TopLeftCell.Row : LastR = FirstR

3. Некоторые команды начинаются с точки, например:
.TopLeftCell.Row
.ShapeRange.Height
.Delete
означает ли это, что какой-то префикс может опускаться как умолчание?

4. Команды могут формироваться из нескольких ключевых слов.
Где можно найти, например в помощи:
- что и с чем сочетается, например .TopLeftCell.Row - т.е. предложение состоит из несколькох ключевых слов:
верхняя - левая - ячейка . в текущей строке
- и что м/б опущено перед точкой, например перед .Delete / .ShapeRange.Hight ?
treiber вне форума
Старый 04.09.2008, 13:22   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

1. Адрес левого верхнего угла объекта на листе можно определить с помощью ActiveSheet.Shapes(1).TopLeftCell.A ddress. Соответственно номер строки: ActiveSheet.Shapes(1).TopLeftCell.R ow. Это и есть номер верхней строки, занимаемой объектом Shapes(1). Номер нижней строки я определяю так: организую цикл, в котором к высоте начальной строки прибавляю высоту следующей, до тех пор, пока эта величина не превысит высоту самого объекта. В каждом проходе цикла делается инкремент последней строки (LastR). По выходу из цикла переменная LastR будет содержать номер последней строки, занимаемой объектом Shaprs(1).
2. Знак ":" просто разделяет операторы, написанные в одной строке.
3 и 4. Команды, начинающиеся с точки - это использование метода With...End With. Везде, где между ними встречается точка, означает, что перед точкой то, что описано в With. (см. Help по VBA).
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить строку листа Excel при выполнении условия Gennady Microsoft Office Excel 14 18.12.2007 13:54
как перенести данные с листа excel в текстовой фаил? sergey34 Microsoft Office Excel 6 02.12.2007 22:59