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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые спецы по VBA подскажите бестолковому.
    Ручками сохраняю таблицу EXCEL в формате CSV (MS-DOS), получаю текст с разделителями ";" (что мне и надо).
    Выполняю в макросе
        ActiveWorkbook.SaveAs Filename:= _
            "Filename.txt", FileFormat:=xlCSVMSDOS  
    получаю разделители "," и впридачу расширение .csv

    Всего записей: 5 | Зарегистр. 18-11-2003 | Отправлено: 09:09 11-11-2004
    Tropin



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    john60
    Действительно, похоже на баг :)

    Всего записей: 538 | Зарегистр. 25-11-2002 | Отправлено: 10:41 11-11-2004
    Troitsky



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

    Цитата:
    и впридачу расширение .csv

    При сохранении с использованием твоего кода сохраняет файлом "*.txt" без приписки ".csv".
     
    Касательно разделителя: похоже в твоем случае просто игнорируется разделитель, установленный ключем Format (=Delimited(;)) раздела HKEY_LOCAL_MACHINE\software\Microsoft\jet\4.0\engines\text реестра.
    Да и не было, по-моему, конкретной определенности по поводу разделителя в csv-файлах. Вроде в версиях выше XP жестко остановились на ";". Описанное тобой явление может быть отголоском этих разногласий.

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 21:25 11-11-2004 | Исправлено: Troitsky, 21:26 11-11-2004
    yuraskas



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А подскажите, как сделать: допустим у меня котовый макрос, как сделать чтобы при запуске excel'ского файла, кнопка автоматически добавлялась в меню. А то допустим на другом компе ее пришлось вручную ставить.

    Всего записей: 530 | Зарегистр. 06-06-2003 | Отправлено: 10:29 15-11-2004
    Troitsky



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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 20:23 15-11-2004
    yuraskas



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Своя кнопка макроса, да в любом меню, ну например "Данные" или рядом с основными кнопками екселя, главное, как прописать чтобы она появлялась на любой машине, где я запускаю совой екселевский файл.
     
    Добавлено
    И еще один очень важный вопросик: Есть лист с фамилиями, есть форма с listbox где тоже фамилии. Нужно чтобы при выборе в listboxе фамилии, она производила поиск на листе, и если такая же фалмилия находилась, она выделялась.
    Подскажите плз, а то чет не получается никак.

    Всего записей: 530 | Зарегистр. 06-06-2003 | Отправлено: 07:31 16-11-2004 | Исправлено: yuraskas, 09:57 16-11-2004
    Troitsky



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

    Код:
     
    Private Sub Workbook_Open()
     Set MyMenu = Excel.Application.CommandBars("Data").Controls.Add(Type:=msoControlButton, ID:=850)
     With MyMenu
      .Caption = "Мой макрос" ' Наименование твоего пункта меню
      .OnAction = "Макрос1" ' Имя твоего макроса
     End With
    End Sub
     

    Этот, код при открытии книги, добавляет в меню "Данные" пункт "Мой макрос", при выборе которого выполняется Макрос1.

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 11:34 17-11-2004
    Smog



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

    Цитата:
    Этот, код при открытии книги, добавляет в меню "Данные" пункт "Мой макрос", при выборе которого выполняется Макрос1.

    а удалять этот пункт меню при закрытии не надо?  
    yuraskas

    Цитата:
    Есть лист с фамилиями, есть форма с listbox где тоже фамилии. Нужно чтобы при выборе в listboxе фамилии, она производила поиск на листе, и если такая же фалмилия находилась, она выделялась.
    Подскажите плз, а то чет не получается никак.

    Что именно выделялось? ячейка, содержащая фамилию?
     
     

    Код:
    Private Sub ListBox1_Click()
     Cells.Find(What:=ListBox1.ListIndex, After:=ActiveCell, LookIn:=xlValues, LookAt _
            :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=False).Activate
    End Sub



    ----------
    Клиент форума Ru-board (Rb_client)-с предварительной поддержкой ру-борда!
    Требуются бета-тестеры!
    Обновление v0.0.3.6 (21.04.08)!

    Всего записей: 5394 | Зарегистр. 20-06-2003 | Отправлено: 13:41 17-11-2004 | Исправлено: Smog, 13:43 17-11-2004
    Troitsky



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

    Цитата:
    а удалять этот пункт меню при закрытии не надо?  


    Код:
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Excel.Application.CommandBars("Data").Controls(Excel.Application.CommandBars("Data").Controls.Count).Delete
    End Sub

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 20:49 17-11-2004
    Smog



    Жираф-Сибиряк
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    так-то лучше

    ----------
    Клиент форума Ru-board (Rb_client)-с предварительной поддержкой ру-борда!
    Требуются бета-тестеры!
    Обновление v0.0.3.6 (21.04.08)!

    Всего записей: 5394 | Зарегистр. 20-06-2003 | Отправлено: 21:24 17-11-2004
    yuraskas



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

    Всего записей: 530 | Зарегистр. 06-06-2003 | Отправлено: 20:40 20-11-2004
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ну, если честно, то код удаления пункта меню при закрытии Excel'я малость кривоват: если в процессе работы с документом пользователю вздумается настроить менюшки под себя и пункт меню "Мой макрос" будет уже не последним пунктом меню "Данные", то удалитья все же последний пункт, а "Мой макрос" останется неудаленным.
    Поэтому для получения универсального кода нужно индекс Excel.Application.CommandBars("Data").Controls.Count заменить на более подходящий - развивай идею
    Кстати, сообща можно тут неплохой примерчик на эту темку состряпать Думаю, востребованным будет.

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 12:56 21-11-2004
    wtt



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

    Всего записей: 106 | Зарегистр. 05-02-2004 | Отправлено: 10:24 08-12-2004
    Smog



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

    Цитата:
    1.Как определить кол-во непустых ячеек в строке/столбце?

    stolb=1 'столбец А
    sum=0
    for i=1 to 20000 ' хватит столько?
    if cells(i,stolb) <> '' then  sum = sum +1
    next i
    msbox sum
     
     
    Добавлено
    wtt

    Цитата:
    2.Как упорядочить числа в массиве по убыванию/возрастанию?

    Методом пузырька, например


    ----------
    Клиент форума Ru-board (Rb_client)-с предварительной поддержкой ру-борда!
    Требуются бета-тестеры!
    Обновление v0.0.3.6 (21.04.08)!

    Всего записей: 5394 | Зарегистр. 20-06-2003 | Отправлено: 13:08 08-12-2004
    slashuz

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

    в VBA новичок, хотя опят программирования большой, написал программу одну, она из  
    базы данных выбирает данные и производит манипуляции с ними, вот какие вопросы накопились.
     
    1 база данных храниться в экселевском файле( ~5000 элементов)
    подключаюсь так
      Set db = New ADODB.Connection
       With db
        .Provider = "MSDASQL"
        .ConnectionString = "DSN=local_db;"
        .CursorLocation = adUseClient
        .Open
       End With
     
    Set records = New ADODB.Recordset
    records.Open "Select * from [db$] where index = '112', db
     
    этот запрос длиться  около 2 минут, можно ускорить? или нужно переводить в что-нить типа DBF?  
     
    2 VBA код действует только на одной страничке экселя, если добвить новый лист, то там он уже не действует, так как он туда не переноситься, куда нужно писать код чтобы он действовал на каждом листе книги
     
    3 Как добавить книгу со своим кодом в шаблоны?
     
     
     
     

    Всего записей: 112 | Зарегистр. 24-01-2003 | Отправлено: 16:21 08-12-2004
    Smog



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

    Цитата:
     куда нужно писать код чтобы он действовал на каждом листе книги

    в модули...


    ----------
    Клиент форума Ru-board (Rb_client)-с предварительной поддержкой ру-борда!
    Требуются бета-тестеры!
    Обновление v0.0.3.6 (21.04.08)!

    Всего записей: 5394 | Зарегистр. 20-06-2003 | Отправлено: 18:07 08-12-2004
    slashuz

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

    Цитата:
    в модули...

     
    а можно пример? где они эти модули?
     
    PS:Нашел модули, но у меня код находиться в обработчике  
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    End Sub
     
    как его запихнуть в модули чтобы он для всех листов действовал?
     

    Всего записей: 112 | Зарегистр. 24-01-2003 | Отправлено: 07:25 09-12-2004 | Исправлено: slashuz, 09:38 09-12-2004
    SebSeb

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Мне нужно в цикле обращаться к ячейкам с именами a_1, a_2,.....a_20.
    Подскажите, плз, как это должно выглядеть, я написал так
    For x = 1 To 20
    Range (a_"x") = .......
     
    Сам понимаю, что не правильно,  а как сформировать имя из слова и переменной?

    Всего записей: 59 | Зарегистр. 04-02-2002 | Отправлено: 00:39 17-12-2004
    Tropin



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    SebSeb
    А зачем так все усложнять?
    не проще ли обращаться к ячейкам по их номерам, если уж все-равно нужно от 1 до 20...

    Всего записей: 538 | Зарегистр. 25-11-2002 | Отправлено: 10:32 17-12-2004
    SebSeb

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Дело в том, что ячейки в разных местах на листе.

    Всего записей: 59 | Зарегистр. 04-02-2002 | Отправлено: 10:37 17-12-2004
       

    Страницы: 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