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

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

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

    Всего записей: 107 | Зарегистр. 05-11-2009 | Отправлено: 22:32 06-11-2013
    AndVGri

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

    Код:
     
    Public Function SpecialSum(ByVal this As Range) As String
        Dim pCell As Range, sText As String
        Dim sumA As Double, sumB As Double, pos As Long
        sumA = 0: sumB = 0
        For Each pCell In this
            If Not pCell.EntireRow.Hidden Then
                sText = pCell.Value
                pos = InStr(sText, "/")
                If pos > 0 Then
                    sumA = sumA + CDbl(Mid$(sText, 1, pos - 1))
                    sumB = sumB + CDbl(Mid$(sText, pos + 1))
                End If
            End If
        Next
        SpecialSum = Format$(sumA, "0") & "/" & Format$(sumB, "0")
    End Function
     

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 03:52 07-11-2013
    aidomars



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

    Код:
    Public Function SpecialSum(ByVal this As Range) As String
        Dim sum(0 To 1) As Variant ' определяем массив
        For Each pCell In this ' цикл по ячейкам
            ' если ячейка не скрыта и содержит "/" - собираем строчку p, типа "/1/4/2/4/1/8"
            If Not pCell.EntireRow.Hidden And InStr(pCell.Value, "/") > 0 Then p = p & "/" & pCell.Value
        Next
        o = Split(p, "/") ' формируем массив o из строки p с разделителем "/", где o(1)=1, o(2)=4 и т.д.
        For i = 1 To UBound(o) ' цикл по массиву o
            ' присваиваем в массив sum(0) и sum (1) чет и нечет
            sum(i Mod 2) = sum(i Mod 2) + CDbl(o(i))
        Next
        SpecialSum = sum(1) & "/" & sum(0)  
    End Function

    Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 11:35 07-11-2013
    Leojse

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    aidomars
    Спасибо Вам огромное за помощь! Жалко, что на форуме нет кнопки "спасибо", я бы вам уже сто раз нажал)

    Всего записей: 107 | Зарегистр. 05-11-2009 | Отправлено: 12:18 07-11-2013
    Leojse

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А можно еще вопрос?...
    Оба вышеуказанных кода работают, но есть вопрос по коду от AndVGri
    Функция округляет до целых чисел, т.е. 8,6+8,1=17, а не 16,7. Поменял Double на Single, но все равно происходит округление.. что сделал не так?...

    Всего записей: 107 | Зарегистр. 05-11-2009 | Отправлено: 20:12 07-11-2013
    aidomars



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

    Код:
    SpecialSum = Format$(sumA, "0.00") & "/" & Format$(sumB, "0.00")
    SpecialSum = sumA & "/" & sumB

    Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 07:43 08-11-2013
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Или заменить
    SpecialSum = Format$(sumA, "0") & "/" & Format$(sumB, "0")  
    на
    SpecialSum = CStr(Math.Round(SumA, 4)) & "/" & CStr(Math.Round(SumB, 4))
    надеюсь, больше 4-х знаков после запятой не будет.

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 08:25 08-11-2013
    kot1313



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуста, как сделать так, чтоб при нажатии Ctrl-F в Excel  
    окно поиска появлялось сразу с поиском по книге, а не по листу.
    (В ветке Excel FAQ сказали, что в этом топике есть ответ на этот вопрос, но я никак не могу найти это решение...)
    Заранее Спасибо
     

    Всего записей: 2522 | Зарегистр. 11-12-2002 | Отправлено: 13:57 08-11-2013
    aidomars



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kot1313
    http://excelvba.ru/code/SearchCells

    Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 17:35 08-11-2013
    kot1313



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    aidomars
    На это дополнение мне уже указывали в Топике Excel FAQ.
    Оно не совсем подходит - много дишних кликов мышкаой !!!
    Нужно автоматизированное - чтоб нажал CTRL-F и сразу вылез поиск по книге !

    Всего записей: 2522 | Зарегистр. 11-12-2002 | Отправлено: 04:10 11-11-2013
    kovireshad

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

    Всего записей: 86 | Зарегистр. 29-08-2008 | Отправлено: 12:51 11-11-2013
    aidomars



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

    Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 14:14 11-11-2013
    Futurism

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    подскажите, пожалуйста, пытаюсь облегчить себе задачу.
    Есть одна большая таблица. КАК сделать так, чтобы напротив каждой строки стояли кнопки, которые бы копировали определенные ячейки на определенные листы. В разных таблицах, столбцы стоят в разной последовательности.
     
    По моим подсчетам нужно сделать восемь кнопок.
     
    Плюс необходимо сделать так, чтобы таблица сама высчитывала на отдельной таблице количество заключенных договоров и общую цену по каждому из виду услуг за день.
     
    Проблема еще заключается в том, что одна таблица должна обновлять каждый месяц, другая каждый день, а третья каждую неделю. Обновление может совершаться вручную, посредством удаления из ячеек все инфы, главное, чтобы нажатие кнопок приводило к заполнению таблиц с первой пустой ячейки.
     
    для примера даю свои наметки
    Должно быть в итоге все тоже самое, только больше таблиц и кнопки должны работать с выделенной строкой и копировать в первую пустую строку нужного листа.
    т.е. чтобы система видела  
    1строка занята
    2строка занята
    а вот 3 свободна
    http://rghost.ru/50104418

    Всего записей: 1200 | Зарегистр. 04-02-2011 | Отправлено: 22:17 11-11-2013
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Futurism
    Так что подсказать? Что то в вашем файле никаких кнопочек, ни попытки написания кода не увидел.

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 03:05 12-11-2013
    kovireshad

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

    Всего записей: 86 | Зарегистр. 29-08-2008 | Отправлено: 10:08 12-11-2013 | Исправлено: kovireshad, 10:08 12-11-2013
    aidomars



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kovireshad
    Книга открыта постоянно?
    Файл для общего доступа?
    Кто вносит изменения?
    Судя по Вашим вопросам, сами Вы точно его не напишите, разбирающемуся хватит и 10 мин.
    Стоимость будет 0, если конечно задача не обрастет кучей хотелок).
    Желательно выложить файл с описанием, что где и куда.

    Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 11:21 12-11-2013
    machonin09

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте! Программа выводит отчет в Excel 2007. Все содержимое корректно и полно отображается на экране, но при выводе на печать часть строки "съедается", таким образом, что пропадает кусок текста (примерно пол-строчки). Т.е. при просмотре отчета я вижу, что до нижнего края строки есть еще пару миллиметров, но в Предварительном просмотре и на распечатанном листе часть строки "съедается".
    Помогите пожалуйста, написать макрос для увеличения высоты строк, начиная с верхнего левого угла указанного диапазона.

    Всего записей: 3 | Зарегистр. 24-12-2012 | Отправлено: 12:17 12-11-2013
    Futurism

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

    Цитата:
    Futurism
    Так что подсказать? Что то в вашем файле никаких кнопочек, ни попытки написания кода не увидел.

    AndVGri
    блин, я файл утерял нужный, но ладно. А подсказать как в миф воплотить эту идею.

    Всего записей: 1200 | Зарегистр. 04-02-2011 | Отправлено: 00:12 14-11-2013
    kovireshad

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    aidomars
    Здравствуйте, если вам несложно посмотрите
    1. Книга открывается обычно несколько раз за день
    2. Она не для общего пользования
    3. Информацию вносит и редактирует только один человек
     
    Что хотелось бы:
    Из листа "Динамика" переносились в лист "Лимит" 2 ячейки D54 и E54 (они меняют значение от нескольких раз за день до 1 раза в неделю)
     в листе "Лимит" при каждом открытии файла или по расписанию 1 раз в день (лучше по расписанию), формировалась новая строка  
    в столбце А дата, текущее число,
     значение D54 (лист "Динамика") в столбец F  
     значение E54 (лист "Динамика") в столбец C  
    Лист "Лимит" в нем каждая строчка будет соответствовать новому дню
     
    Вот такие вот хотелки к документу
    Заранее, спасибо
     
    http://rghost.ru/50161105

    Всего записей: 86 | Зарегистр. 29-08-2008 | Отправлено: 11:15 14-11-2013
    aidomars



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kovireshad
    В принципе ерунда, вот только "при каждом открытии файла или по расписанию 1 раз в день (лучше по расписанию)" не проще ли заменить на "нажатие кнопки"? Изменил значения, нажал кнопку - добавилась нужная строка.  
    Это проще и надежней имхо.

    Всего записей: 982 | Зарегистр. 23-04-2007 | Отправлено: 12:20 14-11-2013
    Открыть новую тему     Написать ответ в эту тему

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