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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)

Модерирует : ShIvADeSt

ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

ShIvADeSt



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

 
 
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format (eng.)
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами 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.
  • Приемы, хитрости, трюки и нюансы работы в Microsoft Excel - сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
  • Microsoft Excel: Таблицы и VBA. Справочник. Вопросы и Ответы. Советы. Примеры.  
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2, часть 3
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов
    Найти "чужое" окно и нажать в нем кнопку (вписать текст в текстовое поле)
    Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно
    Как программно подключить дополнительные библиотеки (например, "Microsoft Scripting Runtime" или "Microsoft ActiveX Data Objects 2.8 Library) через References

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:58 23-04-2007 | Исправлено: JekG, 22:32 10-01-2010
    divik



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята помогите, нужно облегчить труд при составлении калькуляций на изготовления металлоконструкций!!!
    (да и вообще для состовления стоимости работ по определенным видам работ)
    в шапке имеем:
     №п/п,Вид работ,разряд работ,кол-во рабочих,стоимость 1 чел/час,
    норма временив часах на опред.кол-во,объем работ,Трудозатраты чел-час,
    Стоимость выполненных работ.
    Как сделать так , чтобы вид работ заполнялся из списка,
    (c другова листа,где находится весь перечень работ)(выбирая одну работу допустим ), при этом сразу заполнялись строки относящиеся к этой работе:разряд работ,кол-во рабочих,стоимость 1 чел/час,
    норма временив часах на опред.кол-во,
    чтобы потом ввести только объем работ и получить речультат:Трудозатраты чел-час,
    Стоимость выполненных работ.
    Вот пример (весит 8кб):
    http://slil.ru/24516001

    Всего записей: 94 | Зарегистр. 28-09-2005 | Отправлено: 09:13 15-06-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    divik
    Так чем помочь, что в коде не получается? Или тебе сюда

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 10:47 15-06-2007
    GFSGF

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Большое спасибо.Всё работает

    Всего записей: 29 | Зарегистр. 03-05-2007 | Отправлено: 20:49 16-06-2007
    M1chA



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди!помогите пожулуйста!  
    клиент попросил разобраться в том,как сменить время работы программы.  
    Что-то у меня не получилось понять эту фишку.  
    Выкладываю код основного модуля проги.  
    Язык:Excel VBA.  
    Если нужно,вышлю всю прогу на мыло.  
    Подробнее...




    предупреждение за дублирование сообщения. Учимся использовать тег more

    Всего записей: 283 | Зарегистр. 11-10-2006 | Отправлено: 00:58 18-06-2007 | Исправлено: ShIvADeSt, 01:31 18-06-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    M1chA
    Закомментируй Exit Sub в процедуре Auto_Open

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 05:38 18-06-2007
    M1chA



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

    Всего записей: 283 | Зарегистр. 11-10-2006 | Отправлено: 13:41 18-06-2007
    AndVGri

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

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

    Да, будет выдавать только сообщение - купите (хотя и не тестил, может и в другом месте, что есть - проверь)

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

    А какие проблемы? Пиши - исходники ж на руках

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 14:02 18-06-2007
    M1chA



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
     
    Это понятно-пиши.
    На что переносить,чтобы почти не изменять код
    Excel VBA и Visual Basic они одинаковы?

    Всего записей: 283 | Зарегистр. 11-10-2006 | Отправлено: 14:12 18-06-2007
    silver007

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день.
    Помогите разрулить:
    есть две рабочих книги- строки из одной по ключу ищутся в другой и  
    делается подмена данных.
    Примерный макрос:
    Sub Scepka()
     
    Dim prm As String
    Dim fileToOpen
    Dim z_row As Integer, vStroka As Integer
    Dim sourceWB As Workbook
    Dim Name_WB As Workbook
    ...
    Set sourceWB = Application.ActiveWorkbook
     
    prm = Range("A15").Value
    z_row = CStr(15)
     
    Range("A" & z_row & ":K" & z_row).Select
    Selection.Copy
     
    Name_WB.Activate
    '???????????????
    vStroka = Worksheets(1).Cells.Find(What:=CStr(prm), After:=[A10], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Row
     
    Range("A" & vStroka & ":K" & vStroka).Select
    ActiveSheet.Paste ' вставка
     
    End Sub
    Если все оставить как есть то после выполнения строки vStroka = ... макрос выходит на ошибку. Если перед ней указать prm="12345", то все работает. Эта переменная ранее была определена и она не пуста. Логики нет, либо она идет параллельным курсом? Или Activate что-то портит, если его закомментировать, опять все работает

    Всего записей: 7 | Зарегистр. 13-10-2005 | Отправлено: 18:14 18-06-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    M1chA
    Можешь и на VB создать надстройку
     
    silver007

    Цитата:
    Dim prm As String  

    Зачем делать
    Цитата:
    CStr(prm)
    ?
    Замени

    Цитата:
    vStroka As Integer

    на

    Код:
     
    vStroka As Long
     

     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 18:34 18-06-2007
    divik



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

    Цитата:
    Так чем помочь, что в коде не получается

     
    ............да нет вообще ничего....есть тока таблица в EXel..
    ....вот жду советов........

    Всего записей: 94 | Зарегистр. 28-09-2005 | Отправлено: 08:18 19-06-2007
    silver007

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

    Цитата:
    AndVGri

    CStr убрал, но оно не мешало

    Цитата:
    vStroka As Long

    сделал
    Все равно пишет Run-Time Error '91':
    Object variable or With blok variable not set
     
     
     
    Добавлено:
    все, сам победил
    сделал
    prm = Trim(CStr(Range("A15").Value))
    и все заработало
    Worksheets(1).Cells.Find(What:=prm,....
    видно пробелы не любит

    Всего записей: 7 | Зарегистр. 13-10-2005 | Отправлено: 09:39 19-06-2007
    M_a_s_i_k

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ  отзовитесь  в чем  проблема очень надо разобраться Object doesn't support this action (Error 445)
    Цитата:
    Народ прошу помощи есть макрос который работает на Excel 2003 поставил Excel 2007  
    перестал работать выдает ошибку "Object doesn't support this action (Error 445)" вот на это  "Set fs = Application.FileSearch"    
     
    Сам макрос Тут >>>  
    Заранее спасибо.

     
     

    Всего записей: 11 | Зарегистр. 31-01-2006 | Отправлено: 11:57 19-06-2007 | Исправлено: M_a_s_i_k, 12:17 19-06-2007
    Diadema



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Может уже где-то спрашивали.. Хотя вроде нет..
    У меня появляется такая ошибка. Заношу данные в массив из Range
    Faces = fData.Range("A$2:" & fData.Range("B:B").Columns.End(xlDown).Address).Value
     
    Так вот, хотя все данные в этих строках типа String, но при указании массива Faces типа стринг появляется ошибка type mismatch, при variant все нормально. Если сделать variant и посмотреть значения все равно все значения будут variant/string.
    Разница то вроде никакой, но все же как можно сделать, чтобы и при Faces As String все работало?

    Всего записей: 185 | Зарегистр. 17-01-2006 | Отправлено: 12:28 19-06-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Diadema
    Цитата:
    при Faces As String

    TypeName(Faces)
    есть String
    TypeName(fData.Range("A$2:" & fData.Range("B:B").Columns.End(xlDown).Address).Value)
    есть Variant(), так что разница есть  
    И собственно, что ты хотел сделать? Сцепить все значения ячеек или получить массив значений? Если массив, то какая, собственно, разница считывать ли значения массива представленного Variant или из массива строк?

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 13:55 19-06-2007
    Diadema



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Массив значений, ну да, разницы то нет. Значит если считывать range всегда будет значение типа Variant?
    И еще вопрос такой, как найти адрес самого правого заполненного столбца в таблице с разным количеством заполненных строк, причем сразу неизвестно в какой строке будет наибольшее значение, и сколько строк в таблице.
    Колличество строк высчитывается по формуле, что выше. И тем же способом вроде можно получить самый правый столбец, используя End(xlToRight).Address. Но это работает только если прямо указать нужную строку, если указать Range("A:J") например, или даже Range("A1:J500"), то данный способ не работает.
    Вообще, таким образом можно получить этот столбец? Или только пройтись циклом по всем строкам, найти самый правый в каждый, затем найти наибольший среди них. Этот способ мне как-то не нравится..

    Всего записей: 185 | Зарегистр. 17-01-2006 | Отправлено: 14:09 19-06-2007
    AndVGri

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

    Цитата:
    Значит если считывать range всегда будет значение типа Variant?  

    Не всегда, если обращение к одиночной ячейке, то Range("A1").Value может быть String, Double, Date, Currency

    Цитата:
    еще вопрос такой, как найти адрес самого правого заполненного столбца в таблице с разным количеством заполненных строк

    Если под таблицей понимать область данных, где нет сквозных пропусков по строкам и столбцам (любая ячейка таблицы с данными имеет хотя бы одну соседнюю ячейку с даными, хотя бы по диагонали), то можно воспользоваться
    LastCol = Cells(i, j).CurrentRegion.Columns.Count + Cell(i, j).CurrentRegion.Column - 1&
    где i, j индексы строки/столбца ячейки, которая гарантированно находится внутри твоей таблицы

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 14:30 19-06-2007
    divik



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

    Всего записей: 94 | Зарегистр. 28-09-2005 | Отправлено: 14:42 20-06-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    divik
    Используй обработчик события изменения данных на этом листе

    Код:
     
    Private Sub Worksheet_Change(ByVal Target As Range)
        '...
    End Sub
     

    Примеров в теме полно

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 15:01 20-06-2007 | Исправлено: AndVGri, 15:03 20-06-2007
    M_a_s_i_k

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

    Ребята кто разъяснит  как теперь пользоваться  FileSearch
     
    это я нашёл в справки по Microsoft Office Excel 2007  
     
    Excel Developer Reference  
    Object Model Changes Since Microsoft Office 2003
     
     
    The following is a summary of the changes in the Microsoft Office Excel 2007 object model as compared to Microsoft Office 2003.
     
    Application
     
    Properties                  Status  
     
    FileFind                      Hidden  
    FileSearch                  Hidden  
     
     

    Всего записей: 11 | Зарегистр. 31-01-2006 | Отправлено: 15:46 20-06-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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)
    ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru