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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 201 202 203 204 205 206 207 208 209 210 211 212 213

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



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

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

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1, Часть 2
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях 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
     
    Перечень основных ColorIndex'ов из MSDN
     

    Смежные темы:
    Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
    Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
    Программы » Word FAQ | Excel FAQ | Access FAQ
    Прикладное программирование » Word VBA | Access VBA  
    Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
    Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
    Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
    Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:16 11-01-2010 | Исправлено: ALeXkRU, 16:42 03-08-2021
    psiho

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

    Цитата:
    Бзв, что по второй части моего ответа у тебя сэмпла не случилось?

    Предоставляю тебе право предоставить примерчик.;)

    Всего записей: 247 | Зарегистр. 26-10-2006 | Отправлено: 09:44 20-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    psiho
    Первый раз улыбнулись. А второй? Тоже лыбу давить?  

    Цитата:
    Цитата:Бзв, что по второй части моего ответа у тебя сэмпла не случилось?  
    Предоставляю тебе право предоставить примерчик.;)

    Ты мне право предоставляешь?! Ты нюх потерял, бесталанный.  
     
    За локаль ответь, говнокодер.





    нарушение п. 2.12. главы VIII Соглашения по использованию

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 09:59 20-08-2012
    psiho

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

    Цитата:
    Добавлено:  
     Напомню - обсуждаем ТОЛЬКО Ексель, ВБА и все связанное с этим. Остальное - фтопку.  

    Это во-первых.
    Во-вторых, ты такими высказываниями себе "Advanced Member" за год заработал? Ты ещё не родился, когда я на форуме зарегился.
    В-третьих, за оскорбление бан схлопочишь.
    В-четвертых, знаешь почему на Красной площади сексом нельзя заниматься...?
    Лучше бы человеку примером помог, а не непонятным советом.
     
    Прошу прощения у мемберов и модераторов форума за офтоп.

    Всего записей: 247 | Зарегистр. 26-10-2006 | Отправлено: 13:22 20-08-2012 | Исправлено: psiho, 13:23 20-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    psiho
    Цитата:
    Ты ещё не родился, когда я на форуме зарегился.
    И у тебя 75 см?

    Цитата:
    за оскорбление бан схлопочишь.
    Зуб даешь? Ответь вначале за локаль. Ты первый раз в маргарин залез - не понял. Второй - отмолчался. Третий раз не ананас?

    Цитата:
    Прошу прощения у мемберов и модераторов форума за офтоп.

    Я, как мембер, не в претензии за оффтоп. Не вопрос. А за остальное - ответь. Про то, как ты по моим постам себе репу склеиваешь и умняк гонишь. И то - лишь наполовину :)
     
    В оскорбление - ткни пальцем. Впрочем, я сам:
     
    Если ты за AND с локалью ответить не можешь - так повторюсь - говнокодер ты после этого.  
     
    А бесталанный - так смотри - все твои последние посты вслед за моими. Дрозд-перепевчик :)
     
    Добавлено:
    И, касательно
    Цитата:
    Лучше бы человеку примером помог, а не непонятным советом.  

    Читай шапку, старичок 75 см.

    Цитата:
    Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.  
    Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)  

     
    Я же пояснил:
    Цитата:
    Вот спецом не стал код выкладывать, чтобы хоть как-то чела заинтересовать. Не получилось :)  

    Не получилось-то из-за тебя. Что там выкладывать-то было? Да и зачем? Это же хелп... Ф1, млин... Тебе нравится амплуа КО - мне нет.

    Код:
    Sub sb_NoMacros()
    On Error GoTo ErrHnd:
        Application.Run "Dummy"
        Exit Sub
    ErrHnd:
        Debug.Print Err.Number & " - "; Err.Description
    End Sub

     
    А про второй вариант... Так я сразу поднял руки - некомпетентен:
    Цитата:
    может там есть какой функционал для явной проверки наличия процедуры.  
    За что предъявляешь?





    Нарушение п. 2.4. главы VIII Соглашения по использованию

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 13:36 20-08-2012
    psiho

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

    Цитата:
    Второй - отмолчался

    Не хотел офтопить.
     

    Цитата:
    Про то, как ты по моим постам себе репу склеиваешь и умняк гонишь

    Так каждого обвинить можно. Во-первых,никто за тобой г..но не подметает. Во-вторых, ты здесь не модератор и ,тем более, не "хозяин" ветки.
     

    Цитата:
    AND с локалью

    Run-time error '1004' может быть связана не только с "Макрос не найден".
     

    Цитата:
    Debug.Print Err.Number & " - "; Err.Description

    Этот товарищ может и не знает где это должно выводиться. Ему нужно, чтобы выдалось предупреждение или код продолжал работать.
     
     
     

    Всего записей: 247 | Зарегистр. 26-10-2006 | Отправлено: 13:58 20-08-2012 | Исправлено: psiho, 14:00 20-08-2012
    grbdv

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

    Цитата:
    Цитата:AND с локалью  
    Run-time error '1004' может быть связана не только с "Макрос не найден".  

    Ты чо буксуешь?! Локаль! Локаль!
     
    Да и откуда там 1004-й еще взяться в такой постановке задачи?! Ты хоть реалиями оперируй. Ты в Сочи тоже с дубленкой едешь? Вдруг снег? Вдруг - игры олимпийские :)
     

    Цитата:
    Этот товарищ может и не знает  

    Товарищ - молчит. А шапку ты прочел?! Ты-то с твоим послужным наизусть должен ее знать. В просак его еще лизни. Посмотри - как Мишель себя ведет...
     
    Не умеешь писать-произносить "говно" - не пиши вообще.
     
     

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 14:05 20-08-2012
    surgutfred



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Прошу помощи.  
    Есть макрос, который смотрит в папке файлы по маске, вытаскивает в один столбик дату, а в другой время создания.  
    Мне нужно отсортировать и по дате и по времени. Я сделал так:
     
     Range("B5:E50").Sort Key1:=Range("D1"), Order1:=xlAscending, Key2:=Range("E1"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
     
    где солбец D - дата, а столбец E - время.  
    Работает все ок, кроме тех файлов у которых время создания меньше 10 часов, т.е вот так:
    10:50:00
    11:15:00
    11:53:02
      9:14:02
    Как мне лучше перед девяткой 0 поставить, что бы она встала в начале списка? Я так понимаю как то с форматами играться надо?
     
    Время создания получаю так:
    ВремяСоздания = Right(FileDateTime(ПутьКФайлу), 8)
      9:14:02 получается с впереди идущим пробелом, как вместо него приписать 0?

    Всего записей: 589 | Зарегистр. 21-08-2001 | Отправлено: 20:47 23-08-2012 | Исправлено: surgutfred, 21:19 23-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    surgutfred
    Ты пишешь время (а может и дату?), как текст. Тогда самое простое и эффективное:
    sTime = Format(sTime, "hh:mm:ss")

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 20:56 23-08-2012
    surgutfred



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

    Цитата:
    sTime = Format(sTime, "hh:mm:ss")

    Спасибо, в таблице отображается 09:26:02, но в строке формул видно по старому 9:26:02 и сортировка не срабатывет, т.е только видимость. Как же правильно отсортировать то?

    Всего записей: 589 | Зарегистр. 21-08-2001 | Отправлено: 21:25 23-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    surgutfred
    Значит, часть ячеек у тебя имеет формат время, а часть - текст. Надо не дать возможности Екселю самому манипулировать форматом ячеек. Он очень умный. Для этого, перед заполнением ячеек надо, чтобы они имели формат текст. Переменные тоже должны быть явно объявдены, как строковые. Нужно видеть код.

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 21:29 23-08-2012
    surgutfred



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

    Цитата:
    Нужно видеть код.

    Вот файл
    http://narod.ru/disk/59874791001.7451de3c3bf8e039ba7ea63d28e9734e/USR.xls.html

    Всего записей: 589 | Зарегистр. 21-08-2001 | Отправлено: 21:33 23-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    surgutfred
    Для начала самой первой строкой помести Option Explicit
    После этого явно продекларируй все необъявленные переменные с указанием типа данных. В частности:
    Dim ДатаСоздания$, ВремяСоздания$
     
    Но, дальше, все равно  
    Array(НомерФайла, ИмяФайла, ПутьКФайлу, ДатаСоздания, ВремяСоздания)
    вернет все как Variant. Надо по-другому заполняться.

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 22:29 23-08-2012
    surgutfred



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

    Цитата:
    Надо по-другому заполняться.

     
    Спасибо за труд, но как говорится не стоит овчинка.... Так буду юзать.

    Всего записей: 589 | Зарегистр. 21-08-2001 | Отправлено: 22:48 23-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    surgutfred
    Ну, дело хозяйское... Допилить-то там не так уж много. Спрашивай, вобщем, если надумаешь.

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 02:14 24-08-2012
    gogaman



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

    Всего записей: 583 | Зарегистр. 22-06-2005 | Отправлено: 18:51 28-08-2012 | Исправлено: gogaman, 10:27 29-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gogaman, ничо не понял... :(
    Разрядность поменять? Представление числа? Какой, млин, массив?

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 19:00 28-08-2012
    gogaman



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    grbdv
    есть таблица куча строк 5 столбов и там даные типа 122,455 надо изменить на 122,450
    уменьшение фиксированое всегда на 0,005

    Всего записей: 583 | Зарегистр. 22-06-2005 | Отправлено: 19:29 28-08-2012 | Исправлено: gogaman, 10:47 29-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    gogaman
    Понял :) Чуть позже отпишусь, если никто больше не положит. Там пару строк.
     
    Добавлено:
    gogaman
    Ниже код модуля. Процедуры sb_Change_UP и _DN надо повесить на пользовательские кнопки. Фиксированное приращение регулирется константой CHSIZE.
     
    Никаких проверок нет! Ни на содержание ячеек, ни на корректность выделения. Что выделишь - то и премолет. Мякину заложишь - мякину получишь. Enjoy.
     
    Код:

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 19:46 28-08-2012
    Maximus777

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

    Код:
    Sub Macro()
      For i = 1 To 5  'Строки
        For j = 1 To 4  'Столбцы
          txt = Right(CStr(Cells(i, j)), 1)
          If txt = "5" Then Cells(i, j).Value = Cells(i, j) - 0.005
        Next j
      Next i
    End Sub

    Только я не понял, поправка в примере 0,005, а потом словами сказано, что 0,05. Вобчем сделал, как в примере.
     
    З.Ы. Формат ячеек должен быть "Числовой" и число десятичных знаков "3".

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 08:58 29-08-2012 | Исправлено: Maximus777, 08:59 29-08-2012
    grbdv

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Maximus777
    Цитата:
    Я бы сделал вот так:  

    Я бы так даже теще не стал бы делать.
     
    Переменные за тебя кто будет декларировать? Все в Variant?
     
    И почему именно заканчивающиеся на 5?
    Почему по пяти строкам?
    Почему по всем четырем столбцам?
     
    Читай ТЗ:

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

     
    И почему в левой части явно указано, к чему обращаешься, а в правой - дефолт? Уж или Вася, или не Вася...
    Cells(i, j).Value = Cells(i, j) - 0.005
     
    Два раза подряд обращаться к одной и той же ячейке - моветон. Для этого есть переменные.
    Right(CStr(Cells(i, j)), 1)  
    Cells(i, j) -  
     
    А в обратную сторону мотануть, если неправильно нажал? Отката-то нет в VBA.
     
    Короче, простота хуже воровства.

    Всего записей: 1163 | Зарегистр. 20-08-2011 | Отправлено: 09:14 29-08-2012
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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 201 202 203 204 205 206 207 208 209 210 211 212 213

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 3)


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru