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

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



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

    Цитата:
    Set myBook = Workbooks.Open(Filename:="С:\test.xls")  

    Workbooks.Open "С:\test" - вот таким макаром можно открыть файл.  
    Почему он у тебя к диску М обращается - этого не знаю.
    Ну а если уж надо Set использовать (зачем?), то Set mybook = Workbooks.Open(Filename:="C:\test").

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 08:32 17-11-2006 | Исправлено: The okk, 08:42 17-11-2006
    Troitsky



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

    Цитата:
    Set myBook = Workbooks.Open(Filename:="С:\test.xls")  
     
    выдает ошибку:  
    1004

    А ты имя диска латинской "C" пиши, а не русской "С"


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 09:18 17-11-2006
    NPC



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

    Всего записей: 8943 | Зарегистр. 17-02-2005 | Отправлено: 11:04 17-11-2006
    SERGE_BLIZNUK

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

    Цитата:
    мне помогите пожайлуста, или слишком трудная задачка

    сформулируйте, что вы хотели получить...

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 11:45 17-11-2006
    TONADOOM



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    может кто подскажет ...
    в ячейке хранится адрес страницы в интернете (например http://forum.ru-board.com/topic.cgi?forum=33&topic=3961&start=960) надо эту страницу из кода сохранить на диск , например в D:\HTM  с именем tekst.htm , кроме кода страницы ничего не надо , для последующей обработки .
    ну не получается самому , хоть подскажите в каком направлении искать.

    ----------
    всё, что ни случается - случается к лучшему
    чему быть - того не миновать
    а хорошо жить ешё лучше

    Всего записей: 205 | Зарегистр. 02-09-2002 | Отправлено: 11:46 17-11-2006 | Исправлено: TONADOOM, 11:47 17-11-2006
    NPC



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

    Цитата:
    NPC  
     
    Цитата:мне помогите пожайлуста, или слишком трудная задачка  
     
     
    сформулируйте, что вы хотели получить...

    из одной книги А1,А2,А3, и т.д. перевести числа в шеснатеричный формат в другую книгу в А1,А2,А3, и т.д
    тоже самое и с В1, В2,В3 так же в новую книгу
    затем А1 и В1 объеденить, и так далее и в освободившемся колонки В дописать 25002 и тоже объеденить в А, или дописать можно сразу в А колонке
    надеюсь доступно объяснил.

    Всего записей: 8943 | Зарегистр. 17-02-2005 | Отправлено: 11:58 17-11-2006 | Исправлено: NPC, 12:00 17-11-2006
    omikron



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

    Всего записей: 13 | Зарегистр. 06-02-2006 | Отправлено: 12:08 17-11-2006
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа, возник вопрос.
     
    Есть таблицы в Excel одинаковой структуры, которые периодически (и в разном количестве) необходимо экспортировать в Access (добавлять в уже существующую базу данных). Руками это делать надоело, назрела необходимость написания макроса, но столкнулся с полным отсутствием документации по экспорту таблиц в Access.  
    Если кто-то решал подобные задачи - дайте хотя бы пример или ссылку на ресурс, где про это можно узнать больше (можно англо/германо-язычный).

    Всего записей: 2975 | Зарегистр. 04-01-2005 | Отправлено: 13:19 17-11-2006
    kramrus

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    А как выложить файл?

    Всего записей: 27 | Зарегистр. 07-11-2006 | Отправлено: 13:37 17-11-2006
    jONES1979



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    mrdime
     
    Создаешь объект  ADO recordset, связываешь его с mdb-файлом и нужной табличкой, далее в цикле по листу Екселя, выбираешь нужные данные и добавляешь их в recordset

    Всего записей: 324 | Зарегистр. 20-05-2005 | Отправлено: 14:21 17-11-2006
    omikron



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите избавиться от ..
     
    При копировании листа в другую книгу выдает сообщение  
    "Перемещаемая или копируемая формула или лист содержит имя 'а', которое уже имеется на листе. ...."
     
    В списке имен по Ctrl-F3 этих имен нет, в панеле формул (где имя ячейки) тоже нет.
    Как убрать этот мусор?
     
    Спасибо.

    Всего записей: 13 | Зарегистр. 06-02-2006 | Отправлено: 15:18 17-11-2006
    Troitsky



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

    Цитата:
    надеюсь доступно объяснил


    Код:
      Dim i As Integer, j As Integer
       
      With Worksheets(1)
        For i = 1 To .UsedRange.Columns.Count Step 2
          For j = 1 To .UsedRange.Rows.Count
            Worksheets(2).Cells(j, i).Value _
              = Hex(.Cells(j, i).Value) _
              & Hex(.Cells(j, i + 1).Value) _
              & "25002"
          Next j
        Next i
      End With

    Так подойдет?
     
     
    Добавлено:
    omikron

    Цитата:
    каким образом скопировать из активной книги лист во вновь созданную

    Создаем новую книгу и копируем туда перед первым листом второй лист из активной книги:
    Код:
      Set newBook = Workbooks.Add
       
      ActiveWorkbook.Sheets(2).Copy Before:=newBook.Sheets(1)
      newBook.Sheets(1).Activate
       
      Set curBook = Nothing
    Или тебе нужно, чтобы в любую вновь создаваемую книгу вставлялись уже заполненные определенным образом листы из заранее подготовленной книги? Если так, то нужно пользовать личную книгу макросов (personal.xls). Код похожий будет.


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 19:56 17-11-2006 | Исправлено: Troitsky, 20:04 17-11-2006
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NPC
    Troitsky
    мне кажется, что ему ( NPC ) проще надо...  
    Если я правильно его понял, то ему нужно из одной книги стобцы A и B перевести в hex, объединить, дописать "25002" и результат поместить в столбец A другой книги.
     
    Похоже, что один цикл лишний (хотя, если у него всего два стобца заполнены, он этого даже не заметит ;-))))
    Код:
     
    Dim i As Integer, j As Integer  
      With Worksheets(1)  
          For j = 1 To .UsedRange.Rows.Count  
            Worksheets(2).Cells(j, 1).Value _  
              = Hex(.Cells(j, 1).Value) _  
              & Hex(.Cells(j, 2).Value) _  
              & "25002"  
          Next j  
      End With  

     
    kramrus
    Цитата:
    А как выложить файл?

    сначала хотел в личку написать, а потом решил, вдруг ещё кому-то пригодится...
    есть огромная куча сервисов в интернете, которые позволяют разместить у себя ваш файл (т.н. файл-обменники). Например,  
    http://slil.ru  
    http://www.mytempdir.com
    http://ifolder.ru
    http://www.paid4load.com
    и, конечно, самый известный рапидшара -  http://rapidshare.com
    на любой из них заходите, нажимаете кнопку "Обзор" (или "Browse"), выбираете ваш файл (его лучше предварительно запаковать и имя архиву дать английскими буквами - не все обменники дружат с русскими названиями. Кстати, запаковать можно с паролем - тогда вы сможете быть уверенным, что кроме того, кому вы сообщили ссылку на файл и пароль, никто не сможет его просмотреть), потом жмакаете "Загрузить" ("Upload").
    Получаете ссылочку. вот её и публикуете. вуаля.

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 08:07 18-11-2006
    kramrus

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    В EXEL пишем формулу =ИНДЕКС('G:\Люда\[Октябрь 2006.xls]ОШ №11'!$F$19:$BY$418;ПОИСКПОЗ(F19;'G:\Люда\[Октябрь 2006.xls]ОШ №11'!$F$19:$F$418;0)+2;57)
    РАБОТАЕТ.  
    Пишу макрос  
     
    Sub Макрос303()  
       Range("AT19").Formula = "ИНДЕКС('G:\Люда\[Октябрь 2006.xls]ОШ №11'!$F$19:$BY$418;ПОИСКПОЗ(F19;'G:\Люда\[Октябрь 2006.xls]ОШ №11'!$F$19:$F$418;0)+2;57)"  
    End Sub  
     
    НЕ РАБОТАЕТ.  
    Почему????  
     
    Я обрезал лишние формулы и числа. Мне в ячейках AT, AW, AY, BA, BC, BE, BG нужно получить данные из другой книги, формула в этих ячейках (не во всех строках, только напротив Ф.И.О.). Поскольку макросы только учу, в них часть формулы: ИНДЕКС, ПОИСКПОЗ.
    Файл лежит здесь http://ifolder.ru/461527 объем 143 кб.

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



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

    Цитата:
    мне кажется, что ему ( NPC ) проще надо...  
    Если я правильно его понял, то ему нужно из одной книги стобцы A и B перевести в hex, объединить, дописать "25002" и результат поместить в столбец A другой книги.
    Похоже, что один цикл лишний (хотя, если у него всего два стобца заполнены, он этого даже не заметит )))

    Тогда уж проще формулой:
    Код:
    =ДЕС.В.ШЕСТН(Лист1!A1)&ДЕС.В.ШЕСТН(Лист1!B1)&"25002"
    Так каждый раз не придется макрос вызывать при изменении данных.
     
     
    Добавлено:
    kramrus
    Елки-палки! Так ведь если ты программно формулы записываешь, ты должен параметры функций не точкой с запятой разделять, а запятой И перепиши все таки формулы используя английские наименования функций - так надежнее и правильнее будет.


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 13:49 18-11-2006
    SERGE_BLIZNUK

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

    Цитата:
    Код:=ДЕС.В.ШЕСТН(Лист1!A1)&ДЕС.В.ШЕСТН(Лист1!B1)&"25002"  
    Так каждый раз не придется макрос вызывать при изменении данных.  

    YES!! Точно! Вот, крутилось, крутилось в голове... я тоже такое придумал, только меня смутило, что человеку нужен именно макрос ;-)) Имхо, это правильное решение...
     
    kramrus я взял ваш файлик, посмотрю, отпишусь.

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 14:45 18-11-2006
    omikron



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет!
    Подскажете пожалуйста,
     
    Требуется заполненный лист скопировать в файл результатов:
    запись типа Sheets("Приложение").Copy Before:=Sheets(2)
    создает копию в этой же книге, как этот лист перенести в другую книгу?
     

    Всего записей: 13 | Зарегистр. 06-02-2006 | Отправлено: 09:42 19-11-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    omikron
    пятью постами выше я тебе пример уже писал. задаешь вопросы, а на ответы даже не смотришь.


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

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



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ССОРИ, я в торопях глянул и не увидел.
     
    Но после Set newBook = Workbooks.Add  
    фокус переходит на новую книгу и если копирует, то уже чистый лист в ней.
    при этом сразу дает ошибку run-time error 9. Subscript out of range.
     
    Наверное надо вернуться в свою книгу?

    Всего записей: 13 | Зарегистр. 06-02-2006 | Отправлено: 13:52 19-11-2006
    Troitsky



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

    Цитата:
    Но после Set newBook = Workbooks.Add    
    фокус переходит на новую книгу и если копирует, то уже чистый лист в ней.

    Тогда вместо ActiveWorkbook укажи конкретную книгу, из которой хочешь произвести копирование.
    Если нужно использовать книгу, которая была активной до
    Код:
     Workbooks.Add
    то можно, например, перед этим вставить такое
    Код:
      Set oldBook = ActiveWorkbook
    и в дальнейшем эже это использовать, например, так:
    Код:
    oldBook.Sheets(2).Copy Before:=newBook.Sheets(1)



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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 14:16 19-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