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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    CEMEH
    если ЧЕСТНО ... НЕ понял ...
    хотя МОЖЕТ быть интересно ...
    и ... МИНИМАЛЬНЫЙ ... отдых ... это КАКОЙ?
     
    и ... не получается ли для ОБРАТНОГО отправления ставить номера бригад последовательно ... начиная с 1-ой бригады в 11-30, 2-ой в 14-00 и ТАК далее?

    Всего записей: 107 | Зарегистр. 16-07-2007 | Отправлено: 10:31 25-04-2008
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Минимальный отдых это разница между временем отправления и значением "вилки" " минимум"
    Если начать подвязку первую бриаду на 11:30 и так далее то при одной из последующих подстановок произойдет сбой (например при очередных значениях  "вилки" время отправления поезда раньше минимально возможного) . После этого надо будет произвести циклический сдвиг на значение +1 (то есть 1-ю бригаду подвязывать уже на 14:00.  У нее, конечно отправление позже максимального значения вилки, но это не смертельно. Затем опять подставлять значения попорядку до тех пор, пока опять не встретится ошибка. и тогда опять сдвинуть на +1.  Интересен процесс создания алгоритма этого сдвига. Но самое главное суметь доказать, что подобный подбор самый оптимальный и другие варианты будут только хуже.
    Я хотел составить таблицу всех возможных вариантов подбора бригад. Запустить макрос и пересчитать. Потом оставить вариант с самыми лучшими показателями.

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 20:29 25-04-2008
    Axiden

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не работает функция вида
    Function sss(m, n)
    S = EoMonth(m, n)
    sss = S
    End Function
    Выдает ошибку "Compile error: Sub or Function not defined"
    Что не так?
     
    АПДЕЙТ: уже сам разобрался.

    Всего записей: 4 | Зарегистр. 13-11-2007 | Отправлено: 16:13 26-04-2008 | Исправлено: Axiden, 16:27 26-04-2008
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ВОПРОС:
     
    Есть два столбца с числами
    в первый они записаны изначально
    1
    2
    3
    4
    ...
    20
     
    во второй столбец числа вводить руками но есть определенные условия
    1. Отсутствующие числа (1...20) во втором столбце будут подсвечены красным цветом в первом столбце.
    2. Повторяющиеся числа второго столбца будут подсвечены красным (во втором столбце)
     
    Наверное макросом это сделать не сложно. А можно обойтись без макроса? Использовать условное форматирование.  
     
    ВОПРОС РЕШЕН! Надо условное форматирование заряжать формулой =счётесли($B:$B;B)>1 подсветит дубликаты, а индекс(поискпоз - подсветит отсутствующие значения

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 18:56 26-04-2008 | Исправлено: CEMEH, 00:13 27-04-2008
    Axiden

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Насчет второго: условное форматирование - правило выделения - повторяющиеся (это в 2007).
    Насчет первого - может быть, через сравнение массивов... но хз как. Может, свою функцию?

    Всего записей: 4 | Зарегистр. 13-11-2007 | Отправлено: 19:48 26-04-2008
    alex_gall

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ребят, проблема. Помогите советом...
     
    Есть книга, в которой  поле  
     
    "Ксента, 0,700л. 70.0%, Box + 2 стакана и ложка" ( ТЕКСТ, ЧИСЛОл. ПРОЦЕНТ, ТЕКСТ - такой формат записей.)
     
    Нужно разбить это поле так:
     
    "Название" "Объём" "Крепость" "Дополнение", например
     
    "Ксента" "0,700л" "70.0%", "Box + 2 стакана и ложка"
     
    Как такое сделать?

    Всего записей: 142 | Зарегистр. 17-03-2006 | Отправлено: 16:48 29-04-2008
    Vitus_Bering



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

    Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 17:05 29-04-2008
    filemoto



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

    Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 18:58 02-05-2008 | Исправлено: filemoto, 12:45 03-05-2008
    maloy15



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, уважаемый all.
    Подскажите новичку как на уровне команд VBA выполнить копирование ЗНАЧЕНИЙ из ячеек одного листа в соответствующие ячейки на другом листе?
    Спасибо!

    Всего записей: 4 | Зарегистр. 03-05-2008 | Отправлено: 11:01 03-05-2008
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    maloy15, Вы не поверите, но задача имеет множество решений и реализаций - всё зависит от конкретных условий...
    ну, просто для затравки (скопировать диапазон B1:D19 с текущего листа на лист с именем "Лист3":
    Код:
     
      Range("B1:D19").Copy ThisWorkbook.Sheets("Лист3").Range("B1")

     
    стоп, увидел, что Вы выделили слово ЗНАЧЕНИЙ
    ну, можно через копирование "Специальная вставка... Значения"  
    (нужный лист  с исходными данными должен быть активен в момент запуска макроса) :
    Код:
     
      Range("B1:D19").Copy
      ThisWorkbook.Sheets("Лист3").Select
      Range("B1").Select
      Selection.PasteSpecial Paste:=xlPasteValues, _
       Operation:=xlNone, SkipBlanks:=True, Transpose:=False
     

    p.s. а вообще ОЧЕНЬ рекомендую использовать Макрорекордер. А потом править полученный при записи макроса код.
     
    filemoto

    Цитата:
    как можно снять все гиперссылки с ячеек

    Как программно удалить все гиперссылки в нужном рабочем листе ?
     

    Цитата:
    можно ли вывести в листбокс автофильтр слов из столбца

    вот, как получить значения отфильтрованного списка. посмотрите, может поможет:

    Код:
     
    ' (c) Pavel55
    Sub AutoFilter()
    Dim FilteredRng As Range
    Set FilteredRng = ActiveSheet.AutoFilter.Range.Rows.SpecialCells(xlCellTypeVisible)
    'отфильтрованный дипапазон
    MsgBox FilteredRng.Address(0, 0)
    'копируем отфильтрованную область на соседний лист
    FilteredRng.Copy Destination:=Sheets("Лист3").Range("A1")
    End Sub
     

     
     
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 14:09 03-05-2008
    maloy15



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо.
    А если нужно на лист «Вывод» копировать с листа «Импорт» только те строки, у которых значения в 45-м столбце больше чем в ячейчке B1 листа «Данные». Вот такая конструкция  
    Sub test3()
        Sheets("Импорт").Select
        For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
        If Cells(i, 45).Value > Sheets("Данные").Cells(1, 2) Then ActiveSheet.Rows(i).copy Sheets("Вывод")
      Next
    End Sub
     
    завершается по ошибке: «Метод Copy из класса Range завершен неверно» и далее по дебагу выделяется желтым строка ActiveSheet.Rows(i).copy Sheets("Вывод")
     
    Подскажите в чем ошибка?

    Всего записей: 4 | Зарегистр. 03-05-2008 | Отправлено: 14:41 03-05-2008
    filemoto



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    эх, спасибо, дорогой человек, уже в который раз выручаешь в этом нелёгком деле...
     
    тут столкнулся с недопониманием экселя...
    в общем, прикрутил я код очистки гиперлинков к кнопке и сохранил как *.xla
    потом прикручиваю эту панель, нажимаю кнопку и... код необрабатывается. точнее, обрабатывается, но не на той странице где это нужно. насколько я понимаю он обрабатывает страницу из другой книги. поправьте пожалуйста, как нужно код подредактировать. прикладываю скрин, какое сейчас положение вещей:
       
     
    добавлено:
    я кажись разобрался. сменил With ThisWorkbook.Worksheets(1) на With ActiveWorkbook.Worksheets(1)
    незнаю правда, так правильно или нет...

    Всего записей: 132 | Зарегистр. 08-04-2006 | Отправлено: 16:20 03-05-2008 | Исправлено: filemoto, 17:23 03-05-2008
    SERGE_BLIZNUK

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

    Цитата:
    выделяется желтым строка ActiveSheet.Rows(i).copy Sheets("Вывод")

    ошибка как раз в этой строке :-)) вы забыли указать, куда же выводить (куда, кстати,  
    ну, что на лист "Вывод" понятно, а в какую строчку?!
    Надо указать что-то вроде:
    Код:
     
        Dim k As Integer, i As Integer
        Sheets("Лист1").Select
        k = 1
        For i = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
          If Cells(i, 45).Value > Sheets("Данные").Cells(1, 2) Then  
            ActiveSheet.Rows(i).Copy Sheets("Лист3").Rows(k)
            k = k + 1
          End If
        Next i
     

    Только мне АБСОЛЮТНО непонятно, зачем вы цикл крутите снизу вверх?!!
    У Вас же строчки на лист "Вывод" будут попадать в ОБРАТНОМ порядке!
     
    filemoto да не за что. тем более, что макрос не мой ;-)
    А Вы обратите внимание, с какой книгой идёт работа!
    ThisWorkbook - это та книга, в которой находится макрос при его запуске.
    ActiveWorkbook - книга, активная в тот момент запуска макроса.
    поменяйте.
    Кроме того, удаляются ссылки с ПЕРВОГО листа книги.  
    Это надо подправить. (ну, хотя бы на активный лист -вместо ThisWorkbook.Worksheets(1)
    написать ActiveSheet )
    Кроме того, макросы не откатываются, поэтому будет совсем не лишним, перед тем, как всё напрочь поудалять, хотя бы спросить у пользователя, хотите ли удалить все гиперссылки на таком-то листе!

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 17:31 03-05-2008
    maloy15



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Все получилось, цикл переделал в другую сторону, это все по неумению было. Большое вам спасибо, Serge_Bliznuk, за науку!!!

    Всего записей: 4 | Зарегистр. 03-05-2008 | Отправлено: 08:27 04-05-2008
    Averry

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день.
    Столкнулся с необходимостью при нажатии кнопки в Экселе, послать сочетание клавиш ctrl+d в одно из окон другой программы. Или же выделить окно в другой программе и нажать кнопку в ней на панеле.  
     
    Уже нашел что-то похожее Найти "чужое" окно и нажать в нем кнопку Но вот как послать именно сочетание клавиш разобраться не могу.
     
    Спасибо!

    Всего записей: 1 | Зарегистр. 04-05-2008 | Отправлено: 15:29 04-05-2008
    Vitus_Bering



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Averry
    См. help, инструкция SendKeys.

    Всего записей: 936 | Зарегистр. 30-09-2005 | Отправлено: 16:02 04-05-2008
    nick7inc



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Averry
    ClassName и Caption можно получить при помощи маленькой бесплатной программы InqSoft Window Scanner.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 18:30 04-05-2008
    abasov



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ребят перевожу ~500 юзеров в новый домен. у юзера раньше был логин ivaii (Иванов Иван Иваныч), новый будет ivanovii. Как в Excel сделать генерацию по ФИО? т.е. из строки ФИО - фамилию конвертить в латиницу, а с имени и отч. брать только первую букву и тож конвертить в латиницу. Вообще возможно ли это?
    Заранее спасибо

    Всего записей: 345 | Зарегистр. 12-11-2002 | Отправлено: 08:52 05-05-2008 | Исправлено: abasov, 09:41 05-05-2008
    maloy15



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте, помогите разобраться.
    Есть массив (размер его может меняться). Необходимо найти конец 3-го столбца и в следующей пустой ячееке вставить формулу суммирования всех ячеек этого стобца

    Всего записей: 4 | Зарегистр. 03-05-2008 | Отправлено: 14:44 05-05-2008
    RedPromo



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    abasov
    Попробуй вот это может не очень красиво но работает, можно было через таблицу сделать.
     
    Использовать так Петров Николай Николаевич    =ConvertFIO(A2) результат petrovnn  
     
    Программа

    Всего записей: 558 | Зарегистр. 05-04-2006 | Отправлено: 16:22 05-05-2008 | Исправлено: RedPromo, 16:28 05-05-2008
       

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