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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Igor83o
    Посмотри здесь, может поможет:
    http://support.microsoft.com/default.aspx/kb/194975

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 23:28 29-06-2006
    RUSmafia



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    как добраться до Properties в Global Contact List с Outlook'a в экселе?
     я уже честно говоря уже в отчаянии..всё перерыл...нигде толкового ответа найти не могу.

    Всего записей: 556 | Зарегистр. 31-07-2002 | Отправлено: 02:08 01-07-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    RUSmafia
    Да вроде в Гугле полно инфы по
    Код:
    Excel VBA Outlook "Global Address List"

    Если что-то не получается, то давай конкретнее - что надо сделать, какой код пробовал и т.д.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 08:56 01-07-2006
    lucky_Luk

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Твой мактрос "RankIt" не пашет под русским Офис 97, при выполнении выдает ошибку, а отладчик ругается на строку "a = t". У кого есть Офис 97 проверьте пожалуйста, а то я до понедельника на работу не доберусь, а дома стоит 2003.

    Всего записей: 7100 | Зарегистр. 29-11-2004 | Отправлено: 16:59 01-07-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    lucky_Luk
    В 97-м офисе по другому работа с динамическими массивами. У меня его нет, так что извини.
    Попробуй убрать () в строках:
    Dim aArray() As Variant
    и
    Dim t() As Variant
     
    проверено - работает

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 19:05 01-07-2006 | Исправлено: Yuk, 22:09 07-07-2006
    Maks07

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожайлуста: есть таблица в которой фамилии и возраст работников, надо создать цикл в котором Excel поочередно копировал бы фамилии и возраст работника из таблицы и вставлял их в другой лист и печатал. Если кто знает подскажите pliiiizzz.

    Всего записей: 4 | Зарегистр. 03-07-2006 | Отправлено: 12:05 03-07-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks07
    Другой лист - это бланк? Каждого работника надо печатать по отдельности?
    Задача не сложная, но описание явно не достаточно. Попробуйте записать макрос и запустить его. Зайдите в VBA редактор (Alt-F11) и посмотрите на код. Для цикла надо будет использовать код типа:
    Код:
    For Each row in ActiveSheet.UsedRange.Rows
       newsheet.Cells(x1,y1).Value=row.Cells(1,name).Value
       newsheet.Cells(x2,y2).Value=row.Cells(1,age).Value
    Next
    name - номер столбца с фамилией, age - с возрастом.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 16:22 03-07-2006 | Исправлено: Yuk, 16:26 03-07-2006
    Maks07

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да другой лист это бланк и работников печатать по отдельности. В нес данные отпечатал, внёс отпечатал итд. и так пока не кончится таблица.

    Всего записей: 4 | Зарегистр. 03-07-2006 | Отправлено: 16:28 03-07-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    [b]Maks07[/b]
    Так макрос пробовал записать или нет? Будут проблемы, давай код сюда. Если сильно большой код, используй тег more: какой-нибудь текст.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 16:38 03-07-2006
    Maks07

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Пример макроса, выполняется два повторения, нужно сделать цикл
     
    Attribute VB_Name = "Module4"
    Sub Макрос2()
    Attribute Макрос2.VB_Description = "Макрос записан 03.07.2006 (Макс)"
    Attribute Макрос2.VB_ProcData.VB_Invoke_Func = " \n14"
    '
    ' Макрос2 Макрос
    ' Макрос записан 03.07.2006 (Макс)
    '
     
    '
        Sheets("5-е отделение").Select
        Range("C5").Select
        Selection.Copy
        Sheets("Приемная квитанция").Select
        Range("B17:H17").Select
        ActiveSheet.Paste
        Sheets("5-е отделение").Select
        Range("D5").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Приемная квитанция").Select
        Range("C27:D27").Select
        ActiveSheet.Paste
        Sheets("5-е отделение").Select
        Range("C6").Select
        Sheets("Приемная квитанция").Select
        Application.CutCopyMode = False
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
        Sheets("5-е отделение").Select
        Range("C6").Select
        Selection.Copy
        Sheets("Приемная квитанция").Select
        Range("B17:H17").Select
        ActiveSheet.Paste
        Sheets("5-е отделение").Select
        Range("D6").Select
        Application.CutCopyMode = False
        Selection.Copy
        Sheets("Приемная квитанция").Select
        Range("C27:D27").Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
        Range("J16").Select
    End Sub

    Всего записей: 4 | Зарегистр. 03-07-2006 | Отправлено: 16:47 03-07-2006
    Yuk



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

    Код:
    Sub test()
        For Each r In Selection.Rows
            Sheets("Приемная квитанция").Range("B17:H17").Value = Cells(r.Row, 3).Value
            Sheets("Приемная квитанция").Range("C27:D27").Value = Cells(r.Row, 4).Value
            Sheets("Приемная квитанция").PrintOut Copies:=1, Collate:=True
            'Раскомментировать чтобы подождать 5 секунд
            'Application.Wait (Now + TimeValue("0:00:05"))
        Next
    End Sub

    Выделяешь строки, которые нужно вставить в бланк и запускаешь макрос.
    Последняя строка может пригодиться, если не хочешь перегружать принтер.
    Правильно ли, что фамилия копируется в 7 ячеек, а возраст в 2?

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 17:23 03-07-2006 | Исправлено: Yuk, 19:34 04-07-2006
    Maks07

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да ты всё верно понял, так это и всё или шщё что то надо.

    Всего записей: 4 | Зарегистр. 03-07-2006 | Отправлено: 17:41 03-07-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maks07
    Усе. Тестируй.
     
    Добавлено:
    Название у макроса смени. Вместо test.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 17:43 03-07-2006 | Исправлено: Yuk, 19:35 04-07-2006
    sonix555



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет,
    как сказать комбобоксу на листе1, использовать диапазон на листе2? Я имею ввиду ListFillRange.

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    sonix555
    Лист2!A1:A5

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:20 03-07-2006
    sonix555



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А я тут велосипеды изобретаю..
    Спасибо

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



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

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 03:49 04-07-2006
    zporuchik



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Никто нигде не встречал макрос транслита рус-англ и обратно (англ-рус)?
    Или такого в принцыпе быть не может?
    Макрос для рус-англ имеется.

    Всего записей: 2131 | Зарегистр. 17-03-2005 | Отправлено: 11:39 05-07-2006 | Исправлено: zporuchik, 12:00 05-07-2006
    Yuk



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

    Цитата:
    Никто нигде не встречал макрос транслита рус-англ и обратно (англ-рус)?
    Или такого в принцыпе быть не может?
    Может, но не встречал.  

    Цитата:
    Макрос для рус-англ имеется.
    В студию. Не забываем про [more].

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 03:54 06-07-2006
    Csen

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогай кто может, в VB команда:  
    m = Worksheets("1").Cells(d, 1)  
     
    в этой ячейке иногда бывает запись "#ЗНАЧ!" и макрос вешается, error 13, Type missmatch... что сделать что бы он "0" присваивал и не вылетал на этой строчке программы???

    Всего записей: 42 | Зарегистр. 15-07-2005 | Отправлено: 08:43 06-07-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