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

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

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

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
    Maximus777

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хелп ми кто-нить! Нужен пример организации в MS FlexGrid колонки с checkbox-ами, умеющими менять своё значение checked/unchecked

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 12:43 04-03-2010
    kfqr



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

    Цитата:
    Cells.SpecialCells(xlCellTypeLastCell).Row  

    Это подойдёт только если данные вставляются на новый лист. Если вставить 10 строк, очистить, а затем вставить 5 строк, то xlCellTypeLastCell выдаст 10.
     
    Решение есть тут: http://firststeps.ru/vba/excel/r.php?45

    Всего записей: 96 | Зарегистр. 19-10-2007 | Отправлено: 13:21 04-03-2010
    V4mp



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Johnson Finger
    for each уже своим названием подразумевает для каждого. В справке сказано тоже самое. Поэтому эта конструкция и работает так быстро (быстрее чем обычный for, который при каждом next заново определяет условия выборки).
    Как я делаю в таком случае - оставляю тот же for each, внутри цикла включаю обыкновенный счетчик (i = i + 1) , а дальше при выполнении определенного условия просто пропускаю ненужный код и перехожу к next (понятно, с помощью обыкновенных if, но не в коем случае не case). Причем если сразу неизвестно количество эл-тов в pattern, то это легко выяснить конструкцией pattern.count
     
    Добавлено:
    Maximus777
    Сразу необходимо создать класс, назовем его BtnClass
    В нем написать (дальнейший код применителен к меткам (меняем на нужное)

    Код:
    Public WithEvents LabelGroup As MSForms.Label

     
     
    Далее код на форме -

    Код:
     
    Dim Labels() As New BtnClass
    Private Sub UserForm_Activate()
    Dim NewCtrl As Control
    Dim LabelCount As Integer, ctl As Control: LabelCount = 0
    Set NewCtrl = Me.Controls.Add("Forms.Label.1", "LabelI") 'создаем контрол
    Set NewCtrl = Nothing
    For Each ctl In Me.Controls 'цикл добавления в массив конролов в класс BtnClass
        If InStr(1, ctl.Name, "LabelI") <> 0 Then
            LabelCount = LabelCount + 1: ReDim Preserve Labels(1 To LabelCount)
            Set Labels(LabelCount).LabelGroup = ctl
        End If
    Next
    end sub
     

     
    Теперь заходим в класс и видим, что для LabelGroup у нас есть куча действий.
    Код представлен для группы меток (label). если нужно для одного lisbox, то придется его немножко подправить.

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 15:12 04-03-2010 | Исправлено: V4mp, 15:37 04-03-2010
    Maximus777

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

    Код:
    Private Sub Liv2_Click()
    Col = Liv2.MouseCol
    Row = Liv2.MouseRow
    If Col = 0 Then
        If Liv2.CellPicture = PicUnchecked.Picture Then
            Set Liv2.CellPicture = PicChecked.Picture
            Liv2.Col = 1: Liv2.CellFontBold = True: Liv2.CellBackColor = Liv2.BackColorSel
        Else
            Set Liv2.CellPicture = PicUnchecked.Picture
            Liv2.Col = 1: Liv2.CellFontBold = False: Liv2.CellBackColor = Liv2.BackColor
        End If
    End If
    End Sub

     
    Liv2 - MSFlexGrid
     
    А вот как это выглядит:

     
    Добавлено:
    Блин! Теперь засада с скроллингом. Как в MS FlexGrid колесом скроллить? Кто-нить умеет?

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 15:46 04-03-2010 | Исправлено: Maximus777, 15:51 04-03-2010
    Burelomator

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем доброго времени суток...
    Помогите пожалуйста.
    Как сделать транслитерацию в Excel 2007 в VBA или в макросе (нужен код) , чтобы он брал текст из определенной ячейки переводил и записывал результат в другую ячейку?...
    Заранее благодарю... =)

    Всего записей: 1 | Зарегистр. 04-03-2010 | Отправлено: 17:28 04-03-2010
    Johnson Finger



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    V4mp - хм, кстати мысль, оставить for each, только пропускать код Чего-то сразу не допер, полез сначала на For...Next, а потом состряпал макрос который вообще ищет как при обычном ручном поиске по Ctrl+F, кстати, тоже быстро работает (по крайней мере быстрее чем For...Next), но быстрее ли чем for...each, пока не знаю, попробую переписать код поиска.

    Всего записей: 1177 | Зарегистр. 06-08-2006 | Отправлено: 19:13 04-03-2010
    Maximus777

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

    Цитата:
    Как сделать транслитерацию в Excel 2007 в VBA или в макросе (нужен код)


    Код:
    Public Function Translit(src$)
    Static z As New Collection
    On Error Resume Next
        Dim i&, s$, r$, f$
        If z.Count = 0 Then
            Dim ru$(): ru = Split("а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я", ",")
            Dim en$(): en = Split("a,b,v,g,d,e,yo,zh,z,i,jj,k,l,m,n,o,p,r,s,t,u,f,kh,c,ch,sh,shh,',y,',eh,ju,ja", ",")
            For i = LBound(ru) To UBound(ru)
                z.Add en(i), ru(i)
            Next i
        End If
        For i = 1 To Len(src)
            r = Mid(src, i, 1): f = r: f = z(r)
            If Not f = r Then If Asc(r) < 224 Or Asc(r) = 184 Then Mid(f, 1, 1) = UCase(Mid(f, 1, 1))
            s = s + f
        Next i
        Translit = s
    End Function

    Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 19:40 04-03-2010
    Onehunter



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Прошу помощи. Как в Эксель можно посчитать продолжительность по времени между двумя датами, например, в часах. Скажем есть в двух столбцах начало и конец 2007.10.01 20:00 | 2007.10.02 01:25  как на автомате вычислять что между этими датами разница 5 часов 25 мин.? Спасибо!

    Всего записей: 7 | Зарегистр. 04-03-2010 | Отправлено: 23:13 04-03-2010
    vlth

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

    Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 01:16 05-03-2010
    V4mp



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Johnson Finger
    с кем не бывает
    отпишись тогда о результатах, самому интересно что быстрее будет.
     
    Добавлено:
    Maximus777
    А как FlexGrid влепить на формочку эксэля?
    У мну пишет "субъект не имеет доверия...."

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 14:52 05-03-2010
    vlth

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

    Цитата:
    А как FlexGrid влепить на формочку эксэля?  
    У мну пишет "субъект не имеет доверия...."

    Может поспособствует...
    Ссылка1
    Ссылка2
     
    Добавлено:
    Ещё

    Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 23:29 05-03-2010
    ksanfik

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток, есть небольшая проблемка и пока не могу найти решения:
    есть локалка (к примеру 4 компа), надо с разных компов открыть различные файлы (имя привязано к дате, к примеру 04-03-10.xls), сделать определенные операции и все закрыть. Никак не удается найти файл по сети, да и вообще подключиться к удаленному компу.Этот гаденыш находит такой же файл и путь на родном компе и спокойно его открывает, заранее плиз...

    Всего записей: 17 | Зарегистр. 04-08-2009 | Отправлено: 10:51 06-03-2010
    NJCorp

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

    Всего записей: 72 | Зарегистр. 18-08-2007 | Отправлено: 11:58 06-03-2010
    NJCorp

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Такой вопросик.
    Нужно проверить коректность дати.
     
    об IsDate() я знаю, но она говорить что 25.12.2000 коректна и 12.25.2000 тоже.
    (формат у меня дд.мм.гггг)

    Всего записей: 72 | Зарегистр. 18-08-2007 | Отправлено: 00:03 07-03-2010
    vlth

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

    Цитата:
    об IsDate() я знаю, но она говорить что 25.12.2000 коректна и 12.25.2000 тоже

    NJCorp, всё правильно: оба значения могут быть интерпретированы как дата, что IsDate и возвращает.  
    Попробуйте DateValue("12.25.2000") и DateValue("25.12.2000") - оба варианта вернут одну дату - 25 декабря - в формате, соответствующем вашим региональным настройкам.

    Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 20:35 07-03-2010
    NJCorp

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Да почему оно так делает я понимаю.
    В прочим не важно, я уже свою функцию написал.

    Всего записей: 72 | Зарегистр. 18-08-2007 | Отправлено: 22:44 07-03-2010
    V4mp



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vlth
    спс за инфу! почитал, ничего не помогает из решений, а в конце вычитал

    Цитата:
    Предлагается два способа установить Visual Basic 6.0 d в который входит компонент или зарегистрировать компонент в реестр в ручную внести регистрационный номер.

    Так что видимо не судьба)

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 03:15 09-03-2010
    vlth

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

    Цитата:
    почитал, ничего не помогает из решений

    V4mp, самое неприятное, что многие из годами работоспособных решений, требуют пересмотра с выходом обновлений продуктов мелкомягких. И реанимировать работоспособность удаётся далеко не всегда ((( И даже просто -  что-то "почитать" - не всегда возможно: твой код перестаёт работать, а информации - ноль...

    Всего записей: 258 | Зарегистр. 22-01-2008 | Отправлено: 20:18 09-03-2010
    V4mp



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vlth
    Поэтому я взял за правило при работе в том же vba excel - использовать только стандарnyst контролы - label, listbox, textbox... Не так красиво, приходится извращаться, но хоть есть уверенность, что на любой машине работать будет

    Всего записей: 65 | Зарегистр. 04-12-2008 | Отправлено: 11:53 10-03-2010
    vchobo

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ, подскажите или ткните носом слепого!
    Проблема такова:
    Есть книга с листами, на которых размещены запросы из MS SQL по ODBC.
    Все это красиво отформатировано, добавлены куча вычисляемых полей с автофильтрами (заполнение формулами соседних столбцов)...
    Данные обновляются с частотой раз в минуту.
    Вопрос:
    Как можно защитить лист с таким запросом (скрыть формулы, защитить их от редактирования)?
    Как только включаю любую защиту листа, даже скрывать формулы, перестает работать обновление и недоступны автофильтры.
    Подскажите, решается ли проблема ?

    Всего записей: 22 | Зарегистр. 01-12-2008 | Отправлено: 13:27 10-03-2010 | Исправлено: vchobo, 13:29 10-03-2010
    Открыть новую тему     Написать ответ в эту тему

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

    Компьютерный форум 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