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

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

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

    Цитата:
    работает до 32 тысяч строк

    Замени декларацию:
    Dim iTov% на
    Dim iTov&
    Только знак в знак. Копи-пасте.
     
    Добавлено:
    Внимание! Поправлено
     
    Добавлено:
    Я же говорил что всплывут подводные камни. Это первый :)  
    Дас ист моя вина - недоразмерил переменную на большой объем.

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 14:28 24-07-2011 | Исправлено: asbo, 14:29 24-07-2011
    Dmitriy05



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asbo
    За код спасибо - буду разбираться,

    Всего записей: 2514 | Зарегистр. 03-08-2005 | Отправлено: 18:33 24-07-2011
    KorolCOOL



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Приветствую всех. Нужно заблокировать доступ к VBA коду рабочей книги. Я знаю, что в Exel есть возможность повесить пароль для доступа к коду. Но также я слыхал, что данное средство не очень надежное. Есть ли еще какие-либо способы организовать данный запрет, может есть возможность как-нибудь компильнуть) код, чтобы исключить возможность его просмотра впринципе?

    Всего записей: 38 | Зарегистр. 04-11-2009 | Отправлено: 12:08 26-07-2011
    asbo

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

    Цитата:
    ... заблокировать доступ к VBA коду ... данное средство не очень надежное...способы организовать данный запрет ...как-нибудь компильнуть... исключить возможность его просмотра впринципе?

    Оставь надежды всяк сюда входящий :)  
    Имо - не трать время. Неподъемно. Гугл в помощь по "VBA Защита кода", к примеру - давно и очень много разжевано под разными соусами и приправами. Недавно и здесь краешком задевали этот вопрос.

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 12:36 26-07-2011
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть ли вариант оптимизации данного кода?
    Код:
    b3Row = False
    b2Row = False
    b1Row = False
    ' раскрываем третий уровень
    For i = nRow To 1 Step -1
       
    If Cells(i, 1).Interior.ColorIndex <> 15 And b3Row = False Then
           
    Cells(i, 1).EntireRow.Hidden = False
        Else
           
    b3Row = True
            Exit For
        End If
    Next
    i
    ' раскрываем второй уровень
    For i = nRow To 1 Step -1
       
    If b3Row Then
            If
    Cells(i, 1).Interior.ColorIndex = 15 And b2Row = False Then
               
    Cells(i, 1).EntireRow.Hidden = False
            ElseIf
    Cells(i, 1).Interior.Color = 16751001 Then
               
    b2Row = True
                Exit For
            End If
        End If
    Next
    i
    ' раскрываем первый уровень
    For i = nRow To 1 Step -1
       
    If b2Row Then
            If
    Cells(i, 1).Interior.Color = 16751001 And b1Row = False Then
               
    Cells(i, 1).EntireRow.Hidden = False
            ElseIf
    Cells(i, 1).Interior.ColorIndex = 11 Then
               
    b1Row = True
                Exit For
            End If
        End If
    Next
    i

    Всего записей: 3267 | Зарегистр. 30-05-2007 | Отправлено: 12:43 26-07-2011 | Исправлено: Zloy_Gelud, 12:47 26-07-2011
    KorolCOOL



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

    Цитата:
    Оставь надежды всяк сюда входящий  
    Имо - не трать время. Неподъемно. Гугл в помощь по "VBA Защита кода", к примеру - давно и очень много разжевано под разными соусами и приправами. Недавно и здесь краешком задевали этот вопрос.  

     
    Не поверите про Гугл даже и не вспонил. Дико извиняюсь.

    Всего записей: 38 | Зарегистр. 04-11-2009 | Отправлено: 13:42 26-07-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    Если именно по коду, в лоб, то  
    - заменил бы If на Select Case, поставив вперед то, что чаще встречается.
    - Cells(i, 1).EntireRow == Rows(i)
    - зачем доп. условие проверки b3Row = False [2,1], если оно уже по умолчанию False, а после первого же изменения его на True цикл прерывается и дальше оно не используется?
     
    И я не понял из приведенного кода - а зачем в обратную сторону цикл?

     
    KorolCOOL
    Да ничего страшного. Просто тема обширна и в сети много информативных обсуждений есть. Я для себя ее закрыл с резюме - нельзя :)
     
    Добавлено:
    Zloy_Gelud
    Не то зачеркнул. Д.б. так:
     
    - зачем доп. условие проверки b3Row = False [2,1], если оно уже по умолчанию False, а после первого же изменения его на True цикл прерывается и дальше оно не используется?  
     
    И я не понял из приведенного кода - а зачем в обратную сторону цикл?
     
    Проверки 'If b3Row Then' и 'If b2Row Then' вынести до цикла.  

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 14:53 26-07-2011 | Исправлено: asbo, 15:42 26-07-2011
    Zloy_Gelud



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

    Цитата:
    И я не понял из приведенного кода - а зачем в обратную сторону цикл?

    Есть некий прайс-лист. Товары в нем разбиты на категории по уровням. Была задача написать свой собственный поиск товара по его коду, который раскрывал бы уровни, выделяя найденный товар. Поэтому приходится сначала отображать необходимые строки до этого товара, а затем после него, создавая иллюзию раскрытия необходимого уровня.

    Всего записей: 3267 | Зарегистр. 30-05-2007 | Отправлено: 15:48 26-07-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    Я примерно так и понял, поэтому зачеркнул.

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 16:16 26-07-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как программно получить список всех свойств и методов объекта? Заколебывает жать точку, крутить список,  и поштучно вставлять.
     
    Объект - встраиваемый контрол OCX. Свойства Properties ни у него, ни у дочерних объктов нет.

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 12:15 28-07-2011
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asbo
    Visual Basic: Inspect COM Components Using the TypeLib Information Object Library
    RunTime COM Object Inspection вроде есть пример с исходником

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 21:00 28-07-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    smirnvlad
    Спасибо. Мельком пробежался - вроде бы в тему. Буду разбираться.

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 22:29 28-07-2011
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asbo
    может не "программно получить список всех свойств и методов объекта", а автоматизировать "жать точку, крутить список,  и поштучно вставлять."

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 07:59 29-07-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    smirnvlad
    Да не-е :) Хотелось бы на логическом уровне. А тут автоматизатор какой-то надо обучить будет. Я вот ужЕ библиотеку TLBInf32 прицепил. Похоже - то, что доктор прописал. Щаз буду пробывать.

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 08:55 29-07-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    smirnvlad
    Ну вот. Есть первые результаты. Правда пока только с константами получилось, как с самыми простыми. Код:
     
     
    Добавлено:
    А вот, только что найденное - готовый материал и, похоже, весьма тщательно сделанный. Кому интересно, рекомендую. К статье прилагается архив, в нем Ексель-файл с открытым кодом. Весьма пользительно.

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 11:52 29-07-2011
    andrewkard1980

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день.
    Не получается распечать web страницу, читал на  MS что это из-за безопасности. Может как-то возможно сделать? Необходимо распечатать 10-20 web страниц по ссылкам, я с циклом разберусь - лишь бы сам процесс печати настроить.
    Спасибо.  
    Вот код:

    Код:
     
    Sub IE()
    Dim oApp As SHDocVw.InternetExplorer
    'SHDocVw.dll (Microsoft.internet.control)
     
    Set oApp = CreateObject("InternetExplorer.Application")
    Set oApp = New SHDocVw.InternetExplorer
     
    With oApp
         .Navigate "http://www.msoffice.nm.ru"
         .Visible = True
         .ExecWB OLECMDID_PRINT
    End With
     
    End Sub
     

    Всего записей: 209 | Зарегистр. 01-05-2010 | Отправлено: 14:04 30-07-2011
    asbo

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

    Цитата:
    Не получается распечать web страницу

    Блин... Ось какая? Под адином или юзером? Принтер сетевой или локальный? Недурно бы и обсказать - что именно не получается, где возникает ошибка. А если читал что-то, то и ссылку дать. Глядишь, кто и поможет...

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 14:50 30-07-2011
    andrewkard1980

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    WinXp, админ, сейчас виртуальный.
    Исправленный код:
     

    Код:
     
    Sub IE()
    Dim oApp As SHDocVw.InternetExplorer
    Dim sURL$
     
    'SHDocVw.dll (Microsoft.internet.control)
     
    For i = 2 To 21
    sURL = Worksheets("Ввод").Cells(i, 10).Value
     
    If InStr(1, sURL, "http") = 0 Then Exit Sub
     
    Set oApp = CreateObject("InternetExplorer.Application")
    Set oApp = New SHDocVw.InternetExplorer
     
    oApp.Navigate sURL
    oApp.Visible = true
    While oApp.Busy
        DoEvents
    Wend
     
    oApp.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER
     
    Next i
     
    End Sub
     

     
    Ошибка возникает на:  
    oApp.ExecWB OLECMDID_PRINT
     
    Ошибка выполнения "-2147221248 (80040100)":
    Сбой метода «ExecWB» объекта «iwebbrowser2»
     
    Описание тут:
    http://support.microsoft.com/kb/251133/ru
     
    Спасибо.
     
     

    Всего записей: 209 | Зарегистр. 01-05-2010 | Отправлено: 15:55 30-07-2011 | Исправлено: andrewkard1980, 16:19 30-07-2011
    Andrey32

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте. Нужно решить проблему с красным уголком в примечаниях, Excell 2007. Хочется, чтобы их не было, портят вид. Возможно ли это сделать в коде VBA?
    Добавляю примечания с помощью .AddComment

    Всего записей: 245 | Зарегистр. 12-12-2006 | Отправлено: 22:51 30-07-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Andrey32
    По памяти - что-то типа DisplayComment(s) или ShowComment(s), нет Екселя под руками.  Поищи в браузере по Comment. Но это глобальная настройка Excel. Отдельно у примесания вроде не регулируется.

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 23:21 30-07-2011
    Открыть новую тему     Написать ответ в эту тему

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