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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    рядом с ячейкой восклицательный знак нажав на него можно выбрать преобразовать в число НО ВОТ КАК  это сделать макросом ?!?!?!?
     
    с разрядом разобрался больше 15 не выводится ! спасиб !
    но какая команда макросом делает то что я делаю руками нажимая на восклиц знак и преобразовать в число ?! столбики из таких данных и руками нереально! цифр меньше 15

    Всего записей: 40 | Зарегистр. 11-07-2006 | Отправлено: 15:15 16-02-2009
    murka_anka

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    soulthiefer
    Можно выделить всю область с такими предупреждениями (начиная с первой такой ячейки), нажать значок и выбрать "преобразовать..." - без vba.

    Всего записей: 61 | Зарегистр. 10-04-2008 | Отправлено: 15:31 16-02-2009
    soulthiefer

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    так в том то и дело нужно чтоб это было внутри макроса т к это только часть макроса .....дальше будут другие операции с этими числами (

    Всего записей: 40 | Зарегистр. 11-07-2006 | Отправлено: 15:38 16-02-2009
    5tas

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго времени суток,
    скажите пожалуйста, возможно ли через VBA каким-то образом открыть pdf - документ, найти в нём нужную информацию и скопировать в excel? Если возможно, то как? Что можно почитать на эту тему?

    Всего записей: 14 | Зарегистр. 20-10-2008 | Отправлено: 19:44 16-02-2009
    dakaskus

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Возвращаясь к своему вопросу, подскажите, пожалуйста, если выделен один массив, как дополнительно выделить еще одну строку к нему.
    Например, если выделено D2:F3 [командой Range(Selection, Selection.End(xlDown)).Select]- нужно чтобы было выделено D2:F4, но не привязываясь к абс ссылкам, так как постоянно будет менятся исходный выделеный массив.
     
    Спасибо

    Всего записей: 4 | Зарегистр. 11-02-2009 | Отправлено: 23:04 16-02-2009 | Исправлено: dakaskus, 23:06 16-02-2009
    j0yb1tyr

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте,
     
    Помогите, пожалуйста, в написании макроса для выполнения операции проверки в Экселе.
     
    Существует две таблицы (на разных страницах):  
    - Одна со столбцами 1, 2, 3, 4, 5. в столбце 1 - время регистрации (в виде 16/02/09 10:32 - текстовой формат), в столбце 2 фамилия, в столбце 3 значение отделения; в столбце 4 - зарегистрированное значение.  
    - Вторая из столбцов 1, 2, 3 и тд., где в столбце 1 (время в формате 10:32 - текстовой формат), а столбцах 2, 3 и т.д. стоят значение отделений. А в ячейках этой таблицы значения, которые привязаны определенному времени и отделению.
     
    Надо проверить, чтобы значение в ячейке в столбце 4 первой таблицы соответствовало времени, когда это значение должно было быть зарегистрировано определенным отделением (из второй таблицы). Если оно не соответствует, то в столбце 5 первой таблицы делается пометка. Есть так же условие возможности не соответствия до n-минут. И чтобы проверка шла по всем строкам первой таблицы.
     
    Буду очень благодарен за помощь. Спасибо

    Всего записей: 2 | Зарегистр. 22-01-2007 | Отправлено: 06:39 17-02-2009
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dakaskus
    Выдели произвольный диапазон и запусти макрос:

    Код:
    Sub qq()
        Dim x As Range
        Set x = Selection
        Set x = Range(Cells(x.Row, x.Column), Cells(x.Row + x.Rows.Count, x.Column + x.Columns.Count - 1))
        x.Select 'Это для примера
    End Sub
    Я Вас правильно понял?

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 07:11 17-02-2009
    Mantisby



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

    Цитата:
    Пожалуйста, с сортировочкой.

     
    огромнейшее спасибо! очень полезный инструмент получился, сэкономит кучу времени и сил.

    Всего записей: 2231 | Зарегистр. 25-01-2005 | Отправлено: 13:55 17-02-2009
    soulthiefer

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

    Цитата:
    но какая команда макросом делает то что я делаю руками нажимая на восклиц знак и преобразовать в число ?! столбики из таких данных и руками нереально! цифр меньше 15

     
    подскажите пожалуйста (( немогу дальше макрос писать (

    Всего записей: 40 | Зарегистр. 11-07-2006 | Отправлено: 14:16 17-02-2009
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    soulthiefer, ответ на Ваш вопрос абсолютно неоднозначен. Excel может выдавать такой "вопросительный знак"  в разных случаях. Например, апостроф в начале строки, или строка имеет формат "Текстовый" или ... (ещё варианты..)
    Вы бы лучше выложили примерчик своего "неправильного файла"!
     
    как вариант, попробуйте код (к примеру, для ячейки B3) :

    Код:
      Range("B3").Value = CDbl(Range("B3").Value)


    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 15:40 17-02-2009
    soulthiefer

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

    Цитата:
      Range("B3").Value = CDbl(Range("B3").Value)

    спасибо делает то что нужно но если указать например Range("E2:F17") вылетает с ошибкой (( а у мну 3 столбца с такими записями (((  
     
    Добавлено:

    Цитата:
    Вы бы лучше выложили примерчик своего "неправильного файла"!

    вот примерчик http://www.rapidshare.ru/930964  
    помогите пожалуйста очень нужно ((

    Всего записей: 40 | Зарегистр. 11-07-2006 | Отправлено: 16:03 17-02-2009
    Pravoved90

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

    Всего записей: 511 | Зарегистр. 08-02-2008 | Отправлено: 18:15 17-02-2009
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    soulthiefer
    ну, разумеется, нельзя куче ячеек присвоить числовое значение этой же кучи ячеек!
    только в цикле по одной...
    Кроме того, в примере "проблеммные" ячейки в диапазоне A1:C18
     
    попробуйте такой код:

    Код:
     
    Sub ChangeRange()
    Dim RR As Range
        For Each RR In Range("A1:C18")
            If (Not IsEmpty(RR.Value)) And (RR.Value <> "-") Then
              RR.Value = CDbl(RR.Value)
            End If
        Next
    End Sub
     

    NB.  
    1) можно ещё добавить проверок, чтобы лишние ячейки не затрагивались.
    2) для скорости можно выключать обновление экрана
    3) можно воткнуть обработчик ошибок (если есть в куче ячейки разных типов)...
     


     
    Pravoved90

    Цитата:
    Необходимо, чтобы каждая ячейка, где ничего не записано была окрашена, к примеру, в красный цвет.

    а точно это надо решать через макросы?! Это просто классическая задача для условного форматирования!!!!!  (меню "Формат" - "Условное форматирование..." далее задать формулу и цвет заливки... и всё!  

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 00:19 18-02-2009
    Pravoved90

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

    Цитата:
    а точно это надо решать через макросы?! Это просто классическая задача для условного форматирования!!!!!  (меню "Формат" - "Условное форматирование..." далее задать формулу и цвет заливки... и всё!  

    Знал, что может возникнуть такой вопрос..Но надо через макрос:
    1. В некоторых ячейках уже есть условное форматирование
    2. Ячеек очень много - записать в каждую условный формат - неделя уйдет...
     
    Знаю, что макрос должен быть простой..Просто с цветами не писал..Думаю, должно быть что-то вроде "если ячейка и диапазона = 0 закрасить ее в красный цвет, а если не равен - в белый"..
     
    Добавлено:
    Благодарю за ответ. Разобрался)

    Всего записей: 511 | Зарегистр. 08-02-2008 | Отправлено: 03:30 18-02-2009
    SAS888

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

    Цитата:
    нельзя куче ячеек присвоить числовое значение этой же кучи ячеек!  

    Можно. Например, так:

    Код:
    Sub ConvNum()
     
        With ActiveSheet.UsedRange
            arr = .Value
            '.NumberFormat = "General"
            .Value = arr
        End With
     
    End Sub

    если "проблемные" ячейки имеют текстовый формат - раскомментируйте строку в коде, если формат "общий", то эта строка не нужна.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 06:07 18-02-2009
    SERGE_BLIZNUK

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

    Цитата:
    With ActiveSheet.UsedRange  
            arr = .Value  

    SAS888, великолепно!!! Снимаю шляпу, маэстро!

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 07:14 18-02-2009
    SAS888

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

    Цитата:
    Думаю, должно быть что-то вроде "если ячейка и диапазона = 0 закрасить ее в красный цвет, а если не равен - в белый"

    Можно чуть проще. Опять же без цикла. Вставьте в модуль нужного листа код:

    Код:
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        If Target.Column = 1 Then
            Application.ScreenUpdating = False: Application.EnableEvents = False
            [A1:A50].Interior.ColorIndex = xlNone
            [A1:A50].Cells.SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 3
            Application.ScreenUpdating = True: Application.EnableEvents = True
        End If
     
    End Sub

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 08:34 18-02-2009
    Mantisby



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

    Цитата:
    огромнейшее спасибо! очень полезный инструмент получился, сэкономит кучу времени и сил.  

    ан, нет, что-то не получается. Когда в ячейках появляется большой объем данных, макрос начинает вываливаться  Пример файла

    Всего записей: 2231 | Зарегистр. 25-01-2005 | Отправлено: 10:13 18-02-2009 | Исправлено: Mantisby, 10:14 18-02-2009
    dakaskus

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

    Цитата:
    dakaskus  
    Выдели произвольный диапазон и запусти макрос:  

     
    Класс! То что нужно!
    Спасибо большое тебе!

    Всего записей: 4 | Зарегистр. 11-02-2009 | Отправлено: 10:15 18-02-2009
    soulthiefer

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

    Цитата:
    Код:  
    Sub ChangeRange()  
    Dim RR As Range  
        For Each RR In Range("A1:C18")  
            If (Not IsEmpty(RR.Value)) And (RR.Value <> "-") Then  
              RR.Value = CDbl(RR.Value)  
            End If  
        Next  
    End Sub

     
    СПАСИБО огромное !!!! то что нужно  
     

    Всего записей: 40 | Зарегистр. 11-07-2006 | Отправлено: 11:14 18-02-2009
       

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