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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
     
    У меня такая проблема. Мне надо чтобы за один день конкретной даты (дата, например, в ячейке В1, В2...), закрашивались ячейки напротив и вылезал какой-нибудь флажок.
     
     
    Подскажите, если это возможно!

    Всего записей: 1 | Зарегистр. 09-04-2007 | Отправлено: 22:22 09-04-2007
    AndVGri

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

    Цитата:
    акрашивались ячейки напротив

    Можно условным форматированием, к чему тут VBA?

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 04:21 10-04-2007
    roz21



    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите новичку.
    Не знаю как это называется, но задача такая: есть список ФИО, Адресов, Паспортных данных, и др. данных, создана форма (лист формата А4) в кот вставляются данные из этого списка, в разные места с функциями СЦЕПИТЬ и ЗАМЕНИТЬ. Нужно сформировать форму для каждой строки из списка, но при "вытягивании" все данные берутся не так как хочется. Т.е. например нужно G2=Лист2:G1
                             G22=Лист2:G2
                             G42=Лист2:G3 и т.д.
     
    а получается:    G2=Лист2:G1
                             G22=Лист2:G22
                             G42=Лист2:G42 и т.д.
     
    Можно ли как то это решить?

    Всего записей: 5 | Зарегистр. 19-07-2006 | Отправлено: 00:16 12-04-2007
    The okk



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

    Цитата:
    есть список ФИО, Адресов, Паспортных данных, и др. данных

    Где?

    Цитата:
    создана форма (лист формата А4)

    Давайте называть вещи своими именами. Форма - это лист экселевской книги?

    Цитата:
    в кот вставляются данные из этого списка, в разные места с функциями СЦЕПИТЬ и ЗАМЕНИТЬ.

    Где-то есть данные (где - пока неясно), эти данные надо перенести на лист.

    Цитата:
    но при "вытягивании" все данные берутся не так как хочется.

    А КАК они берутся?
    То есть, как они берутся сейчас и как они должны браться. Я понимаю, что есть ошибка, но сказать, где она, по предложенному описанию установить невозможно

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 07:32 12-04-2007
    IUnknown777



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

    Всего записей: 212 | Зарегистр. 20-04-2006 | Отправлено: 19:49 12-04-2007
    RedPromo



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

    Цитата:
    Public Function Find(Val As Variant) As Range
        Dim Shet As Worksheet
        For Each Shet In ActiveWorkbook.Worksheets
            Set c = Shet.Cells.Find(What:="24", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False)
            If Not c Is Nothing Then
                Set Find = c
                Shet.Select
                c.Activate
                Exit Function
            End If
        Next
    End Function


    Всего записей: 558 | Зарегистр. 05-04-2006 | Отправлено: 23:04 12-04-2007
    genf

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как в Exel задать гамма-функцию. В явном виде, как в Mathcad нет (в справке написаны кое какие сведения, но ничего не получается). Например в Mathcad гамма-функция вычисляется очень просто - Г(3,2)=1,353. А как это сделать в Exel?

    Всего записей: 8 | Зарегистр. 17-03-2007 | Отправлено: 23:50 12-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    IUnknown777
    Тут VBA не нужен. С такими вопросами - в тему по Excel.
    Делается очень просто:
    1. Ctrl + F либо Правка -> Найти (открывается окно поиска)
    2. В открывшемся окне поиска на закладке "Найти" жми кнопку "Параметры >>".
    3. В параметрах выбираешь:
      В графе "Искать:" в книге
      В графе "Область поиска:" значения
    4. Жмешь "Найти все"

    И будет тебе счастье.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 07:08 13-04-2007
    Olive77

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    genf
    не совсем в тему. Разве, что ты планируешь программировать функцию.
     
    Посмотри надстройку SimulAr (бесплатна должна быть).
     
    P.S.: у меня в Excele эта ф-я есть (_http://office.microsoft.com/en-us/excel/HP052091011033.aspx). Или имеется в виду, что-то узкоспецифичное?

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 11:42 13-04-2007 | Исправлено: Olive77, 11:57 13-04-2007
    Mpa3b



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

    Цитата:
     
    А куда без таких событий? SheetChange для Application, Workbook; Change - для Worksheet.  
    Во всех случаях - передается объект класса Range....
    Если не секрет, зачем вводятся  
    Цитата:символов    
    (tab, enter

     
    Спасибо.
     
    есть, например текст, копируем его, и по спецсимволам обрезать, переносить, фильтровать...
    например, хочу, что бы после 3 слов автоматически смена ячейки была, ввожу,
    ввожу, а оно само "укладывается"
     И спросил с умыслом еще, если символ я введу, это точно изменение содержимого ячейки будет,
    а вот спецсимвол? Например, Enter?  
     

    Всего записей: 1101 | Зарегистр. 23-03-2004 | Отправлено: 17:05 13-04-2007 | Исправлено: Mpa3b, 17:10 13-04-2007
    konfetkin

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    функция получает A1:B3 например. координаты первой ячейки я узнаЮ через arr.column и arr.row.
    а вот как получить координаты последней ячейки или размер массива?
    сам не программер, спросить больше не у кого. поможите чем можите.

    Всего записей: 29 | Зарегистр. 22-09-2006 | Отправлено: 12:37 14-04-2007
    SERGE_BLIZNUK

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

    Цитата:
     вот как получить координаты последней ячейки или размер масс

    через arr.Columns.Count arr.Rows.Count
    вот, пример, для события Worksheet.Change
    Код:
     
    Private Sub Worksheet_Change(ByVal Target As Range)
      R1 = Target.Row
      R2 = R1 + Target.Rows.Count - 1
      C1 = Target.Column
      C2 = C1 + Target.Columns.Count - 1
      MsgBox "From " & R1 & "," & C1 & "  to " & R2 & "," & C2
    End Sub


    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 14:20 14-04-2007
    konfetkin

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

    Цитата:
    через arr.Columns.Count arr.Rows.Count  

    Спасибо!

    Всего записей: 29 | Зарегистр. 22-09-2006 | Отправлено: 20:05 14-04-2007
    aar



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

    ----------
    * * *

    Всего записей: 7080 | Зарегистр. 20-11-2003 | Отправлено: 09:37 16-04-2007
    AndVGri

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

    Цитата:
    есть, например текст, копируем его, и по спецсимволам обрезать, переносить, фильтровать...

    функцией split можно разбить текст по любому набору символов, включая и спецсимволы.
    Более качественно можно через RexExp

    Цитата:
    например, хочу, что бы после 3 слов автоматически смена ячейки была, ввожу,  
    ввожу, а оно само "укладывается"

    Это не выйдет. События Change (любые, генерируются только в случае завершения ввода: переход после ввода в другую ячейку или нажатие Enter)

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 10:16 16-04-2007
    The okk



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

    Код:
    lngLastRowInColumn = Selection.Find(*).Row

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 10:16 16-04-2007
    aar



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    Благодарю. Только не работает.
     


    Иногда возникает ситуация, когда условие сравнения значений в столбцах двух листов
    Код:
    Worksheets(1).Cells(i, 1).Value = Worksheets(2).Cells(j, 1).Value

    используемого в циклах For, не срабатывает, хотя заведомо известно, что есть пересекающиеся данные. Тип ячеек ставил в обоих листах и на текстовый, и на числовой - безрезультатно. Функция при этом StrComp работает.
     
    В чем может быть дело?


    ----------
    * * *

    Всего записей: 7080 | Зарегистр. 20-11-2003 | Отправлено: 12:02 16-04-2007 | Исправлено: aar, 14:52 16-04-2007
    The okk



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

    Цитата:
    Иногда возникает ситуация, когда условие сравнения значений в столбцах двух листов

    Код:
    Worksheets(1).Cells(i, 1).Value = Worksheets(2).Cells(j, 1).Value  

    используемого в циклах For, не срабатывает, хотя заведомо известно, что есть пересекающиеся данные

    Это попытка найти значения первого столбца первого листа в первом столбце второго? Скорее всего, пересекающихся данных действительно нет (возможно, есть какие-то пробелы или непечатные символы).

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 12:44 16-04-2007
    aar



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

    Цитата:
    Это попытка найти значения первого столбца первого листа в первом столбце второго?

    Да.
     

    Цитата:
    пересекающихся данных действительно нет

    По Ctrl+F находит значение в обоих листах.
     

    Цитата:
    есть какие-то пробелы или непечатные символы

    StrComp корректно отрабатывает сравнение, т.е. находит одинаковые данные на обоих листах.

    ----------
    * * *

    Всего записей: 7080 | Зарегистр. 20-11-2003 | Отправлено: 13:36 16-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    aar
    И что нужно сделать, если, скажем в А10 второго листа лежит значение А1 первого? Скорее всего задача решается вообще без макроса - только формулами.
    При использовании Ctrl+F ставил галочку "Ячейка целиком"?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 14:53 16-04-2007
       

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