Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Diagrammy_v_Excel_Dzhon_Uokenbakh_2003

.pdf
Скачиваний:
31
Добавлен:
26.03.2016
Размер:
33.34 Mб
Скачать

Y J ; '1 Оормануованис Дим-раммы

Svib ФорнатировакиеДиаграммы () ' ForroatChart Macro

' Macro recorded by John Walkenbach

Act iveChart.PlotArea.Seleet Uith Selection . Interior

•ColorIndex » 2

.Pattern « xlSolid End With

ActiveChart.SeriesCollection(l).Select . Uith Selection.Interior

.ColorIndex - 3

.Pattern » XlSolid End Uith

ActiveChart.Axes(xlValue).HajorGridlines.Select With Selection.Border

.ColorIndex " IS

.Ueight « xlHairline

.LineStyle » xlDot End Uith

bspi-t

Puc. 15.4. Код записанного нами макроса

Чтобы протестировать макрос, создайте еще одну диаграмму на основе этих же данных (или скопируйте исходную диаграмму), активизируйте ее и нажмите клавиши <Alt+F8>, Появится диалоговое окно Макрос. Выделите макрос ФорматированиеДиаграммы и щелкните на кнопке Выполнить. Все записанные операции форматирования будут немедленно применены к выделенной диаграмме.

Далее в главе рассматриваются еще некоторые способы запуска макросов.

Исправление записанного макроса

Немного поработав с макросами, вы убедитесь, что макрос, сгенерированный с помощью инструмента записи, почти всегда нуждается в дополнительной правке. На­ пример, макрос может содержать посторонние команды, которые можно удалить. В макрос можно также добавить код проверки ошибок.

УДАЛЕНИЕ ВЫДЕЛЕНИЙ

Важно понимать, что инструмент записи макросов генерирует далеко не самый эф­ фективный код. Проанализировав сгенерированный код, вы увидите, что Excel записы­ вает выделение, а затем использует общий объект Selection в последующих операто­ рах. Ниже приведен фрагмент кода макроса, описанного в предыдущем разделе.

ActiveChart.PlotArea.Select With Selection.Interior

•Colorlndex = 2

.Pattern = XlSolid

End With

Выделять в макросе область построения (объект PlotArea) совсем не обязательно. Чтобы изменить в коде макроса свойства любого объекта, вьщелять его нет никакой необходимости. Вьщеление объекта может даже замедлить выполнение макроса. Тем не менее инструмент записи послушно повторяет все действия, которые выполняются с помощью мыши и клавиатуры. Следовательно, пять операторов, приведенных в предыдущем фрагменте кода, можно записать так:

390

Часть III. Использование VBA

With ActiveChart.PlotArea.Interior

.Colorlndex = 2

.Pattern = xlSolid

End With

ИСПОЛЬЗОВАНИЕ КОНСТРУКЦИИ WITH-END WITH

При использовании инструмента записи в код довольно часто помещается конст­ рукция With-End With. В предьщущем фрагменте кода с помощью этой конструкции обрабатывается объект i n t e r i o r , входящий в объект PlotArea. Конкретнее, код из­ меняет свойства Colorlndex и Pattern объекта I n t e r i o r .

Эквивалентный код можно записать без использования конструкции With-End With, заменив таким образом четыре оператора двумя.

ActiveChart.PlotArea.Interior.Colorlndex = 2

ActiveChart.PlotArea.Interior.Pattern = xlSolid

Естественно, если требуется изменить не два, а много свойств, использование опе­ ратора With-End With вполне оправданно.

Свойству Pattern присваивается встроенная константа x l S o l i d , имеющая значение 1. Использование встроенных констант можно оправдать лишь их большей наглядностью: Solid переводится с английского, как "сплошная (заливка)". Запомнить это несложно. В то же время запомнить номера много­ численных значений свойств практически невозможно.

ДОБАВЛЕНИЕ КОДА ОБРАБОТКИ ОШИБОК

Поработав с макросом ФорматированиеДиаграммы, вы обнаружите, что в некото­ рых ситуациях он генерирует ошибки. В частности, сообщение об ошибке генерирует­ ся, если диаграмма неактивна или не имеет легенды.

Ниже приведен код макроса, исправленный вручную. Теперь он называется ФорматированиеДиаграммы2. В НОВОМ макросе объекты не выделяются. Кроме того, до­ бавлены средства предотвращения ошибок и комментарии.

Sub ФорматированиеДиаграммы2()

'Завершение макроса, если диаграмма неактивна

If ActiveChart Is Nothing Then Exit Sub

'Заливка области построения белым цветом With ActiveChart.PlotArea.Interior

.Colorlndex = 2

.Pattern = xlSolid End With

'Заливка столбиков красным цветом

With ActiveChart.SeriesCollection(l).Interior

.Colorlndex = 3

.Pattern = xlSolid

End With

'Установка пунктирных линий сетки

With ActiveChart.Axes(xlValue).MajorGridlines.Border

.Colorlndex = 15

.Weight = xlHairline

.LineStyle = xlDot

End With

'Если есть легенда, то ее удаление

If ActiveChart.HasLegend Then ActiveChart.Legend.Delete

End Sub

Глава 15. Объекты, коллекции, свойства и методы

391

Конечно, чтобы исправлять коды макросов, нужно хорошо знать VBA. Сейчас вы должны только понимать, что коды макросов, сгенерированные с помощью инстру­ мента записи, далеко не самые эффективные. Тем не менее инструмент записи будет для вас великолепным средством изучения объектов, свойств и методов.

Наблюдение за работой инструмента записи

Инструмент записи преобразует действия с мышью и клавиатурой в код VBA. Я мог бы написать много страниц о том, как это делается, однако лучший способ уз­ нать нечто •— сделать самому. Выполните ряд действий.

1.Откройте рабочую книгу Pici5_03.xls (или любую другую рабочую книгу с диаграммой).

2.Убедитесь, что окно Excel не максимизировано. Оно не должно заполнять весь экран.

3.Нажав клавиши <Alt+Fll>, активизируйте окно редактора Visual Basic. Оно также не должно быть максимизировано.

4.Переместите окна Excel и редактора Visual Basic таким образом, чтобы они оба были видимы. Минимизируйте окна всех других приложений.

5.Активизируйте Excel, выберите команду Сервис'=>Макрос==>Начать запись и щелкните на кнопке ОК. Теперь Excel находится в режиме записи макроса. При этом в рабочую книгу вставляется новый модуль Modulel.

6.Активизируйте окно редактора Visual Basic.

7.В окне проектов дважды щелкните на имени Modulel. Появится окно кода модуля.

8.Максимизируйте окно кода в редакторе Visual Basic, чтобы код был лучше виден.

Экран должен выглядеть, как показано на рис. 15.5. Размеры окон зависят от раз­ решения экрана.

уЩ^1»'^ '^^ ymt f^m> S0M ^ ^ 1^ ^ 0 ^

" ^

|Ма1фос1

-3

 

Sub Макрос!о

 

 

• Макрос! Макрос

 

 

' Макрос записан 07.04.2003 (а!)

 

Windows("Р ic!5_05.х is").SmalIScro11 ToRigh

Act iveChart.Legend.Select

 

Selection.Delete

 

 

ActiveChart.SeriesCollection (!).Select

 

With Selection.Border

 

.Weight « xlThin

 

•LineStyle » xlAutomatic

 

End With

" False

 

Selection.Shadow

 

Selection.. Invert IfNegative = False

With Selection.Interior

•ColorIndex « 7

.Pattern • xlSolid

End With

ActiveChart.Axes(Xlvalue).MajorGridlines.S

With Selection.Border

•ColorIndex « 57

.Weight - xlHairline

•LineStyle - xlDot

ШШWMM\

Jtgj ^»Йя 0P«ei(4. ^ , bCtjgfin^ «HjpQ^T' С@М»ИС

 

 

 

К 3

Область диа.

 

 

 

/ir:;:!:

ш

 

8

 

 

 

 

 

 

40 2941

W

 

 

Реп

 

 

 

 

30 462|

 

 

 

И)

 

30 8851

 

50 000 п

 

 

 

 

 

 

40 000-

 

 

 

 

30 000

 

 

 

20 000

 

 

 

 

10 000

 

III

 

 

 

0

щ' 2 3

• ....

bffjiJ

^

i i i i i a i i i i i

^'TBI

 

 

 

11ШШ11Ш|Ш

Рис. 15.5. Окна Excel и редактора Visual Basic можно расположить так, что на каждом шаге записи будет видно, какие операторы появляются в коде макроса

392

Часть III. Использование VBA

Теперь перейдите в рабочий лист и выполняйте какие-либо команды Excel, на­ пример форматируйте диаграмму, выделяйте ячейки, вводите данные, форматируйте ячейки, выбирайте команды меню, создавайте диаграммы и т.д. Вы увидите, как с ка­ ждым щелчком мыши или нажатием клавиши в коде макроса появляются новые опе­ раторы, отображающие выполненное вами действие.

Персональная рабочая книга макросов

Если какой-либо макрос VBA (созданный вами или скопированный откуда-либо) покажет­ ся вам особенно полезным, то вы непременно захотите сохранить его. Для хранения мак­ росов в Excel предусмотрено специальное место — файл Personal.xls, расположенный в каталоге XLstart. Рабочая книга Personal.xls загружается при каждом запуске Excel. Она скрыта, тем не менее всегда под рукой. Перед записью макроса можно установить режим его одновременной записи в рабочую книгу Personal.xls. Файла Personal.xls не существует, пока в него не записан хотя бы один макрос.

Параметры записи

Как вы помните, при выборе команды Сервис'=>Макрос'=5^Начать запись появляется диалоговое окно Запись макроса. В нем можно установить параметры записи, описы­ ваемые в следующих разделах.

ИМЯ МАКРОСА

В поле Имя макроса можно задать имя записываемой процедуры. По умолчанию Excel устанавливает имена Макрос!, Макрос2 и т.д. Я предпочитаю оставлять имена по умолчанию, а затем изменять их при необходимости. Возможно, вам больше по­ нравится сразу задавать описательные имена. Выбор за вами.

КЛАВИШИ БЫСТРОГО ВЫЗОВА

Макрос можно быстро запустить путем нажатия клавиш, задаваемых в поле Сочетание клавиш. Например, если ввести в этом поле букву w (в нижнем регистре), то макрос мож­ но запускать путем нажатия клавиш <CtrH-W>. Если буква была введена в верхнем регист­ ре (W), то макрос запускается при нажатии клавиш <Ctrl-+-Shift+W>. Добавить или изме­ нить комбинацию клавиш быстрого вызова можно в любое время, поэтому устанавливать этот параметр перед записью макроса совсем не обязательно.

МЕСТОНАХОЖДЕНИЕ МАКРОСА

В поле со списком Сохранить в можно задать, где будет сохранен записываемый макрос. По умолчанию Excel помещает макрос в модуль активной рабочей книги. Ес­ ли хотите, можете поместить его в новую рабочую книгу (Excel немедленно создаст ее) или в файл Personal . xls .

ОПИСАНИЕ

По умолчанию Excel записывает в макрос пять строк комментариев (три из них пус­ тые), в которых указывает имя макроса, имя пользователя и дату его создания. Вы можете ввести в текстовую область Описание любой текст, можете также ничего не вводить.

Выполнение макроса

в этом разделе рассматривается несколько способов выполнения макросов.

Использование окна Макрос

с помощью команды Сервис'=>Макрос'=М\/1акросы (или клавиш <Alt+F8>) выводится диалоговое окно Макрос, в котором перечислены доступные макросы. Чтобы выпол­ нить макрос, выделите его в списке и щелкните на клавише Выполнить.

Глава 15. Объекты, коллекции, свойства и методы

3 9 3

Клавиши быстрого вызова

Как описано выше, перед записью в диалоговом ок­ не Запись макроса можно задать комбинацию клавиш быстрого вызова, ассоциированную с макросом. Задать комбинацию клавиш можно также для существующего макроса. Для этого выполните следующее.

1.Выберите команду Сервис'=>Макрос'=с> Макросы (или нажмите клавиши <Alt-l-F8>). Появится диалоговое окно Макрос.

2.Выберите в списке нужный макрос.

3.Щелкните на кнопке Параметры; появится диалоговое окно Параметры макроса (рис. 15.6).

ilfl'Hilili-niiHi'ltf

Макрос записан 07.04.2003 (а1)

Вис. 15.6. С помощью диалогового окна Параметры макроса можно задать или изменить комбинацию клавиш быстрого вызова

4. Задайте клавишу быстрого вызова макроса (букву в нижнем или верхнем регистре).

Создание кнопки макроса

Если вы часто используете некоторый макрос во многих рабочих книгах, то може­ те создать для него на панели управления персональную кнопку. Сначала сохраните макрос в рабочей книге Personal . xls, чтобы он был доступен в любой рабочей книге. Затем выполните ряд действий.

1.Выберите команду Вид«=> Панель инструментов^Настройка; появится диалоговое окно Настройка.

2.Активизируйте вкладку Панели инструментов и убедитесь, что панель, на кото­ рой будет расположена новая кнопка, видима. Или щелкните на кнопке Соз­ дать, чтобы создать новую панель инструментов.

3.Активизируйте вкладку Команды.

4.Выделите категорию Макросы.

5.Перетащите пиктограмму Настраиваемая кнопка из области Команды на панель инструментов.

6.Щелкните правой кнопкой мыши на кнопке, расположенной на панели инст­ рументов, и выберите во всплывшем меню команду Назначить макрос. Появится диалоговое окно Назначить макрос.

7.Выделите в списке имя макроса и щелкните на кнопке ОК.

8.На этом этапе вы можете, щелкнув еще раз правой кнопкой мыши на кнопке, рас­ положенной на панели инструментов, изменить имя макроса и рисунок кнопки.

9.Щелкните на кнопке Закрыть.

Назначение макроса объекту

Со многими объектами, вставляемыми в рабочий лист, можно ассоциировать мак­ рос. Например, с панели инструментов Формы можно добавить в рабочий лист объект Кнопка и с ее помощью запускать макрос. Макрос можно ассоциировать также с ав­ тофигурой или даже с объектом ChartObject.

После добавления элемента управления или автофигуры щелкните правой кнопкой мыши на объекте и выберите команду Назначить макрос. Появится диалоговое окно Назначить макрос объекту. Вьщелите в списке нужный макрос и щелкните на кнопке ОК.

В момент добавления объекта Кнопка из панели управления Формы диалого­ вое окно Назначить макрос о^ьелту выводится автоматически.

394

Часть Ш. Использование VBA

Глава 16

Использование VBA

вдиаграммах

Вэтой главе...

Активизация диаграммы

395

Определение контекста макроса

396

Идентификация вьщеленного объекта

398

Перечисление диаграмм

398

Удаление диаграмм

400

Печать всех внедренных диаграмм

401

Примеры форматирования и настройки

401

Создание диаграмм в коде VBA

408

• Изменение размеров и выравнивание диаграмм

412

Задание подписей данных

413

Экспорт диаграмм как файлов GIF

415

Выяснение диапазонов, используемых диаграммой

418

Защита диаграмм

419

Прокручиваемая диаграмма

421

Примеры обработки событий

422

В главе представлены многочисленные примеры макросов, управляющих диаграм­ мами и параметрами диаграмм. Примеры демонстрируют принципы работы с объек­ тами, входящими в диаграммы. Некоторые макросы можно использовать в практиче­ ских задачах в том виде, в каком они приведены в рабочих книгах примеров, а неко­ торые потребуют небольших изменений.

Активизация диаграммы

Щелчок на внедренной диаграмме активизирует ее. Код VBA может активизиро­ вать внедренную диаграмму с помощью метода Activate. Оператор, активизирую­ щий первую внедренную диаграмму активного листа, выглядит так:

ActiveSheet.ChartObjects(1).Activate

Обратите внимание: метод Activate применяется к объекту Chartobject, а не к объ­ екту Chart, входящему в Chartobject. Приведенный ниже оператор генерирует ошибку.

ActiveSheet.ChartObjects(1).Chart.Activate 'Неправильно!

Однако если диаграмма расположена в листе диаграмм, то метод Activate приме­ няется к объекту Chart. Приведенный ниже оператор активизирует диаграмму пер­ вого листа диаграмм активной рабочей книги.

АсtiveWorkbook.Charts(1).Activate

Когда диаграмма активизирована, к ней можно обратиться с помощью свойства ActiveChart, возвращающего объект Chart. Например, приведенный ниже оператор выводит имя активной диаграммы. Если никакая диаграмма не активна, оператор ге­ нерирует сообщение об ошибке.

MsgBox ActiveChart.Name

Если для создания макроса, связанного с диаграммой, использовался инструмент записи, то записанный код всегда активизирует диаграмму, а затем вьщеляет обраба­ тываемые объекты. Однако для изменения диаграммы с помощью кода VBA активи­ зировать ее или что-либо выделять не обязательно. Обычно код более эффективен, если он не активизирует диаграмму и не выделяет элементы.

Ниже приведены две процедуры, приводящие к одинаковым результатам (они изменяют тип внедренной диаграммы Д1 на тип диаграммы с областями). Первая процедура перед выполнением операции активизирует диаграмму, а вторая не ак­ тивизирует.

Sub Изменение!О

ActiveSheet.ChartObjects("Д1").Activate ActiveChart.Type = .dArea

ActiveChart.Deselect End Sub

Sub Изменение2()

ActiveSheet.ChartObjects("Д1").Chart.Type = xlArea End Sub

Процедура Изменение! использует для снятия активизации диаграммы метод Deselect. Эта операция аналогична нажатию клавиши <Esc> в момент, когда диа­ грамма активизирована. Небольшое отличие состоит в том, что выделенная до этого ячейка или диапазон рабочего листа при этом не вьщеляется.

Определение контекста макроса

Во многих случаях для выполнения макроса нужно, чтобы некоторый объект был выделен. Например, макрос может быть записан так, что диаграмма должна быть активной, или при записи должен быть выделен диапазон. Примеры этого раздела демонстрируют, как создать код, обеспечивающий выполнение макроса в правильном контексте.

Обеспечение активности диаграммы

Приведенный ниже простой макрос добавляет заголовок в активную диаграмму (текст заголовка находится в ячейке А1). Если в момент запуска макроса диаграмма неактивна, то будет выведено довольно загадочное сообщение об ошибке (рис. 16.1).

Sub

ДобавитьЗаголовок()

 

With

ActiveChart

 

 

.HasTitle = True

 

End

.ChartTitle.Text = Range("Al")

End

With

Sub

 

3 9 6

Часть Ш. Использование VBA

f^x^tmm

m

l^^3'

m*'

 

 

 

Рис. 16.1. Если диаграмма неактивна, вы­ водится это сообщение об ошибке

Чтобы ошибка не генерировалась (и макрос был более дружественным к пользова­ телю), добавим несколько строк кода. Они проверяют, существует ли активная диа­ грамма. Если активной диаграммы нет, то пользователь извещается об этом и проце­ дура завершается. Ниже приведена процедура ДобавитьЗаголовок с указанными из­ менениями.

Sub

ДобавитьЗаголовокО

 

If ActiveChart Is Nothing Then

 

MsgBox "Диаграмма должна быть выделена"

 

Exit Sub

 

End

If

 

With

ActiveChart

 

 

.HasTitle = True

 

End

. ChartTitle . Text = Range("Al")

End

With

Sub

 

Является ли активная диаграмма внедренной

Как вы знаете, диаграмма может принадлежать к одному из двух видов: внедрен­ ная или расположенная в листе диаграмм. В некоторых случаях макросу должно быть известно, к какому из этих видов относится диаграмма. Приведенный ниже макрос ВидВыделения ВЫВОДИТ одно из трех сообщений в зависимости от вида активной диаграммы или ее наличия.

Sub ВидВыделения()

If ActiveChart Is Nothing Then

MsgBox "Активной диаграммы нет"

Exit Sub

End If

If TypeName(ActiveChart.Parent) = "Workbook" Then MsgBox "Лист диаграмм"

Exit Sub

End If

If TypeName(ActiveChart.Parent) = "ChartObject" Then MsgBox "Внедренная диаграмма"

End If

End Sub

Сначала макрос ВидВьщеления проверяет, есть ли активная диаграмма. Если таковой нет, макрос выводит сообщение и завершается. Далее расположены два оператора If, в которых с помощью функции TypeName определяется тип родительского объекта активной

диаграммы. Объект chart

внедренной диаграммы входит в объект Chartobject.

Для

ChartObject родительским

объектом является рабочий лист, в который

внедрена

диа-

фамма. Родительским объектом листа диафамм является рабочая книга.

 

 

Глава 16. Использование VBA в диаграммах

 

397

Идентификация выделенного объекта

в приведенном ниже макросе ЧтоВыделено! функция TypeName используется для определения типа выделенного объекта. Например, если в момент запуска макроса выделен диапазон, то выводится сообщение Range, а если выделена область построе­ ния диаграммы, то сообщение PlotArea.

Sub ЧтоВыделено!О

MsgBox TypeName(Selection)

End Sub

Макрос работает великолепно, за исключением того случая, когда выделена вне­ дренная диаграмма, а макрос запускается щелчком на кнопке в листе. При этом кнопка временно получает фокус, активизация диаграммы снимается и выделенным остается лишь объект CharObject. В результате при вьщелении любого элемента диаграммы в окне сообщений выводится один и тот же текст — Chartobject.

Ниже приведена измененная версия макроса, работающая правильно независимо от способа запуска (рис. 16.2). Если выделен объект Chartobject, то макрос выделяет элемент диаграммы, который был активен до этого. Однако при этом возникает еще одна небольшая проблема: макрос не может определить, выделен ли объект Chartobject (если пользователь выделил объект, удерживая клавишу <Ctrl>, т.е. вы­ делил объект диаграммы, а не диаграмму).

Sub ЧтоВыделено2()

If ActiveChart Is Nothing Then

MsgBox TypeName(Selection)

Else

If TypeName(Selection) = "Chartobject" _

Then Selection.Activate MsgBox TypeName(Selection)

End If

End Sub

A„^ 1 : 8^

g I P [ 0

Пример диаграммы

ОсьХ

'^^^~~Щ^^Шш^^Ш1!^у^}.^/~ ~Ы^ 't\U

Рис. 16,2. В окне сообщений выводится тип выделенного объекта

Перечисление диаграмм

в этом разделе рассматриваются макросы, перечисляющие и обрабатывающие все диафаммы рабочего листа или рабочей книги.

398

Часть III. Использование VBA

Подсчет листов диаграмм

Для определения количества листов диаграмм, существующих в рабочей книге, ис­ пользуется свойство Count коллекции Charts. Приведенный ниже оператор выводит количество листов диаграмм в активной рабочей книге.

MsgBox ActiveWorkbook.Charts.Count

Подсчет внедренных диаграмм

Для подсчета количества внедренных диаграмм в некотором рабочем листе можно применить свойство Count коллекции ChartObjects. Ниже приведен оператор, вы­ водящий количество внедренных диаграмм листа Лист1 активной рабочей книги.

MsgBox ActiveWorkbook.Worksheets("Лист1").ChartObjects.Count

Перечисление всех диаграмм

Иногда возникает необходимость выполнить некоторую операцию над всеми су­ ществующими диаграммами, например если нужно создать макрос, изменяющий раз­ меры всех внедренных диаграмм или добавляющий текущую дату в заголовок каждой диаграммы. Приведенный ниже макрос перечисляет все внедренные диаграммы ак­ тивного рабочего листа и выводит список их имен.

Sub ПеречислОбъектовДиагрО Dim ChtObj As ChartObject Dim Msg As String

Msg = ""

For Each ChtObj In ActiveSheet.ChartObjects

Msg = Msg & ChtObj.Name & vbNewLine Next ChtObj

MsgBox Msg

End Sub

В макросе ПеречислОбъектовДиагр переменная Msg используется для хранения имен диаграмм, выводимых в окно сообщений. Идентификатор vbNewLine — это встроенная константа, добавляющая разрыв строк в пе­ ременную Msg.

Ниже приведена модифицированная версия предыду­ щего макроса — макрос ПеречислОбъектовДиагр2. В нем используется два цикла: в одном перечисляются все рабочие листы, а в другом, вложенном в первый, — вне­ дренные диаграммы. В результате выводится список всех внедренных диаграмм всех рабочих листов (рис. 16.3). Рабочая книга содержит семь внедренных диаграмм в трех рабочих листах.

Щ

,//'

[^,. 11истГ*Диетам»»*»:& ' ',

•' '^джетнмег1ред110смжи^Г|}едмду%ийлал

1 V ; / чсж^''":^

Рис. 16.3. Вывод списка имен всех внедренных диаграмм всех рабочих листов

Sub ПеречислОбъектовДиагр2()

Dim Wks As Worksheet

Dim

ChtObj As ChartObject

 

Dim

Msg As String

 

Msg = ""

 

For Each Wks In ActiveWorkbook.Worksheets

 

 

For Each ChtObj In Wks.ChartObjects

 

 

Msg = Msg & Wks.Name & " - " & ChtObj.Name & vbNewLine

 

 

Next ChtObj

 

Msg = Msg & vbNewLine

 

Next Wks

 

Глава 16. Использование VBA в диаграммах

399

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]