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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    AndrJUSHKA

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    If Cells(i, 1) = "Итого" Then
    если пиш утакое прокатывает  
    а если If Cells(i, 1) = "" Then вылезает ошибка 1004 как с этим боротся?

    Всего записей: 2 | Зарегистр. 30-11-2006 | Отправлено: 17:57 30-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndrJUSHKA
    Это ошибка не VBA, а Excel. У тебя VBA ругается именно на эту строку? Может, попробовать Len(Cells(i,1)) = 0 вместо Cells(i, 1) = ""?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 18:02 30-11-2006
    AndrJUSHKA

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

    Всего записей: 2 | Зарегистр. 30-11-2006 | Отправлено: 18:10 30-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    какой тип параметров Before и After у метода add объекта Worksheet? - Обычно использовал имя листа (string), а теперь Excel на него ругается (method failed). Если вместо имени указываю сам лист (object), он уже не ругается, но у меня серьезные подозрения, что лист добавляется при этом с глюком...

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 07:46 01-12-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    The okk
    F1
    Цитата:
    Before  Optional Variant. An object that specifies the sheet before which the new sheet is added.
     
    After  Optional Variant. An object that specifies the sheet after which the new sheet is added.

    Т.е. никак не название листа и не его номер, а только объект - сам лист.
     


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 08:58 01-12-2006 | Исправлено: Troitsky, 08:59 01-12-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    Набирал в справке в строке поиска "Add Method" - для Worksheet такого метода в справке не нашел . Что ты в строке поиска писал? Еще я  не нашел "Codemodule" и "Insertlines" .

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



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

    Цитата:
    Набирал в справке в строке поиска "Add Method" - для Worksheet

    Для листа и нет такого метода - он имеется для коллекции Worksheets

    Цитата:
    Что ты в строке поиска писал?

    В Object Browser найди этот метод и нажми <F1>.


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

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Записываю код обработки ошибок в лист:

    Код:
    With ActiveWorkbook.VBProject. _
        VBcomponents("Лист" & Worksheets(ListName).Index).CodeModule
        .insertlines .CountOfLines + 1, Code_part1
        .insertlines .CountOfLines + 1, code_part2
        .insertlines .CountOfLines + 1, code_part3
        .insertlines .CountOfLines + 1, code_part4
        .insertlines .CountOfLines + 1, code_part5
        .insertlines .CountOfLines + 1, code_part6
        .insertlines .CountOfLines + 1, code_part7
    End With

    Приводит к вылету Excel, чего раньше не случалось.
    Причем все строки кода прописываются правильно, а все операторы дальше этого кода не выполняются (у меня там дальше Protect идет). Т.е. вылет происходит после записи кода в лист, при попытке что-то с ним сделать. Не пойму, в чем дело.
     
    Добавлено:
    Troitsky
    спасибо Я просто нужные методы в хелпе через поиск всегда искал - думал, что разницы нет.
     
    Добавлено:
    Сделал, наконец, собственную панель инструментов. Теперь другой вопрос - как мне её добавить сразу туда, куда надо? Т.е., как задается положение свежесозданной панели на экране? Мне нужно её к остальным панелям наверх зафигачить.  
     
    Добавлено:
    Пишем в строке поиска в хелпе VBA "add method" - он его не находит. Пишем "commandbar" - среди вариантов ответа видим "add method"
     
    Добавлено:
    С панелью почти разобрался - надо в параметре Position задать msoBarTop. Только тогда моя панель создаст новый ряд. А я хочу, чтобы она добавлялась в последний ряд панелей - там места вагон. А то в отдельном ряду панель выглядит криво - там кнопок-то всего-ничего.
     
    Возник другой вопрос: Как создать закрепление областей. Т.е., я конечно могу написать:
    Rows(4).Select
    Application.FreezePanes
    НО в этом случае если строка 4 входит в группу строк (например, с 4-й по 6-ю), она войдет в закрепляемую область, а мне этого не надо.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 09:53 01-12-2006 | Исправлено: The okk, 09:55 01-12-2006
    AndyAdvokat

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подсажите такую вещь
    присваиваю ячейкам формулы
     
    когда задая так - работает нормально
    sheet_Z.Cells(stroka + n, 12) = "=R[0]C[-8]*R[0]C[-1]"
     
    если так  
       Adress = "=СУММ(R[1]C[0]:R[" + LTrim(str(n)) + "]C[0])"
       sheet_Z.Cells(stroka, 6) = Adress    
     
    в таблицу вставляется формула - но не считает
    появляеться в таблице в ячейке след - #Имя?
    там же есть формула которая вставляется  
    на автомате она не считает - но, если счёлкнуть в ячейке на правку а потом выйти - формула срабатывает и выводит результат  
     
    Вопрос: как сделать так, чтоб формула сразу нормально срабатывала.
     

    Всего записей: 5 | Зарегистр. 01-12-2006 | Отправлено: 17:49 01-12-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    AndyAdvokat
    Запись формул программно нужно производить в их англоязычной форме: замени формулы, записанные по-русски на их английский эквивалент
    Список соответствия имен функций в английской и русской версиях Excel
     
    & All
    Меня просто убивает, когда какое то значение присваивают классу или объекту, а не их свойствам. Ну не правильно это в общем случае.
    Я вот, например, понятия не имею какому свойству класса Range присваивается в этом случае значение:
    Цитата:
    .Cells(stroka, 6) = Adress
    Formula? FormulaR1C1? Value? Value2? Или какому другому?
    И, кроме того, могу не догадываться, что в результате этого присвоения желается получить.
    Давайте не будем кастрировать код, удаляя из него поясняющие смысл куски!


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 18:10 01-12-2006 | Исправлено: Troitsky, 18:28 01-12-2006
    AndyAdvokat

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

    Цитата:
    Меня просто убивает,..... Ну не правильно это в общем случае.
    ...могу не догадываться, что в результате этого присвоения желается получить.
    Давайте не будем кастрировать код, удаляя из него поясняющие смысл куски!  

     
    Согласен )) но "я не ещё не волшебник - а только я учюсь..." Потребность на работе заставила.

    Всего записей: 5 | Зарегистр. 01-12-2006 | Отправлено: 18:40 01-12-2006
    The okk



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

    Цитата:
    Я вот, например, понятия не имею какому свойству класса Range присваивается в этом случае значение:

    Value - в свое время специально проверял
    Кстати, список соответствия не обязателен. Просто вместо .formula пишешь .formulalocal - чтобы использовать формулы родного языка (в нашем случае - русского, в других странах - хз).

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем! Помогиет!
    Гдето сбой не пойму. Поиск значения в другой таблице. Когда заканчивается список и остаются пустые яченки пишет Н/Д и выдает ошибку. А нужно чтобы ставил 0 и работал до конца цикла. Вот строка макроса:
    If Range("EA" + CStr(i * 6 + 13)) = 0 Or IsErroe(EA"+CStr(i * 6 + 13)+"= True) Then
    Если ячейка ЕА =0 или #Н/Д то 0 иначе 1
    Буду рад за подсказки.

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



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

    Цитата:
    Кстати, список соответствия не обязателен. Просто вместо .formula пишешь .formulalocal - чтобы использовать формулы родного языка (в нашем случае - русского, в других странах - хз).

    Ненадежно это Можно ведь и переменные по-русски именовать (целКоличество, например ), но ведь, здравый смвсл подсказывает этого не делать
     
    kramrus
    Что ты хотел сказать этим куском кода:
    Цитата:
    IsErroe(EA"+CStr(i * 6 + 13)+"= True)

    ?


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 15:00 02-12-2006
    kramrus

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    ЕОШИБКА(EA19)=Истина

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    про закрепление областей не подскажешь?

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



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    The okk
     
    а что не так с закреплением? где сам-то вопрос?

    Всего записей: 324 | Зарегистр. 20-05-2005 | Отправлено: 12:59 03-12-2006
    Troitsky



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

    Цитата:
    про закрепление областей не подскажешь?

    Рад бы, да сути вопроса не понял

    Цитата:
    если строка 4 входит в группу строк (например, с 4-й по 6-ю), она войдет в закрепляемую область, а мне этого не надо

    т.е. тебе нужно создавая закрепление областей проверять не входят ли в эту область строки из группы строк (полученные с помощью команды "Группа и структура") и если входят то их нужно исключить?
     
     
    Добавлено:
    kramrus
    Внятно сформулируй вопрос - перечитал твой пост раз пятнадцать и все равно не понимаю, что ты пытаешься делать и что хочешь получить.


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 14:32 03-12-2006
    alex_gall

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Знатоки, подскажите...
     
    Мне нужно каждый раз при запуске скрипта брать инфу из web-страницы...
     
    То есть мне нужну реализовать команду "Создать web-запрос", где уже будут вбиты адрес и таблица, которую нужно парсить...И это всё каждый раз при запуске скрипта...
     
    И ещё мне нужно, чтобы при сохранении файла, он сохранялся как на локальной машине, так и на сервере...
     
    Вот такие два вопроса...

    Всего записей: 142 | Зарегистр. 17-03-2006 | Отправлено: 20:48 03-12-2006 | Исправлено: alex_gall, 21:00 03-12-2006
    jONES1979



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    alex_gall
     
    Set objExplorer = CreateObject("InternetExplorer.Application")  
     objExplorer.Navigate "www.нужныйадрес.ru "  
     
    потом если что, обращаешься к  
    objExplorer.Document для работы со страницей (см. DOM для Експлорера)

    Всего записей: 324 | Зарегистр. 20-05-2005 | Отправлено: 07:16 04-12-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