Страница: 1 | 2 |
Вопрос: Excel. Макросы.
Добавлено: 04.12.06 17:50
Автор вопроса: HACKER
Никогда я не писал макросы, но тут вот попросили :)
1) посоветуйте почитать что-то такое, которое четко и внятно без воды объясняли стыковку басика и офиса. А то во всех доках что я видел, упор на изучения самого VB. Мне это не нужно.
2) Конкретная задача.
2.1) Cells (x,y) - это понятно, но это ведь для текущего (открытого листа)? А как обратится к листу в текущей книге, если лист не открытый? (Желательно без переключения на лист). т.е. находясь на листе А, я хочу получить значение из ячейки на листе Б.
2.2) Мне циклом перебирать все ячейки... точнее не все, а те которые нужно - которые заполнены. Вот как узнать до какой ячейки мне циклить? Как узнать кол-во не пустых ячеек?
2.3) Например есть макрос, фсмысле функция на VBA... Она берет значение из определенного столбца, че-то там считает и выводит в другой столбец. Как сделать чтобы макрос работал как бы постоянно? Ну т.е. вот тот столбец с которого берет значения мой макрос, тоже динамический... Что-то нажимается и значения исходного столбца меняются, или в ручную вводится значения в этот столбец, и нужно чтобы макрос сразу сработал. Типа запуск макроса по любому событию в книге.
Заранее спасибо.
Ответы
Всего ответов: 17
Номер ответа: 1
Автор ответа:
Василий
Вопросов: 8
Ответов: 27
Профиль | | #1
Добавлено: 04.12.06 18:04
Это шутка такая...)))
Шутку поняли.
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 04.12.06 18:05
та какая шутка, 100% серЪЙОз
Номер ответа: 3
Автор ответа:
Василий
Вопросов: 8
Ответов: 27
Профиль | | #3
Добавлено: 04.12.06 18:16
HACKER почему сайт (http://xaker.ru/) тормозит...время перехода между страницами 7-10 сек. (у меня скорость соединения 1,0 Мбит/с.)?
Ишу бесплатный хостинг.
Номер ответа: 4
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #4
Добавлено: 04.12.06 19:59
____ 1. Любая книга, где как можно более подробно рассматривается объектная модель офиса.
____ 2.1. К листу обращаются либо по его имени, либо по индексу в коллекции листов (потом через точку Cells).
____ 2.2. На листе есть свойство UsedRange, которое представляет собой прямоугольный диапазон ячеек вмещающий в себя всё заполненные. Соответственно в диапазоне есть свойства с количеством столбцов и строк и т.д.
____ 2.3. Привязать код к событию изменения ячейки.
Номер ответа: 5
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #5
Добавлено: 04.12.06 21:22
А как сделать такой макрос, шобы он кнопочку свою на тулбар добавлял, и по нажатию на неё, запускалась нежная мне функция?
Номер ответа: 6
Автор ответа:
GenyaA
Вопросов: 0
Ответов: 185
Web-сайт:
Профиль | | #6
Добавлено: 04.12.06 21:36
Так-с... прежде чем разбираться с тулбаром, давайте определимся с тем, как сделать функцию нежной... причем сделать ее нежной именно Вам...
Номер ответа: 7
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #7
Добавлено: 04.12.06 21:45
____ На какой тулбар? Если на готовый, то надо знать либо его имя, либо индекс в коллекции тулбаров.
____ А можно в коде создать на лету свой тулбар, на нём кнопку и привязать к кнопке свой выполняемый код.
____ Создаётся панель примерно так:
' Процедура создания панели
Public Sub СоздатьПанель()
If Mid(Application.ActiveSheet.Cells(1, 1).Comment.Text, 1, 5) = "Смета" Then
For Each cbr In Application.CommandBars
If cbr.Name = "Смета" Then
cbr.Visible = True
Exit Sub
End If
Next
Set cbr = Application.CommandBars.Add(Name:="Смета", _
Position:=msoBarFloating, _
MenuBar:=False, _
Temporary:=True)
With cbr
With .Controls.Add(Type:=msoControlButton)
.Caption = "Скрыть"
.OnAction = "Скрыть"
.TooltipText = "Скрыть пустые строки"
.Style = msoButtonCaption
End With
With .Controls.Add(Type:=msoControlButton)
.Caption = "Показать"
.OnAction = "Показать"
.TooltipText = "Показать все строки"
.Style = msoButtonCaption
End With
.Left = Application.ActiveWindow.Width - .Width
.Visible = True
.Left = 30
.Top = 140
End With
End If
End Sub
Номер ответа: 8
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #8
Добавлено: 04.12.06 22:12
А как потом события нажатия кнопочек на моем тулбаре обрабатывать?
Номер ответа: 9
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #9
Добавлено: 04.12.06 22:14
P.S. Будем считать, что нежная функция - та функция котрая работает гладко, быстро и без глюков - т.е. она нежная ))
Номер ответа: 10
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #10
Добавлено: 04.12.06 22:59
____ .OnAction = "Показать" — это имя sub'ы, которая будет исполняться по нажатии кнопки.
Номер ответа: 11
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #11
Добавлено: 04.12.06 23:33
Спасибо! Помог!
Номер ответа: 12
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #12
Добавлено: 04.12.06 23:48
____ В довершение напомню, что Temporary:=True означает временный тулбар, который потом пропадёт. Тем не менее, я предпочитаю уничтожать тулбар всякий раз, как только покидаю страницу (событие!), где его использую. Иначе он может висеть там, где не надо.
____ Удачи.
Номер ответа: 13
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #13
Добавлено: 05.12.06 12:58
ага спасибо! И ещё... вот в событии изминения ячеек, я кое-че делаю, и изменяю другие ячейки... но когда я их изменяю, событие сразу вызывается снова, ну т.е. уже для новых измененных...
Как запретить реагировать на событие, временно?
(пока флажек завел...)
Номер ответа: 14
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #14
Добавлено: 05.12.06 13:17
____ Именно так и я делал. По крайней мере полный контроль со всех сторон.
Номер ответа: 15
Автор ответа:
ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #15
Добавлено: 05.12.06 13:45
____ И уж "до кучи" — бывают проблемы со скоростью обработки ячеек. Самая долгая операция в Excel — обращение к диапазону (ячейке) и обновление экрана, которое происходит после каждого изменения. Может помочь такая строка (на время работы с диапазонами) — Application.ScreenUpdating=false — она запрещает обновление экрана.
____ Если есть массовые операции над отдельными ячейками (строками, диапазонами), то сильно ускоряет процесс предварительное формирование объединённого диапазона и совершение одной операции со всем диапазоном сразу.