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

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

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

ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

ShIvADeSt



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

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

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format (eng.)
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами 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.
  • Приемы, хитрости, трюки и нюансы работы в Microsoft Excel - сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
  • Microsoft Excel: Таблицы и VBA. Справочник. Вопросы и Ответы. Советы. Примеры.  
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2, часть 3
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов
    Найти "чужое" окно и нажать в нем кнопку (вписать текст в текстовое поле)
    Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно
    Как программно подключить дополнительные библиотеки (например, "Microsoft Scripting Runtime" или "Microsoft ActiveX Data Objects 2.8 Library) через References

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:58 23-04-2007 | Исправлено: JekG, 22:32 10-01-2010
    Vitus_Bering



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

    Цитата:
    как из эксэля можно управлять вордом.

    OLE-сервером Excel, погугли на эту тему.
     

    Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 09:17 26-12-2008
    MaximuS G

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frantishek
    Покажите пример
     
    Добавлено:
    TeHNoSaL
    А подробней можна ?

    Всего записей: 113 | Зарегистр. 15-08-2008 | Отправлено: 11:56 26-12-2008
    Frantishek



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MaximuS G
    http://slil.ru/26485394

    Всего записей: 1222 | Зарегистр. 02-05-2006 | Отправлено: 15:56 26-12-2008
    MaximuS G

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Frantishek
    М-да, пробуйте как то по другому, видимо эту функцию глючит при работе с датами причем такого формата... Интересно, что СОВПАД возвращает ИСТИНУ... Не используйте ее вообще при работе с таким типом данных, что бы исключить ошибку.

    Всего записей: 113 | Зарегистр. 15-08-2008 | Отправлено: 17:14 26-12-2008 | Исправлено: MaximuS G, 17:15 26-12-2008
    CEMEH



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

    Цитата:
    Просто даже не представляю, как из эксэля можно управлять вордом...  

    Открой тему в версии для печати и ищи мой ник (написан англ буквами). Я этот вопрос задавал. Теперь активно пользуюсь.

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 15:12 27-12-2008
    V4mp



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

    Цитата:
    Открой тему в версии для печати и ищи мой ник (написан англ буквами). Я этот вопрос задавал. Теперь активно пользуюсь.

    ОГРОМНОЕ СПАСИБО!
    в кратце что наобъединял с форума (просьба не ругать за использование чужих ответов, просто лучше, если они все будут в одном посте):
    админам просьба добавить вопрос в шапку, а то наверное не я один интересуюсь подобным вопросом...
    ------------
    Пример вставки в новый Word документ (предварительно в Excel надо подключить библиотеку Word):  
     

    Цитата:
    Dim word_ As Word.Application  
    Set word_ = New Word.Application  
    word_.Documents.Add ' создаем новый документ Word  
    q = Cells(1, 1).Value ' то что будем вставлять в Word  
    word_.Selection.TypeText Text:=q ' собственно - вставляем в Word  
    word_.Visible = True ' делаем документ Word видимым, т.к. по умолчанию он не видим.

    ------------
    Как поключить библиотеку Word'а:
     

    Цитата:
    меню Tools / References  
    находишь Microsoft Word 11.0 Object Library (вместо 11.0 у тебя может быть другая версия - зависит от версии Офиса)  
    разумеется, что приведённый код будет работать исключительно на машине, на которой установлен Word!

    ------------
    Добавление информации с Excel в Word путем поиска-замены:
     

    Цитата:
    Ты говоришь про обычную замену - так иногда делают. Когда Тебе надо вставить текст в Word он привязывается к положению - страница, строка, символ... А если у Тебя изменится прочий-исходный текст что тогда - править макрос?  
    Чтобы избежать такого гемороя обычно в местах вставки указывают всякую фигню, типо твоей  
    Цитата:{asdf}  
    А в макросе пишут - заменить врагмент на...  
    Вот пример:  
    Dim Word_ As Object 'Описываем переменную как объект  
    Set Word_ = GetObject("c:\Мои документы\Sghasdrhy.doc") 'Инициализируем объект. Он автоматом откроется.  
    Word_.Application.Visible = True 'Делаем его видимым  
    With Word_.Application.Selection.Find 'Параметры поиска-замены  
    .Text = "{arqwtrq}" 'то - что ищем.
    .Replacement.Text = "asfwqwtqwt" 'то - на что заменяем  
    .Execute Replace:=wdReplaceAll 'заменяем  
    End With

     
    Добавлено:
    В топике Excel FAQ (часть 4) мои вопросы повисли в воздухе.. может тут кто знает?
     
    1) есть эксэлевский файлик, сохранен из 2007 эксэля в формате excel 2003.  
    зашифрован на открытие.  
    и при открытии ентого файла в 2007 эксэле и последующем сохранении ВСЕГДА задается вопрос -    
    Данный документ зашифрован и защищен паролем. Форматы Office Open XML, доступные в выпуске 2007, обеспечивают более надежное шифрование. Преобразовать документ в формат Office Open XML, чтобы улучшить его защиту?  
    как этот вопрос убрать? желательно каким-нибудь кодом VB или на худой конец настройкой...  
       
    2) в 2003 эксэле вроде нет такого понятия - особый колонтитул на первой странице. (в отличие от 2007 эксэля - там эта фишка появилась) А как все-таки это организовать каким-нибудь хитрым кодом?

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 18:03 28-12-2008 | Исправлено: V4mp, 18:09 28-12-2008
    q1wed



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

    Цитата:
    В топике Excel FAQ (часть 4) мои вопросы повисли в воздухе.. может тут кто знает?
     
    1) есть эксэлевский файлик, сохранен из 2007 эксэля в формате excel 2003.  
    зашифрован на открытие.  

    а в указанном топике между прочим ответ прозвучал, повторю его еще раз: сохраняем файл в формате 2007 на 2003 офис устанавливаем обновление позволяющее открывать файлы 2007 офиса. предельно просто, а главное правильно: с течением времени файлов под 2007 будет все больше и больше и без этой обновы твои пользователи 2003 офиса тя просто "заклююють"

    Всего записей: 208 | Зарегистр. 02-03-2007 | Отправлено: 11:16 29-12-2008
    V4mp



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

    Цитата:
    а в указанном топике между прочим ответ прозвучал, повторю его еще раз: сохраняем файл в формате 2007 на 2003 офис устанавливаем обновление позволяющее открывать файлы 2007 офиса. предельно просто, а главное правильно: с течением времени файлов под 2007 будет все больше и больше и без этой обновы твои пользователи 2003 офиса тя просто "заклююють"

    http://www.microsoft.com/downloads/details.aspx?displaylang=ru&FamilyID=941b3470-3ae9-4aee-8f43-c6bb74cd1466
    Имя файла:    FileFormatConverters.exe
    Размер загружаемого файла:    27.6 МБ
    слишком большой размер файла для других людей, у которых dial-up...
    и еще смущает такая строчка -  
    Пользователям программ Word, Excel или PowerPoint пакетов Microsoft Office XP и 2003: перед загрузкой пакета обеспечения совместимости установите обновления с высоким приоритетом с веб-узла Microsoft Update.
    т.е. конвертер может еще и не стать без обновлений.
    есть ли другое решение проблемы?

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 22:30 29-12-2008
    q1wed



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V4mp
    на офис 2003 SP3 (без доп. обновлений) встает без проблем, сдается мне на SP1 тож встанет

    Всего записей: 208 | Зарегистр. 02-03-2007 | Отправлено: 08:15 31-12-2008
    KolyaP

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как задать ссылку на объект таким образом, чтобы можно было ею пользоваться не только внутри текущей процедуры?
     
    Например
    Set r_p_ID_rc = Sheets(perech_sh).Names("ID_rc").RefersToRange
    действует только локально

    Всего записей: 43 | Зарегистр. 04-01-2009 | Отправлено: 00:51 04-01-2009
    Olive77

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    KolyaP
    Public r_p_ID_rc
     
    sub yourmacro
      ...
    end sub

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 01:37 04-01-2009
    KolyaP

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

    Цитата:
    KolyaP  
    Public r_p_ID_rc  
     
    sub yourmacro  
      ...  
    end sub

    Спасибо!
     
    Получается, что объявление Public нужно давать в начале модуля.
    Я помещал его между макросами в середине, ничего не работало.
     
    Добавлено:
    Кстати еще я насколько понял, объявления глобальных констант, переменых и т.п.  можно давать только в начале модуля. Объявления в начале пространства для кодов книги или листа не работают?

    Всего записей: 43 | Зарегистр. 04-01-2009 | Отправлено: 12:35 04-01-2009
    Olive77

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

    Цитата:
    объявления глобальных констант, переменых и т.п.  можно давать только в начале модуля. Объявления в начале пространства для кодов книги или листа не работают?

    угу

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 15:20 04-01-2009
    KolyaP

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Olive77
     
    Спасибо
     
    Добавлено:
    Обнаружил интересную особенность.
    Если вставить ComboBox ("Поле со списком" из панели инструментов "Элементы управления"), а потом заполнить поле ListFill Range в свойствах, Excel запрашивает сохранить ли документ, на котором находится этот ComboBox независимо от того менялось что-либо в документе или нет.
    Сталкивался кто-нибудь с таким?
    И как от этого избавиться?

    Всего записей: 43 | Зарегистр. 04-01-2009 | Отправлено: 18:43 04-01-2009
    Timsi

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    День добрый!
    Помогите разобраться с проблемой, пожалуйста !
    Проблема: при наступлении определенной даты надо менять значение в огромной куче рабочих книг на строго определенное значение из другой книги, т.е. открываем файл - ищем нужное значение - находим -меняем-закрываем книгу -переходим к следующей и т.д. Надоедает ужас! Подскажите как автоматом закатать. Заранее спасибо!

    Всего записей: 5 | Зарегистр. 09-01-2009 | Отправлено: 23:36 09-01-2009
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Timsi
    В принципе
    Цитата:
    открываем файл - ищем нужное значение - находим -меняем-закрываем книгу -переходим к следующей и т.д.

    Это уже готовый код. Осталось только перевести его на язык VBA

    Цитата:
    при наступлении определенной даты  
    Кто будет контролировать наступление даты? Легче всего создать книгу КонтрольДаты.xls, которую открывать через назначенные задания. Например каждый день в 3:00 запускается КонтрольДаты.xls. в нем код   Private Sub Workbook_Open() который сравнивает текущую дату now() с заранее занесенной в какую нить ячейку.  
    В зависимости от того, что из себя представляет
    Цитата:
    другой книги
    (Может эту книгу с подставляемыми данными вам по сети кидают. ) Либо открывать другую_книгу.xls брать из нее значения и подставлять в кучу_разных_книг.xls Либо, если это ваш файл, то необходимые данные разместить в запускаемой по назначенному заданию КонтрольДаты.xls
    Что может пригодиться:
    1) Книгу лучше открывать. Я однажды пользовал макрос, который извлекал данные из других книг не открываючи их. Потом вылез глюк. (А может просто файл был слишком большой) Дописал макрос, чтобы книги открывались и закрывались. Стало работать быстрее.
    2) ThisWorbook.Path - путь до папки, с которого запущена книга. Пригодится, если придется часто менять дислокацию (флешки, диски и т.д.) папки, в которой будет расположена вся эта картотека.
    3) Запись макросов и их последующее редактирование.
    4) Форум. Это наверное, первое.
     
     

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 21:12 10-01-2009
    Timsi

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    День добрый !
    Еще раз шаркну ножкой - спасибо огромное за помощь!
    Как вы правильно поняли другая книга это расшаренная книга_xls. Изменения в ней делают другие , я же визуально отслеживая сегодня = той дате , провожу изменения. Раб. книги .  которые я изменяю .csv(для работы в другой системе ).
    То что вы сказали ,я попробую использовать. Вся структуру работы неповоротлива и много ограничений по правам и т.д. и т.п. Вот и пытаюсь с чего-то начать.
    Еще раз спасибо)))
     
    Добавлено:
    Перевести оказалось не просто , буду дальше пробовать.

    Всего записей: 5 | Зарегистр. 09-01-2009 | Отправлено: 13:03 11-01-2009
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Timsi
    Ну так давайте пробовать. Задачка для начинающего (в смысле для меня) не сложная.
     
    Не совсем понятны данные в расшаренной Другой_книге. Теоретически можно создать книгу на своем рабочем месте. А вот в ячейки вставить формулу
    ='\\192.168.1.2\Расшаренная_Папка\[Другая_Книга.xls]Лист1'!$A$1
    Теперь, при открытии книги все данные из Другой_Книги будут в вашей. (разумеется, путь к ней у вас будет совершенно другой)
     
    Далее
    Цитата:
    я же визуально отслеживая сегодня = той дате , провожу изменения

    Какого рода изменения?
    Допустим Другая_Книга\лист1 и в нем два столбца Наименование_товара и цена. Администратор Другой_Книги ежедневно вносит изменения и вам надо отследить что изменялось? Тогда ваша_книга будет состоять из двух листов Лист1 с вышеуказанной формулой, а лист2 со старыми значениями.
    При запуске макроса происходит сравнение каждой ячейки. Если значения отличаются то выполняется некий код, после чего данные из Лист1 копируются в лист2. Если значения равные то ничего не делается.
    Не, гадать не буду. Давайте более подробную инфу. Что лежит в Другой_Книге и какие данные нужно получить на выходе.
    Кстати VBA лехко пишет в файлы txt... И читает их.

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 21:39 11-01-2009
    ttipp

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ребята помогите пажалуйста! мне нужно както с одно листа с помощью SQL запроса вывести данные на другой в одной книге Excel! приходится подключатся через внешний источник данных к самому себе! тут пастоянно возникают какие то косяки: почему то в одной книге всё работает, а в другой тот же макрос выдаёт ошибку! можно как нибудь это сделать не через подключение к внешним источникам, а допустим через тотже listobject через commandtext??? заранее благодарен!!!

    Всего записей: 1 | Зарегистр. 14-01-2009 | Отправлено: 12:36 14-01-2009
    Timsi

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    День добрый Семен !
    Спасибо за ответ!
    Теперь инфа:
    1)есть около 40 файлов .csv с ценами , т.е. один столбец с наименованием и ценой.
    2)Есть файл .xls в нем 4столбца -а) наименование и цена(так скажем текущая)
    b)наименование и цена (новые)
    c)дата перехода на новую цену
    d)мой коммент ,что переход выполнен
    Одна из моих обязанностей мониторить этот файл и если сегодня = дате перехода,изменять
    в файлах .csv старую цену на новую.
    Файлом переходов ,ведает начальник другого подразделения .
    Согласен система не удобна, но это к делу не относиться.
    так .что если вы Семен согласны ,чем то помочь.хотя бы советом ,буду благодарен.
    надо писать макрос, но знаний реально не хватает .  
    Еще раз спасибо!

    Всего записей: 5 | Зарегистр. 09-01-2009 | Отправлено: 17:33 14-01-2009
       

    Страницы: 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)
    ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru