Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

348

Часть III. Visual Basic for Applications

For i

= 1 To NumAreas

Set

S e lA re a s (i) = S e le c tio n .A re a s (i)

Next

 

'Определение верхней левой ячейки в множественном выделении

TopRow

 

= A c tiv e S h e e t. Rows. Count

 

L e ftC o l

=

A c tiv e S h e e t. Colum ns. Count

 

F or i

=

1

To NumAreas

 

 

 

I f

S e lA re a s (i).R o w <

TopRow

Then

TopRow = S e lA re a s (i).R o w

I f

S e lA re a s (i).C o lu m n

< L e ftC o l

Then L e ftC o l = S elA reas _

N ext

(i).C o lu m n

 

 

 

 

 

 

 

L e ftC o l)

Set U p p e rL e ft = C ells(TopR ow ,

'Получить адрес вставки

On

E rro r Resume

N extS et PasteRange

= A p p lic a tio n . In p u tB o x

_

 

(P rom pt:= "Указание верхней левой ячейки для диапазона

_

 

в с т а в к и :",

T i t l e := "Копирование

множественного _

 

 

выделения

",

Т у р е :=8)

 

 

On

E rro r GoTo

О

 

 

 

1

Выход

после

отмены операции

 

 

 

I f

TypeName(PasteRange) <> "Range" Then E x it Sub

'

Убедитесь в

том, что используется только верхняя левая ячейка

 

Set

PasteRange

= PasteRange. Range( " A l")

1

Копирование

и

вставка каждой

области

 

For

i

= 1 То

NumAreas

 

TopRow

 

 

R ow O ffset

=

S e lA re a s (i).R o w -

 

 

C o lO ffs e t

=

S e lA r e a s ( i) . Column

- L e ftC o l

 

 

S e lA r e a s ( i) . Copy PasteRange. O ffs e t(R o w O ffs e t, C o lO ffs e t)

 

N ext

i

 

 

 

 

End

Sub

 

 

 

 

 

На рис. 11.11 показан запрос на выбор цели копирования.

 

 

 

Компакт-диск

 

 

 

 

 

На прилагаемом компакт-диске находятся рабочая книга с приведенным

 

 

 

выше примером, а также еще одна версия, которая отображает предупреж­

 

 

 

дение в случае опасности перезаписи данных. Соответствующий файл на­

 

 

 

зывается сору m u ltip le

s e le c tio n .x ls m .

Управление рабочими книгами и листами

Приводимые в этом разделе примеры демонстрируют различные способы использо­ вания VBА для управления рабочими книгами и листами.

Сохранение всех рабочих книг

Следующая процедура циклически просматривает все рабочие книги в коллекции W orkbooks и сохраняет каждый файл, который сохранялся ранее.

P u b lic

Sub

S a veA llW orkb oo ks()

Dim

Book

As Workbook

For

Each

Book In

Workbooks

 

I f B ook.P ath

<> "" Then Book.Save

Глава 11. Приемы и методы программирования на VBA

351

Если выделенный диапазон включает несвязанные диапазоны, первый оператор A rea применяется в качестве основы для сокрытия строк и столбцов.

Компакт-диск

Рабочая книга, включающая этот пример, находится на прилагаемом ком­ пакт-диске в файле h id e rows and colum ns.xlsm .

Синхронизация рабочих книг

Если вы работаете с рабочими книгами, состоящими из нескольких листов, то, веро­ ятно, знаете, что Excel не может “синхронизировать” листы в рабочей книге. Другими словами, не существует автоматического способа сделать так, чтобы все листы имели одинаковые выделенные диапазоны и верхние левые ячейки. Макрос VBA, показанный ниже, берет за основу активный рабочий лист и выполняет следующие действия со всеми остальными рабочими листами в книге:

выделяет тот же диапазон, что и в активном листе;

задает ту же левую верхнюю ячейку, что и на активном листе.

Ниже приведен листинг данного макроса.

Sub SynchSheets()

1

Дублирует

активны й

диапазон

и верхнюю левую

я чейку

'

активного

листа во

всех

рабочих

ли стах

 

 

I f TypeN am e(A ctiveS heet)

<>

"W orksheet" Then

E x it Sub

 

Dim UserSheet

As W orksheet,

s h t

As W orksheet

 

 

Dim TopRow

As

Long,

L e ftC o l

As

In te g e r

 

 

Dim U serS el As

S trin g

 

 

 

 

 

A p p lic a tio n .S c re e n U p d a tin g

= F alse

 

'Сохранение текущ его ли ста

Set UserSheet = A c tiv e S h e e t

'Сохранение информации из акти в н о го листа

TopRow

= A ctive W in d o w . S cro llR o w

L e ftC o l

=

A ctive W in d o w .S cro llC o lu m n

UserSel

=

A ctive W in d o w . R a n g e S e le ctio n .A d d re ss

'Просмотр рабочих листов

For Each s h t In A ctive W o rkb o o k . W orksheets

I f

s h t . V is ib le Then 'п р о п у с к

скрытых листов

 

s h t. A c tiv a te

 

 

 

 

R a n g e (U s e rS e l).S e le c t

=

TopRow

 

A ctive W in d o w .S cro llR o w

 

A ctive W in d o w .S cro llC o lu m n

= L e ftC o l

End I f

 

 

 

Next

s h t

 

 

 

1 Переход к первоначальной

позиции

U s e rS h e e t.A c tiv a te

=

True

A p p lic a tio n .S c re e n U p d a tin g

End Sub

Компакт-диск

Рабочая книга с рассмотренным выше примером находится на прилагаемом компакт-диске в файле sy n c h ro n iz e sheets .xlsm .