Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA

Модерирует : ShIvADeSt

ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

   

RUSmafia



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами Excel (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Excel через меню Сервис (Tools) - Макрос (Macro) - Начать запись (Record New Macro). Подробнее здесь. В большинстве случаев получившийся код (Сервис-Макрос-Макросы-Изменить) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
    Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроення помощь (F1), естественно.
     
    Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылазит ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
    Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

     
    Рекомендуется к прочтению:
  • Первые шаги с Excel VBA
  • Excel VBA: Приёмы программирования
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Daily Dose of Excel (eng.) - тематический блог: советы по работе с Excel и прочие материалы
  • Excel Macros & Excel VBA Code Tips, Tricks (eng.) - советы, трюки и уловки
  • Mr. Excel (forum) (eng.) - весьма оживленный форум по Excel&VBA.
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов

  • Всего записей: 556 | Зарегистр. 31-07-2002 | Отправлено: 21:40 14-10-2004 | Исправлено: lucky_Luk, 20:44 13-04-2007
    Anton T

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    The okk
    Sub ttt()
    Dim book As Worksheet
    For Each book In Worksheets
    MsgBox book.Name
    Next book
    End Sub
    Если в листе всего 3, то вызывается 3 раза.

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 13:53 21-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Другой вопрос - что такое Me? Me - это объект, активный в данный момент времени?
     
    Добавлено:
    Anton T
    Не, имя-то я знаю Нужен именно индекс. Например, лист с именем "2" может быть в книге хоть десятым, хоть тысячным .

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 14:46 21-11-2006
    PavelO

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здарово, Troitsky. Как дела?
    Огромное спасибо за ссылку о перемещении и нажатии мышки.
    А может ты знаешь как использовать wheel mouse (колесо прокрутки мышки) для скрола UserForm'ы или MultiPage'а. Если знаешь скажи пожалуйста, а то я тут код написал для этой цели, но думаю, что есть более простой вариант.

    Всего записей: 27 | Зарегистр. 19-09-2006 | Отправлено: 15:07 21-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот еще вопрос: надо, чтобы по наведению на ячейку ее содержимое отображалось в виде подсказки (не путать с примечанием/comment). Это свойство приложения или ячейки? И как оно называется?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 15:17 21-11-2006
    kramrus

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    СПАСИБО добрые жители данного сайта!
    Все работает.
    Век живи век учись.?
    В продолжение темы:
     
    Sub Макрос23()
    For i = 1 To 100
    Range("СA" + CStr(i * 4 + 21)).Formula =INDEX('D:\[Октябрь 2006.xls]ОШ №20'!$F$19:$BZ$418,MATCH(F19,'D:\[Октябрь 2006.xls]ОШ №20'!$F$19:$F$418,0)+3,57)
    Next
    End Sub
     
    А как в формуле сделать так чтобы в  "MATCH(F19" - 19 менялось на: + CStr(i * 4 + 21),
    тоесть вместо 19 мне нужно получить с 19 по 419 с промежутком через 4 строки.
    И ещё. Можно ли написать макрос:
    при отсутствии значение в столбцах СА и СВ и СD "n"-строки, строку спрятать (скрыть визуально и для печати)
    СПАСИБО еще раз.

    Всего записей: 27 | Зарегистр. 07-11-2006 | Отправлено: 15:17 21-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kramrus

    Цитата:
    А как в формуле сделать так чтобы в  "MATCH(F19" - 19 менялось на: + CStr(i * 4 + 21)  

    Если формат позволяет, вместо F19 пиши Cells(i * 4 + 21,6). Сия запись ссылается на ячейку со строкой i * 4 + 21 и шестым по счету столбцом. Cells работает с номерами (то бишь с числами), поэтому тут CStr не нужно

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 15:29 21-11-2006 | Исправлено: The okk, 15:56 21-11-2006
    alin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    The okk
    Сасибо, тормоза прекратились. Но как контролироватья не знаю.
     
    Уважаемые, помогите пожалуйста довести до конца модуль, с VBA у меня познания минимальны.
    Имеются ячейки, допустим:A1, A2, ... A4, в которых  находятся данные.
    Мне необходимо следующее: указывая (или выбирая из списка) в ячейке B1 материал (в текстовом виде), в ячейки: C1, D1, …F1 копировались данные из ячеек A1, A2, ..A4.
    Далее, указывая материал в ячейке B2, в ячейках: C2, D2, …F2 производился расчет С2=A1-C1, D2=A2-D1,… F2=A4-F1.
    Затем, указывая материал в ячейке B3, в ячейках: C3, D3, …F3 производился расчет С3=A1-C2, D3=A2-D2,… F3=A4-F2… и т.д.
    Заранее благодарен!

    Всего записей: 683 | Зарегистр. 05-08-2004 | Отправлено: 15:42 21-11-2006 | Исправлено: alin, 15:44 21-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    при отсутствии значение в столбцах СА и СВ и СD "n"-строки, строку спрятать (скрыть визуально и для печати)  

    private sub Hide()
    Dim Rowcounter as long
    for rowcounter = 1 to usedrange.rows.count
    if Cells(rowcounter, тут_номер_столбца_CA)=0 and _
    Cells(rowcounter, тут_номер_столбца_CB)=0 and _
    Cells(rowcounter, тут_номер_столбца_CD)=0 then
    Range(Cells(rowcounter,1)).entirerow.hidden = true
    next
    end sub
     
    Примерно так. Если все нули, то ячейки будут спрятаны.
    номера столбцов мне считать лениво
     
    Добавлено:
    alin
    Может, я просто не до конца понял, но... а формулами этого сделать нельзя?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 15:45 21-11-2006 | Исправлено: The okk, 15:50 21-11-2006
    kramrus

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    День добрый!!!
    Пишу макрос
    Sub Макрос23()
    For i = 1 To 32
       Range("CA" + CStr(i * 4 + 21)).Formula = "=INDEX('D:\[Октябрь 2006.xls]ОШ №20'!$F$19:$BY$418,MATCH(Cells(CStr(i * 4 + 21),6),'D:\[Октябрь.xls]ОШ №20'!$F$19:$F$418,0)+2,57)+INDEX('D:\[Сентябрь 2006.xls]ОЩ №20'!$F$19:$BZ$418,MATCH(Cells(CStr(i * 4 + 21),6,'D:\[Сентябрь 2006.xls]ОШ №20'!$F$19:$F$418,0)+3,57)"
    Next
    End Sub
    Вместо F19  Cells(CStr(i * 4 + 21),6)
     
    И не работает ?????
    Выдыет ИМЯ?

    Всего записей: 27 | Зарегистр. 07-11-2006 | Отправлено: 16:12 21-11-2006
    alin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    Можно (=ЕСЛИ(ЕТЕКСТ(B1);A1;""))
    Хотел макрос довести до ума...

    Всего записей: 683 | Зарегистр. 05-08-2004 | Отправлено: 17:59 21-11-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    The okk

    Цитата:
    Нужен именно индекс. Например, лист с именем "2" может быть в книге хоть десятым, хоть тысячным
    Не понял, что требуется. Это что ли:
    Код:
    Worksheets("Лист1").Index
    ?
     
    PavelO

    Цитата:
    А может ты знаешь как использовать wheel mouse (колесо прокрутки мышки) для скрола UserForm'ы или MultiPage'а.
    Не понял, что имеется ввиду под скролом формы, но все на том же VBNet можешь посмотреть такую статью: Как отследить скролл мыши
     
    The okk

    Цитата:
    надо, чтобы по наведению на ячейку ее содержимое отображалось в виде подсказки
    А разве есть у ячеек такое свойство?Можно попробовать поиграться с гиперссылками (или их свойством ScreenTip), например:
    Код:
        Range("B2").Hyperlinks.Add _
          Anchor:=Range("B2"), _
          Address:="", _
          ScreenTip:=Range("B2").Value, _
          TextToDisplay:=Range("B2").Value

     
    kramrus

    Цитата:
    А как в формуле сделать так чтобы в  "MATCH(F19" - 19 менялось на: + CStr(i * 4 + 21)
    Формула у тебя представлена в виде строки. Ну так и выполняй типичную операцию со строками - конкатенацию. В нужном месте разрывай строку и, например...
    Код:
    "....MATCH(F" & CStr(i * 4 + 21) & ",'D:...."



    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 23:32 21-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    Угу. Index. Видимо, невнимательно в Обжект Броузере смотрел.
     
    Добавлено:
    Troitsky
     

    Цитата:
        Range("B2").Hyperlinks.Add _  
          Anchor:=Range("B2"), _  
          Address:="", _  
          ScreenTip:=Range("B2").Value, _  
          TextToDisplay:=Range("B2").Value  

    Так получается циклическая ссылка. Да и текст отображается в виде гиперссылки (синий и подчеркнутый).
    Ну вроде было же в экселе такое. Чтобы если надпись не умещается, можно было навести на нее мышь и всплывала подсказка с полной надписью.
     
    Добавлено:
    И еще - когда задаю в "разметке страницы" границы страниц, они остаются видны при переходе в номальный режим. Как сделать, чтобы границы страниц не отображались на обычном виде.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 06:59 22-11-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    The okk

    Цитата:
    Так получается циклическая ссылка. Да и текст отображается в виде гиперссылки (синий и подчеркнутый).
    Я к тому и говорю, что можно _попробовать_ поиграться ибо это очень кривое решение
    Кстати, никто не мешает сделать ссылку без подчеркивания и стандартным цветом.


    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 08:33 22-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    Я как-нибудь проще хотел...

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 09:22 22-11-2006
    kramrus

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky

    Цитата:
    А как в формуле сделать так чтобы в  "MATCH(F19" - 19 менялось на: + CStr(i * 4 + 21)

    эта формула в макросе. Вставил и не работает?

    Всего записей: 27 | Зарегистр. 07-11-2006 | Отправлено: 11:58 22-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А что за метод ClearNotes у объекта Range? - ClearComments знаю, а ClearNotes - ...?
    И где в экселе ставить галочку, чтоб на события реагировал?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 12:02 22-11-2006 | Исправлено: The okk, 12:22 22-11-2006
    Ilyansk

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    kramrus
    если в ячейки вставлять формулы, генерируемые макросом,  то делают так

    Код:
     
    range(<адрес ячейки, типа "F1">).formula="....MATCH(F" & CStr(i * 4 + 21) & ",'D:...."
     

    (часть кода, что в многоточиях, взята из поста г-на Троицкого, выше, т.к. она правильная)
    прогоните под отладчиком и после выполнения этой строки загляните в ячейку.  
    там должно появиться  
            =....MATCH(F<нужная строка>,'D:....
    где нужная строка - число расчитанное по фрмуле i*4+21
     
    вопрос 2 ALL
     
    Столкнулся со странной проблемой
       в макросе создаю файл  
    Open fname For Binary As 1
       файл создается
         пишу в него байт
    Dim ch As Byte
    ch="a"
    Put #1, , ch
         вылетает ошибка 75 "Path/file access error"
     
    система winxpsp2 (office2003, ecxel vba), права админа. Самое паршивое в том, что этот же файл на других машинах идет на ура.  
    где собака порылась?

    Всего записей: 70 | Зарегистр. 27-07-2006 | Отправлено: 12:32 22-11-2006 | Исправлено: Ilyansk, 12:42 22-11-2006
    PavelO

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky, я имел ввиду менять положение ScrollTop колесом мышки, спасибо за ссылку, только вот что-то не работает этот код. Во-первых Load, Unload (нет таких событий на форму в vba). ОК. Ставим на другие события (initialize, terminate или activate, deactivate), и тут же получаем ошибку "Method or data member not found".

    Всего записей: 27 | Зарегистр. 19-09-2006 | Отправлено: 13:11 22-11-2006
    kramrus

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    УРА РАБОТАЕТ !!!
    Спасибо всем, кто помогал!!!!!!!!!!
    Главное не спишить!
    Внимательность друг програмиста!
    Когда копировал расчет по фрмуле i*4+21, допустил ошибку.

    Всего записей: 27 | Зарегистр. 07-11-2006 | Отправлено: 13:21 22-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Что за Value2 у объекта Target?
     
    Добавлено:
    Так, с Notes вроде ясно. "Notes и Comments - найди 10 отличий". Я не нашел.
    Похоже, Notes нужны только для совместимости.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 14:32 22-11-2006
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA
    ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru