Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 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-сайт: www.adsemenov.ru
 Профиль | | #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-сайт: www.genyaa.nm.ru
 Профиль | | #6
Добавлено: 04.12.06 21:36
запускалась нежная мне функция

Так-с... прежде чем разбираться с тулбаром, давайте определимся с тем, как сделать функцию нежной... причем сделать ее нежной именно Вам... ;-)

Ответить

Номер ответа: 7
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #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-сайт: www.adsemenov.ru
 Профиль | | #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-сайт: www.adsemenov.ru
 Профиль | | #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-сайт: www.adsemenov.ru
 Профиль | | #14
Добавлено: 05.12.06 13:17
пока флажек завел...

____ Именно так и я делал. По крайней мере полный контроль со всех сторон.

Ответить

Номер ответа: 15
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #15
Добавлено: 05.12.06 13:45
____ И уж "до кучи" — бывают проблемы со скоростью обработки ячеек. Самая долгая операция в Excel — обращение к диапазону (ячейке) и обновление экрана, которое происходит после каждого изменения. Может помочь такая строка (на время работы с диапазонами) — Application.ScreenUpdating=false — она запрещает обновление экрана.
____ Если есть массовые операции над отдельными ячейками (строками, диапазонами), то сильно ускоряет процесс предварительное формирование объединённого диапазона и совершение одной операции со всем диапазоном сразу.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам