Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/макрос работает только когда все остальные книги закрыты - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 212»
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » макрос работает только когда все остальные книги закрыты (Макросы/Sub)
макрос работает только когда все остальные книги закрыты
fairylive Дата: Четверг, 24.03.2016, 15:24 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Помогите пожалуйста разобраться в основах.
Есть код часть которого я написал сам. Он работает. Вторая часть записана макросом. Отдельно она тоже работает. Я хотел запихать данный макрос в свой код. Но так он перестаёт работать. При этом обнаружил что, если закрыть другие книги - код начинает работать. Сейчас код с листа перенёс в module. Там и мой код и добавленный код макроса. Если открыт только этот файл то всё работает. Но стоит открыть другой файл. Вылетает ошибка. Run-time error '9': Subscript out of range.
 
Ответить
СообщениеПомогите пожалуйста разобраться в основах.
Есть код часть которого я написал сам. Он работает. Вторая часть записана макросом. Отдельно она тоже работает. Я хотел запихать данный макрос в свой код. Но так он перестаёт работать. При этом обнаружил что, если закрыть другие книги - код начинает работать. Сейчас код с листа перенёс в module. Там и мой код и добавленный код макроса. Если открыт только этот файл то всё работает. Но стоит открыть другой файл. Вылетает ошибка. Run-time error '9': Subscript out of range.

Автор - fairylive
Дата добавления - 24.03.2016 в 15:24
Апострофф Дата: Четверг, 24.03.2016, 15:31 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 26 ±
Замечаний: 0% ±

Excel 2003
fairylive, Вы полагаете наверно, что здесь обитают колдуны, которые с закрытыми глазами не видя пациента ставят диагнозы?
Но стоит открыть другой файл. Вылетает ошибка. Run-time error '9': Subscript out of range.
Ваш код обращается к листу с именем, которого нет во вновь открытой книге - одна из тыщщ причин этой ошибки.
Вскрытие покажет.
 
Ответить
Сообщениеfairylive, Вы полагаете наверно, что здесь обитают колдуны, которые с закрытыми глазами не видя пациента ставят диагнозы?
Но стоит открыть другой файл. Вылетает ошибка. Run-time error '9': Subscript out of range.
Ваш код обращается к листу с именем, которого нет во вновь открытой книге - одна из тыщщ причин этой ошибки.
Вскрытие покажет.

Автор - Апострофф
Дата добавления - 24.03.2016 в 15:31
fairylive Дата: Четверг, 24.03.2016, 15:38 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Апострофф, виноватс. Читая другие форумы понял что нужен пациент.

PS Просто думал что есть какое-то лекарство чтобы файлы не пересекались. Я пока только учусь.
К сообщению приложен файл: 3912033.xlsm(36Kb)


Сообщение отредактировал fairylive - Четверг, 24.03.2016, 15:41
 
Ответить
СообщениеАпострофф, виноватс. Читая другие форумы понял что нужен пациент.

PS Просто думал что есть какое-то лекарство чтобы файлы не пересекались. Я пока только учусь.

Автор - fairylive
Дата добавления - 24.03.2016 в 15:38
_Boroda_ Дата: Четверг, 24.03.2016, 15:52 | Сообщение № 4
Группа: Модераторы
Ранг: Экселист
Сообщений: 9377
Репутация: 3950 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Попробуйте заменить ActiveWorkbook на ThisWorkbook
(в код не вникал)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПопробуйте заменить ActiveWorkbook на ThisWorkbook
(в код не вникал)

Автор - _Boroda_
Дата добавления - 24.03.2016 в 15:52
Апострофф Дата: Четверг, 24.03.2016, 15:52 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 71
Репутация: 26 ±
Замечаний: 0% ±

Excel 2003
[vba]
Код
THISWORKBOOK.ACTIVATE
[/vba]вставьте в начало кода, который изначально должен работать внутри своей книги, а обращается к активной (последней открытой, в которой нет Sheets("Каркас")).
Звание колдуна надо оправдывать %)
 
Ответить
Сообщение[vba]
Код
THISWORKBOOK.ACTIVATE
[/vba]вставьте в начало кода, который изначально должен работать внутри своей книги, а обращается к активной (последней открытой, в которой нет Sheets("Каркас")).
Звание колдуна надо оправдывать %)

Автор - Апострофф
Дата добавления - 24.03.2016 в 15:52
fairylive Дата: Четверг, 24.03.2016, 15:58 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Цитата Апострофф, 24.03.2016 в 15:52, в сообщении № 5
[vba]
Код
THISWORKBOOK.ACTIVATE
[/vba] вставьте в начало кода, который изначально должен работать внутри своей книги,


Я в самом начале прописывал даже так:

[vba]
Код
with application.workbooks.item("имя файла").activate
весь мой код
end with
[/vba]

Но это не помогало. Сейчас попробую ваш совет.
 
Ответить
Сообщение
Цитата Апострофф, 24.03.2016 в 15:52, в сообщении № 5
[vba]
Код
THISWORKBOOK.ACTIVATE
[/vba] вставьте в начало кода, который изначально должен работать внутри своей книги,


Я в самом начале прописывал даже так:

[vba]
Код
with application.workbooks.item("имя файла").activate
весь мой код
end with
[/vba]

Но это не помогало. Сейчас попробую ваш совет.

Автор - fairylive
Дата добавления - 24.03.2016 в 15:58
fairylive Дата: Четверг, 24.03.2016, 16:04 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Апострофф, а где должен быть сам код? В module или в листе?

Сейчас попробовал добавить THISWORKBOOK.ACTIVATE затем добавил записанный код макроса. При этом все другие файлы закрыты. Код находится в листе. (в том файле что я выложил я код перенёс в модуль). Вылетает другая ошибка

Run-time error '1004':
Application-defined or object-defined error.

При этом жёлтым ошибка не выделяется. Но если идти по шагам (F8) то спотыкается на том куске с которого начинается код записанного макроса
[vba]
Код
Columns("A:D").select
...
[/vba]
 
Ответить
СообщениеАпострофф, а где должен быть сам код? В module или в листе?

Сейчас попробовал добавить THISWORKBOOK.ACTIVATE затем добавил записанный код макроса. При этом все другие файлы закрыты. Код находится в листе. (в том файле что я выложил я код перенёс в модуль). Вылетает другая ошибка

Run-time error '1004':
Application-defined or object-defined error.

При этом жёлтым ошибка не выделяется. Но если идти по шагам (F8) то спотыкается на том куске с которого начинается код записанного макроса
[vba]
Код
Columns("A:D").select
...
[/vba]

Автор - fairylive
Дата добавления - 24.03.2016 в 16:04
fairylive Дата: Четверг, 24.03.2016, 16:08 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Апострофф, а где должен быть сам код? В module или в листе?


Сам спросил. Сам ответил. Кажется я понял где он должен быть. Вставил код в окно Эта книга. Работает! Проверил с другими открытыми книгами - работает. Всем спасибо! Немного разобрался)))
 
Ответить
Сообщение
Апострофф, а где должен быть сам код? В module или в листе?


Сам спросил. Сам ответил. Кажется я понял где он должен быть. Вставил код в окно Эта книга. Работает! Проверил с другими открытыми книгами - работает. Всем спасибо! Немного разобрался)))

Автор - fairylive
Дата добавления - 24.03.2016 в 16:08
_Boroda_ Дата: Четверг, 24.03.2016, 16:13 | Сообщение № 9
Группа: Модераторы
Ранг: Экселист
Сообщений: 9377
Репутация: 3950 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Селект работает только на активном листе. Если код макроса находится в модуле листа, то Columns("A:D") относится к тому листу, в котором находится код, а если в этот момент активен другой лист, то будет ошибка.


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеСелект работает только на активном листе. Если код макроса находится в модуле листа, то Columns("A:D") относится к тому листу, в котором находится код, а если в этот момент активен другой лист, то будет ошибка.

Автор - _Boroda_
Дата добавления - 24.03.2016 в 16:13
Manyasha Дата: Четверг, 24.03.2016, 16:16 | Сообщение № 10
Группа: Модераторы
Ранг: Старожил
Сообщений: 1589
Репутация: 669 ±
Замечаний: 0% ±

Excel 2007, 2010
fairylive, верните код в модуль, так правильней!
Поправила немного макрос:
добавила [vba]
Код
Set wb = ThisWorkbook
[/vba]
и везде обращалась к wb, все селекты Ваши убрала, можно без них. И сортировку посмотрите, добавилось определение последней строчки на листа каркас.
К сообщению приложен файл: 3912033-1.xlsm(36Kb)


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеfairylive, верните код в модуль, так правильней!
Поправила немного макрос:
добавила [vba]
Код
Set wb = ThisWorkbook
[/vba]
и везде обращалась к wb, все селекты Ваши убрала, можно без них. И сортировку посмотрите, добавилось определение последней строчки на листа каркас.

Автор - Manyasha
Дата добавления - 24.03.2016 в 16:16
fairylive Дата: Четверг, 24.03.2016, 16:22 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
все селекты Ваши убрала, можно без них.

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

Да да я знаю. Причёсывал в другом коде такие макросы. Но там какой-то один select не убрался у меня. Видимо поэтому ошибка и оставалась. Потом я решил ничего не причёсывать.

Автор - fairylive
Дата добавления - 24.03.2016 в 16:22
fairylive Дата: Четверг, 24.03.2016, 16:28 | Сообщение № 12
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Селект работает только на активном листе. Если код макроса находится в модуле листа, то Columns("A:D") относится к тому листу, в котором находится код, а если в этот момент активен другой лист, то будет ошибка.

Спасибо! Вот они основы основ про которые я не знал.

И сортировку посмотрите, добавилось определение последней строчки на листа каркас.


Вроде у меня такое же количество строк выводится. 22.
[moder]Ну а вдруг больше выведется? Или такого не может быть?[/moder]


Сообщение отредактировал Manyasha - Четверг, 24.03.2016, 16:34
 
Ответить
Сообщение
Селект работает только на активном листе. Если код макроса находится в модуле листа, то Columns("A:D") относится к тому листу, в котором находится код, а если в этот момент активен другой лист, то будет ошибка.

Спасибо! Вот они основы основ про которые я не знал.

И сортировку посмотрите, добавилось определение последней строчки на листа каркас.


Вроде у меня такое же количество строк выводится. 22.
[moder]Ну а вдруг больше выведется? Или такого не может быть?[/moder]

Автор - fairylive
Дата добавления - 24.03.2016 в 16:28
fairylive Дата: Четверг, 24.03.2016, 16:45 | Сообщение № 13
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016


Вроде у меня такое же количество строк выводится. 22.
[moder]Ну а вдруг больше выведется? Или такого не может быть?[/moder]fairylive


Аааа понял о чём вы))) Я тоже был удивлён что макрос записал определённые ячейки сортировки. Спасибо!

И видимо последний вопрос - зачем надо вот это

[vba]
Код
With Application: .DisplayAlerts = False: .ScreenUpdating = False: End With
[/vba]
 
Ответить
Сообщение


Вроде у меня такое же количество строк выводится. 22.
[moder]Ну а вдруг больше выведется? Или такого не может быть?[/moder]fairylive


Аааа понял о чём вы))) Я тоже был удивлён что макрос записал определённые ячейки сортировки. Спасибо!

И видимо последний вопрос - зачем надо вот это

[vba]
Код
With Application: .DisplayAlerts = False: .ScreenUpdating = False: End With
[/vba]

Автор - fairylive
Дата добавления - 24.03.2016 в 16:45
fairylive Дата: Четверг, 24.03.2016, 17:06 | Сообщение № 14
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Manyasha, ещё раз сравнил построчно коды. Теперь всё понятно стало! Зачем нужен этот DisplayAlerts)))
Ещё раз спасибо!
 
Ответить
СообщениеManyasha, ещё раз сравнил построчно коды. Теперь всё понятно стало! Зачем нужен этот DisplayAlerts)))
Ещё раз спасибо!

Автор - fairylive
Дата добавления - 24.03.2016 в 17:06
StoTisteg Дата: Четверг, 24.03.2016, 22:23 | Сообщение № 15
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
fairylive, поскольку я чайником был не так давно, как все эти зубры выше и не успел ещё позабыть все грабли, попробую объяснить популярно.
1) Select(ed) есть абсолютное зло, которого следует избегать. Он не даёт ничего, кроме скачков выделения. VBA прекрасно работает без выделения. То есть
[vba]
Код
    Range("A1").Select
    Selected.Value = "Это ячейка"
[/vba]
абсолютно тождественно
[vba]
Код
    Range("A1").Value = "Это ячейка"
[/vba]

[vba]
Код
Worksheets(1)
[/vba]
всегда относится к активной книге, если хотим описать лист неактивной —
[vba]
Код
Workbooks("Имя_книги").Worksheets(1)
[/vba]

[vba]
Код
Range("A1")
[/vba] относится к активному листу активной книги, иначе
[vba]
Код
Workbooks("Имя_книги").Worksheets(1).Range("A1")
[/vba](если не уверены в активности книги) или
[vba]
Код
Worksheets(1).Range("A1")
[/vba], если книга точно активна, а лист — неизвестно.
зачем надо вот это

Это приёмы ускорения работы кода. Отключает запросы типа "Вы уверены, что хотите закрыть книгу без сохранения" и вывод на экран изменений.


Проверь всё. ThisWorkbook.Save. On Error Resume Next.
 
Ответить
Сообщениеfairylive, поскольку я чайником был не так давно, как все эти зубры выше и не успел ещё позабыть все грабли, попробую объяснить популярно.
1) Select(ed) есть абсолютное зло, которого следует избегать. Он не даёт ничего, кроме скачков выделения. VBA прекрасно работает без выделения. То есть
[vba]
Код
    Range("A1").Select
    Selected.Value = "Это ячейка"
[/vba]
абсолютно тождественно
[vba]
Код
    Range("A1").Value = "Это ячейка"
[/vba]

[vba]
Код
Worksheets(1)
[/vba]
всегда относится к активной книге, если хотим описать лист неактивной —
[vba]
Код
Workbooks("Имя_книги").Worksheets(1)
[/vba]

[vba]
Код
Range("A1")
[/vba] относится к активному листу активной книги, иначе
[vba]
Код
Workbooks("Имя_книги").Worksheets(1).Range("A1")
[/vba](если не уверены в активности книги) или
[vba]
Код
Worksheets(1).Range("A1")
[/vba], если книга точно активна, а лист — неизвестно.
зачем надо вот это

Это приёмы ускорения работы кода. Отключает запросы типа "Вы уверены, что хотите закрыть книгу без сохранения" и вывод на экран изменений.

Автор - StoTisteg
Дата добавления - 24.03.2016 в 22:23
fairylive Дата: Пятница, 25.03.2016, 11:36 | Сообщение № 16
Группа: Пользователи
Ранг: Участник
Сообщений: 87
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
StoTisteg, Спасибо! Но возникает нубский вопрос, а что значит активно не активно? Мне надо чтобы код работал независимо от того на каком листе я открываю файл и независимо от того открыты другие файлы или нет. От куда мне знать должны ли те ячейки, диапазоны, листы быть в коде активными или нет? Или если код с ними что-то делает то получается обязаны быть активными?
 
Ответить
СообщениеStoTisteg, Спасибо! Но возникает нубский вопрос, а что значит активно не активно? Мне надо чтобы код работал независимо от того на каком листе я открываю файл и независимо от того открыты другие файлы или нет. От куда мне знать должны ли те ячейки, диапазоны, листы быть в коде активными или нет? Или если код с ними что-то делает то получается обязаны быть активными?

Автор - fairylive
Дата добавления - 25.03.2016 в 11:36
RAN Дата: Пятница, 25.03.2016, 11:43 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4277
Репутация: 829 ±
Замечаний: 0% ±

2010
Но возникает нубский вопрос,

Воистину! :D
Активный лист - тот, в котором стоит курсор. Активная книга - та, где этот лист живет.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Но возникает нубский вопрос,

Воистину! :D
Активный лист - тот, в котором стоит курсор. Активная книга - та, где этот лист живет.

Автор - RAN
Дата добавления - 25.03.2016 в 11:43
StoTisteg Дата: Пятница, 25.03.2016, 20:59 | Сообщение № 18
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
Но возникает нубский вопрос, а что значит активно не активно?

Это просто фокус внимания. Объясняю популярно. Представьте себе, что Вы ведёте семинар в группе студентов. Это вся совокупность книг. Если Вы вызвали к доске студента Васю Пупкина и беседуете с ним, Вы можете обращаться к нему "студент Пупкин" (Workbooks("Пупкин")), если Вы на него сердиты (то есть не уверены, что он у доски). Можете обращаться на "ты" (ActiveWorkbook), будто Вам всё равно, кто у доски. Когда Вы хотите обсудить с ним его домашку, Вы вообще не употребляете апеллятивов — "это что тут вообще за хрень понаписана?" Это Worksheets("Домашка"). Или "что значат вот эти вот буквы вот в этой домашке?" — это Range("A1:B2").
А когда Вы хотите поговорить не с Васей Пупкиным, стоящим у доски, а с сидящим Пусей Вапкиным, Вы вынуждены либо сказать "студент Вапкин, подойдите" (это будет Workbooks("Вапкин").Activate), либо всё время говорить "вот, Пупкин, а Вапкин в своей третьей домашке эту формулу написал правильно", то есть Workbooks("Вапкин").Worksheets(3).Range("A1:B2").
И имейте в виду, что к студентам относится запрет Паули — как только Вы вызвали Пусю Вапкина, Вася Пупкин тут же сел на место. И выяснить, на какое именно не проще, чем решить уравнение Шрёдингера :D


Проверь всё. ThisWorkbook.Save. On Error Resume Next.

Сообщение отредактировал StoTisteg - Пятница, 25.03.2016, 22:04
 
Ответить
Сообщение
Но возникает нубский вопрос, а что значит активно не активно?

Это просто фокус внимания. Объясняю популярно. Представьте себе, что Вы ведёте семинар в группе студентов. Это вся совокупность книг. Если Вы вызвали к доске студента Васю Пупкина и беседуете с ним, Вы можете обращаться к нему "студент Пупкин" (Workbooks("Пупкин")), если Вы на него сердиты (то есть не уверены, что он у доски). Можете обращаться на "ты" (ActiveWorkbook), будто Вам всё равно, кто у доски. Когда Вы хотите обсудить с ним его домашку, Вы вообще не употребляете апеллятивов — "это что тут вообще за хрень понаписана?" Это Worksheets("Домашка"). Или "что значат вот эти вот буквы вот в этой домашке?" — это Range("A1:B2").
А когда Вы хотите поговорить не с Васей Пупкиным, стоящим у доски, а с сидящим Пусей Вапкиным, Вы вынуждены либо сказать "студент Вапкин, подойдите" (это будет Workbooks("Вапкин").Activate), либо всё время говорить "вот, Пупкин, а Вапкин в своей третьей домашке эту формулу написал правильно", то есть Workbooks("Вапкин").Worksheets(3).Range("A1:B2").
И имейте в виду, что к студентам относится запрет Паули — как только Вы вызвали Пусю Вапкина, Вася Пупкин тут же сел на место. И выяснить, на какое именно не проще, чем решить уравнение Шрёдингера :D

Автор - StoTisteg
Дата добавления - 25.03.2016 в 20:59
Hugo Дата: Пятница, 25.03.2016, 21:27 | Сообщение № 19
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2653
Репутация: 597 ±
Замечаний: 0% ±

Worksheets(1)

всегда относится к активной книге
- не всегда.
Бывает что некоторые начинающие помещают код в модуль книги :)
И соответственно читайте и вникайте в Сообщение № 9, только с поправкой на книгу.


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069
 
Ответить
Сообщение
Worksheets(1)

всегда относится к активной книге
- не всегда.
Бывает что некоторые начинающие помещают код в модуль книги :)
И соответственно читайте и вникайте в Сообщение № 9, только с поправкой на книгу.

Автор - Hugo
Дата добавления - 25.03.2016 в 21:27
StoTisteg Дата: Пятница, 25.03.2016, 21:36 | Сообщение № 20
Группа: Авторы
Ранг: Ветеран
Сообщений: 541
Репутация: 45 ±
Замечаний: 0% ±

Excel 2010
Вариантов можно придумать до фига. Понятное дело, что если особо одарённый преподаватель затеет переписку с Васей Пупкиным из 101 группы в лабораторном журнале Пуси Вапкина из 102, то Пуся нифига не поймёт, а до Васи нифига не дойдёт :)


Проверь всё. ThisWorkbook.Save. On Error Resume Next.

Сообщение отредактировал StoTisteg - Пятница, 25.03.2016, 21:39
 
Ответить
СообщениеВариантов можно придумать до фига. Понятное дело, что если особо одарённый преподаватель затеет переписку с Васей Пупкиным из 101 группы в лабораторном журнале Пуси Вапкина из 102, то Пуся нифига не поймёт, а до Васи нифига не дойдёт :)

Автор - StoTisteg
Дата добавления - 25.03.2016 в 21:36
Мир MS Excel » Вопросы и решения » Вопросы по VBA » макрос работает только когда все остальные книги закрыты (Макросы/Sub)
Страница 1 из 212»
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!