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

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



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Уважаемые подскажите, пожалуйста: как можно из экселя работать с MDB (базами акцеса)?
    Задача: В экселе создается техническое задание на монтаж, а вся инфа хранится на сервере в виде баз Акцеса. Причем необходимо выдергивать данные из двух разных баз.
    Пробовал это делать ч/з микрософтКуэри и ч/з ИмпортВнешнихДанных, но как-то неудобно и некрасиво. И к томуже экселевские файлы стали на порядок тяжелее.
    Спасибо. Я понимаю, что можно в Акцесе создавать техзадание и не ....пудрить мозги, но так уж повелось в этой организации до меня (тяжело ломать устои, да и в Акцесе я как жук в апельсине )

    Всего записей: 2131 | Зарегистр. 17-03-2005 | Отправлено: 08:45 23-10-2006 | Исправлено: zporuchik, 08:46 23-10-2006
    jONES1979



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    zporuchik
     
    Думаю без VBA не обойтись...
     
    А какого рода инфа в акцессе? Справочники? И надо чтобы в екселе они были доступны? В каком виде? Формы  с выпадающими списками и т.п.?

    Всего записей: 324 | Зарегистр. 20-05-2005 | Отправлено: 15:19 23-10-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zporuchik
    Есть книжка O'Reilly Integrating Excel and Access. Где брал не помню, но могу закачать куда-нибудь. Надо?
     
    Добавлено:
    Нашел, откуда брал. Ru-board, конечно же!
    http://forum.ru-board.com/topic.cgi?forum=93&topic=0461&start=120#5

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:34 23-10-2006
    zporuchik



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    jONES1979
    Так я и не просил без VBA.
    В акцессе инфа по базовым станциям и радиорелейкам: их номера, адреса, азимуты, типы оборудования, азимуты и т.д.
    В экселе нужны разные варианты доступа:
    например: введя номер БС в соответствующие поля вносятся данные из акцесса, но не все данные есть в базе в явном виде и поэтому нужны выпадающие списки (которые отфильтровываются по номеру БС и вместо 500 значений в списке остается 5-6).
     
    Yuk
    За книгу большое спасибо - полистаю, но увы с инглишем неочень
     
    Вопрос еще: в принцыпе возможен вариант работы из экселя с базами акцеса чтение/запись, т.е. в мою форму читаются данные из базы, а те которых в базе нет я ввожу в экселе и они добавляются в базу акцес?
    Если вариант запись/чтение невозможен, то нестоит и заморачиваться с этим, а надо делать в акцесе мою форму техзадания
     
    Всем кто откликнулся - спасибо! И сильно не ругайтесь - я ведь только учусь

    Всего записей: 2131 | Зарегистр. 17-03-2005 | Отправлено: 08:22 24-10-2006
    jONES1979



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    zporuchik
    вариант "чтение/запись" возможен, но имхо проще сделать в акцессе форму техзадания Хотя конечно же я не знаю про что говорю, так как не видел того что у Вас есть наработанного

    Всего записей: 324 | Зарегистр. 20-05-2005 | Отправлено: 12:15 25-10-2006
    sonix555



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

    Всего записей: 8 | Зарегистр. 03-07-2006 | Отправлено: 14:55 25-10-2006
    Pantera3587

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто может решить такую задачу (нужен код)? Помогите!!!  
    на одном листе такая таблица
    Фамилия    КодА    КодАВ    СО    Значение
    иванов      Р142      Р1412    цо        350
    петров      Р142      Р1412    цо         0
    сидоров    Р142      Р1412    цо         0
    хомяков    Р142      Р1412    цо         0
    иванов      Р142      Р1413    цо         0
    петров      Р142      Р1413    цо         0
    сидоров    Р142      Р1413    цо       250
    хомяков    Р142      Р1413    цо        0
    иванов      Р145      Р1452    цо    
    петров      Р145      Р1452    цо       217
    сидоров    Р145      Р1452    цо    
    хомяков    Р145      Р1452    цо    
    иванов      Р189      Р189      цз    
    петров      Р189      Р189      цз    
    сидоров    Р189      Р189      цз    
    хомяков    Р189      Р189      цз        137
    на другом листе такая
    Фамилия    КодА    КодАВ    СО    Значение
    иванов      Р142    Р1412      цо       58
    сидоров    Р142    Р1412      цо        2
    сидоров    Р142    Р1413      цо       317
    петров      Р145    Р1452      цо       309
    хомяков    Р189    Р189        цз       450
    петров      Р189    Р189        цз       402
    Необходимо, чтобы на третий лист копировалась таблица с первого листа и добавлялись данные(столбец Значения) со второго листа, но так, чтобы эти значения соответствовали фамилии, кодуА и коду АВ , т.е. получилась бы вот такая таблица
    Фамилия    КодА    КодАВ    СО    Значение план    значение факт
    иванов      Р142    Р1412     цо            350                       58
    петров      Р142    Р1412     цо               0    
    сидоров    Р142    Р1412     цо               0                        2
    хомяков    Р142    Р1412     цо               0    
    иванов      Р142    Р1413     цо               0    
    петров      Р142    Р1413     цо               0    
    сидоров    Р142    Р1413     цо            250                        317
    хомяков    Р142    Р1413     цо              0    
    иванов      Р145    Р1452     цо        
    петров      Р145    Р1452     цо             217                       309
    сидоров    Р145    Р1452     цо        
    хомяков    Р145    Р1452     цо        
    иванов     Р189     Р189      цз        
    петров      Р189    Р189       цз
    хомяков    Р189    Р189       цз              137                      450
     

    Всего записей: 40 | Зарегистр. 20-10-2006 | Отправлено: 17:58 25-10-2006 | Исправлено: Pantera3587, 19:48 25-10-2006
    sonix555



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Проще простого батенька. Используй фунцкию запись макроса. Зайди в записанный макрос, посмотри, подумай, попробуй разобраться... Для "идеального" копирования сделай цикл который смотрит на последнюю "непустую" ячейку. А если колличество фамилий и их расположение в обоих таблицах идентично, то тут вообще неочем говорить
    Вообще люди обращаются к форуму, когда у них что-то не получается, а не когда им лень с этим разбираться (ИМХО). Но если это вопрос жизни и смерти, последняя надежда на спасение (если не сейчас, то ВСЕ, ж..па) - бывают и исключения.

    Всего записей: 8 | Зарегистр. 03-07-2006 | Отправлено: 18:49 25-10-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sonix555
    Если в Control Toolbox зайти в More Controls, можно найти Microsoft Date and Time Picker Control. По крайнер мере так у меня. Думаю, то, что тебе нужно.
     
    Pantera3587
    sonix555 хоть и груб, но в некотором роде прав. Я же Вам уже давал код на прошлой странице, очень похожий. Почему бы не разобраться и не модифицировать. Если есть конкретные вопросы или что-то не получается, спрашивайте - поможем.
     

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 20:37 25-10-2006
    DHelena

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня есть старый файл с группой макросов, которые я писала для организации. Файл для Excell97. Совеременный Excell, открывая его, сообщает, что файл поврежден, и, в результате, выдает разрушенный файл. Приходится работать в старом Excell'е.  
     
    Как перенести макросы в новый?

    Всего записей: 1 | Зарегистр. 26-10-2006 | Отправлено: 09:40 26-10-2006
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DHelena
    В старом Excell сделай экспорт каждого макроса отдельно (в формате .bas). Запусти новый - импортируй все макросы (в формате .bas) в новый файл - все должно работать. Немного медлено, если макросов много, зато надежно.
     
     
    Добавлено:
    Привет всем,
     
    Такой вопрос. В Excel есть таблички с названиями предприятий. Все они представлены в довольно "кривом" виде. Задача - надо преобразовать все названия к читабельному виду.
    Например есть: ООО "ТД "РОГА И КОПЫТА"
    надо чтобы получилось ООО "ТД "Рога и копыта"
    В моем макросе ключевое место занимает ф-я InStr для поиска позиции кавычек, но она ищет слева-направо, а мне надо наоборот. Можно ли как-либо задать ей напрвление поиска или для этого есть какя-нибудь другая функция?

    Всего записей: 2975 | Зарегистр. 04-01-2005 | Отправлено: 11:22 26-10-2006
    jONES1979



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mrdime
     
    Перед поиском сделать реверс исходной строки.

    Всего записей: 324 | Зарегистр. 20-05-2005 | Отправлено: 15:09 26-10-2006
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    jONES1979
    Ок, какой-то стандартной функцией это можно сделать?

    Всего записей: 2975 | Зарегистр. 04-01-2005 | Отправлено: 15:25 26-10-2006
    Troitsky



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

    Цитата:
    Ок, какой-то стандартной функцией это можно сделать?

    Есть стандартная функция StrReverse(), но честно говоря для решения твоей проблемы можно придумать лучшее решение. Ща подумаю.


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 18:05 26-10-2006
    jONES1979



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mrdime
     
    Использовать функцию InStrRev()

    Всего записей: 324 | Зарегистр. 20-05-2005 | Отправлено: 18:39 26-10-2006
    LeSlav



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    всем привет
    кто подскажет как отключить макросом автоматическое вычисление на момент исполнения макроса ну и как потом его обратно включить?)))))

    Всего записей: 304 | Зарегистр. 16-02-2004 | Отправлено: 18:51 26-10-2006 | Исправлено: LeSlav, 13:42 27-10-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mrdime
    В общем в сторону регулярных выражений нужно копать. Но так как эти RegExp'ы для меня темный лес, 100% рабочий код я тебе написать не могу - батва какая то получается типа
    Код:
      Dim myReg As RegExp
      Dim strStr As String, strNew As String
       
      Set myReg = New RegExp
      myReg.Pattern = "(^[^""]*[""].)(.+)([""]$)"
       
      strStr = "ООО ТД ""РОГА И КОПЫТА"""
      strNew = myReg.Replace(strStr, "$1") & LCase(myReg.Replace(strStr, "$2")) & myReg.Replace(strStr, "$3")

    Поюзай фильтр тут и в веб-программировании или гуглом поищи, может кто подскажет или чего найдется. А так, если операция разовая, то лучше не заморачиваться и делать как делал

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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 21:34 26-10-2006
    LeSlav



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

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

    отбой... заработался и протупил))))

    Всего записей: 304 | Зарегистр. 16-02-2004 | Отправлено: 13:45 27-10-2006
    Pantera3587

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть такая таблица
    Дата                    Клиент    Сумма
    01.12.2006    Иванов    234,00р.
    03.05.2006    Сидоров    456,00р.
    23.06.2006    Петров    345,00р.
     
    Есть такой макрос
    Sub МакросГПР()
     
    ' Макрос записан 30.10.2006 (DIREKTOR)
     
        Dim str As String
        Dim i As Integer
        Dim j As Integer
        Dim c As Variant
        Dim nr As Variant
         
        str = InputBox("Введите заголовок столбца: ") 'появляется диалоговое окно в поле
        'которого либо вводится слово Дата, либо вводится слово Клиент, либо вводится слово Сумма
     
        Range("E1").Select
        Range("E1").Formula = str 'здесь должно отобразиться слово из диалогового окна
     
        nr = InputBox("Введите номер строки: ") 'появляется диалоговое окно в поле
        'которого  вводится любой номер строки, т.е. любая цифра
     
        Range("F1").Select
        Range("F1").Formula = "=HLOOKUP(RC[-1],C[-5]:C[-3],nr,FALSE)"
         
     
    End Sub
     
    Помоготе отредактировать макрос так, чтобы после введения во втором окне номера строки(цифры), этот номер строки отображался в формуле. Так как я записала, он в ячейку F1 записывает следующую формулу:
    =ГПР(E1;A:C;nr;ЛОЖЬ), а мне нужно чтобы в этой формуле отображалась бы цифра из диалогового окна, т.е, если я ввожу цифру 3, то формула должна буде выглядеть так
    =ГПР(E1;A:C;3;ЛОЖЬ),  
    если ввожу 41, то так
    =ГПР(E1;A:C;41;ЛОЖЬ),

    Всего записей: 40 | Зарегистр. 20-10-2006 | Отправлено: 13:50 30-10-2006 | Исправлено: Pantera3587, 15:18 30-10-2006
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pantera3587
    Range("F1").Formula = "=HLOOKUP(RC[-1],C[-5]:C[-3]," & nr & ",FALSE)"

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 19:52 30-10-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