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

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

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

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

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewkard1980, я рад.
    Тогда, если концепция понятна, то можно часть кода заменить на:

    Код:
     
                Case 1
                    If (tAsc >= 48 And tAsc <= 57) Then Exit For
                Case Else
                    Select Case tAsc
                        Case 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 40, 41, 45
                              bSpc = False
                        Case 32
     

    Короче запись и шустрее чуток будет.
    Может кто и подскажет, как грамотней это длинное Case записать.
     
    Добавлено:
    Если по-русски, то все это означает:
     
    вернуть блок данных, начинающийся с цифры и могущий иметь в себе одинарные разделители - пробел, круглые скобки и минус. Концом блока считается любой символ, отличающийся от названных (в т.ч. приснопамятный Chr(160) - неразрывный пробел) или двойной пробел.  
     
    Для компенсации ущербности по неразрывному пробелу и длинному тире можно дополнить:

    Код:
     
            tAsc = Asc(Mid(pStr, i, 1))
            If tAsc = 160 Then tAsc = 32
            If tAsc = 175 Then tAsc = 45 ' проверить 175! - длинное тире  
     


    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 18:30 16-03-2011 | Исправлено: asbo, 19:01 16-03-2011
    Zloy_Gelud



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

    Всего записей: 3265 | Зарегистр. 30-05-2007 | Отправлено: 20:55 16-03-2011 | Исправлено: Zloy_Gelud, 21:00 16-03-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud,  
     
    внести в нее '=ТДАТА()' или '=СЕГОДНЯ()'
    Но это значение будет каждый раз меняться открытии и пересчете.  
     
    Или же вставить модуль и в нем процедуру:
    Private Sub Auto_Open()
        Cells(1, 1) = Now()
    End Sub
     
    Или же использовать событие книги  
    Private Sub Workbook_Open()
        Cells(1, 1) = Now()
    End Sub

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 21:29 16-03-2011 | Исправлено: asbo, 21:30 16-03-2011
    Zloy_Gelud



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asbo -- спасибо. Подскажи еще. Вот допустим имеем мы некую ячейку. В ней нет абсолютно никакого текста. Так почему не работает такое:

    Код:
    If IsEmpty(Range("A1")) Then
       
    MsgBox (
    "Empty")
    End If

    а такое работает:

    Код:
    If Range("C19").Value = "" Then
       
    MsgBox (
    "Empty")
    End If
     
    ?

    Всего записей: 3265 | Зарегистр. 30-05-2007 | Отправлено: 21:48 16-03-2011 | Исправлено: Zloy_Gelud, 21:49 16-03-2011
    andrewkard1980

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день. Подаскажите, есть ли возможность в функции Split разделитель указать с разной длиной? Например, разбить строку на масив с разделителем <*>, при чем, вместо * может быть любая последовательность букв/цифр.
    Спасибо!

    Всего записей: 209 | Зарегистр. 01-05-2010 | Отправлено: 23:00 16-03-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Zloy_Gelud
    По первому, думаю, что в A1 нечто все-таки есть. Попробуй проверь:
     
    ? "'" & Range("A1") & "'" или
    ? Asc(Range("A1"))
    ? Len(Range("A1"))
     
    У меня, во всяком случае, и на пустой, еще девственной ячейке, и на той, из которой было удалено нечто, показывает True. И через Range("A1") и через Cells(1, 1)
     
    Тут м.б. нюанс использовать или нет .Value, т.к. в твоем варианте идет обращение к объекту Range, у которого свойство по умолчанию - Value, которое и проверяется. Имо, в данном случае - пофиг, ибо Эксель. А вот если бы работали с таблицей Access - там поле может отзываться и на Empty, и на Null, и на "", в зависимости от того, что в нем есть или нет ваще ничего.
     
    По второму - тут явная проверка значения на "". Она будет работать всегда, если в ячейке ничего нет.
     
     
    Добавлено:
    Да! Там может быть апостроф! "'" Chr(39)
    Тогда в первом варианте будут всего _два_ апострофа, Len = 0, Ask даст ошибку 5, а Empty = False
    Наверное в этом и дело.
     
    (Я чуть поправил первый ? вызов)
     
    Добавлено:
    andrewkard1980
    Не знаю. Хэлп говорит:
     

    Цитата:
    delimiter - Optional. String character used to identify substring limits. If omitted, the space character (" ") is assumed to be the delimiter. If delimiter is a zero-length string, a single-element array containing the entire expression string is returned.  

     
    Обрати внимание, что вначале используется "character" в единственном числе (string - прилагательное - строковый), а потом этот термин меняется на "string" (существительное), что подразумевает последовательность character-ов.  
     
    Вот и пойми. А говорят - курите маны... Как их курить, когда они своего же языка не знают... Да и ваще английский - ни тебе родов, ни тебе падежов. Написано - Манчестер, читается Ливерпуль.... Проверять надо.  
     
    Дык ты попробуй и расскажи :) Загони в строковую переменную нужную тебе последовательность, поставь ее в качестве аргумента - и вперед.

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 23:20 16-03-2011 | Исправлено: asbo, 23:52 16-03-2011
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    andrewkard1980
    Используй всё тот же RegExp. Для примера (выделяет слова и целые числа)

    Код:
     
        'подключить Microsoft VBScript Regular Expressions 5.5  
        Dim pReg As New VBScript_RegExp_55.RegExp, pMatch As VBScript_RegExp_55.Match
        Dim pMatches As VBScript_RegExp_55.MatchCollection
     
        pReg.Global = True: pReg.Pattern = "[A-Za-zА-Яа-я0-9]*[^ \!-/:-\?\[-`\{-~$]": pReg.IgnoreCase = True
        Set pMatches = pReg.Execute("Microsoft .Net 4, [to] (next) 54.47")
        If pMatches.Count > 0 Then
            For Each pMatch In pMatches
                Debug.Print pMatch.Value
            Next pMatch
        End If
     

    P. S. Если религия не позволяет использовать раннее связывание, то можно заменить

    Код:
     
    Dim pReg As Object, pMatches As Object, pMatch As Object
    Set pReg = CreateObject("VBScript.RegExp")
    'далее всё тоже самое
    pReg.Global = True
    '...
     

    RegExp как часть поддержки VBScript существует в ОС Microsoft, где есть Internet Explorer 4 или выше. То есть заморачиваться, что будут проблемы не стоит.

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 03:33 17-03-2011 | Исправлено: AndVGri, 03:36 17-03-2011
    SAS888

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

    Цитата:
    Никаких доп. библиотек.
    Мой вариант использует позднее связывание. Т.е. ничего подключать не нужно.

    Цитата:
    Думаю, работать будет быстрее, чем вариант SAS888.
    А я так не думаю. Выигрыш моего варианта во времени составляет примерно 30%.
     
    dmka

    Цитата:
    если "-" заменить на [\s-] (пробел или минус) по идее должен справится
    Возможно. Но не все так просто.

    Цитата:
    Или можно добавить такой-же pattern с пробелами.
    Можно. Это как раз та доработка, о которой я говорил. Так, в одном из примеров автора есть строка, в которой между номерами телефонов вообще нет символа пробела (только другие), а двойной (и более) пробел нужно считать разделителем номеров, то, считаю, что в данном случае, все-таки более рационально использовать метод Replace объекта RegExp, чем Execute. Заменяем все символы, которые не может содержать телефонный номер (кстати, для приведения к одному виду, можно выбросить и "минус"),  на пробелы и берем первую последовательность полученной строки до двух пробелов подряд. что у меня и сделано.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 06:31 17-03-2011 | Исправлено: SAS888, 07:09 17-03-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SAS888
    * ничего подключать не нужно.  
    - А я говорил про другое - "Никаких доп. библиотек" Вы же сами процитировали :) Раннее-позднее... Какая разница? Библиотека нужна? Нужна. Ап чом тады речь?
     
    Думаю... не думаю... устроили тут ромашка. Как-то конкретная величина 30 ну никак не вяжется с неопределенной преамбулой "не думаю". Замеряли? Тады так и говорите. А если только "думате" - не называйте конкрентных цифр :)  
     
    Я, это, не учу, не поймите превратно. Просто две фразы и два противоречия... Странные, однако, манеры изложения.
     
    Мое "думаю" - всего лишь беглый взгляд на код. Померяю - скажу точно. И потом - это же _мой_ код! Он, по определению, должен работать быстрее :))
    .

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 09:36 17-03-2011
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    asbo
    Моё "думаю" - это ответ на Ваше "думаю". А вообще-то, я утверждаю, т.к прежде, чем говорить, я все проверил...
    Давайте прекратим флуд.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 10:14 17-03-2011
    asbo

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

    Цитата:
    Выигрыш моего варианта во времени составляет примерно 30%.
    Мало того, что Вы ошиблись на порядок (!), но еще и знак попутали :) С точностью до наоборот.
    Ваш код работает в 3 (ТРИ!) раза медленне моего.

    Код:

    asbo
     1 ; Cycles: 10^1; Time, .....0, .......507
     2 ; Cycles: 10^2; Time, .....0, .....5'058
     3 ; Cycles: 10^3; Time, ....47, ....51'500
     4 ; Cycles: 10^4; Time, ...531, ...521'237
     5 ; Cycles: 10^5; Time, .5'187, .5'187'249
     6 ; Cycles: 10^6; Time, 51'922, 51'929'215 (ужЕ неинтересно)
    Cycles: 1000000= 10^6; Time, ms: 51'922, mcs:  51'929'215
     
    888
     1 ; Cycles: 10^1; Time, .....0, .....1'430
     2 ; Cycles: 10^2; Time, ....16, ....14'676
     3 ; Cycles: 10^3; Time, ...141, ...145'500
     4 ; Cycles: 10^4; Time, .1'453, .1'443'293
     5 ; Cycles: 10^5; Time, 14'453, 14'451'019
    Cycles: 100000= 10^5; Time, ms: 14'453, mcs: 14'451'019

    Продолжайте и дальше "думать", что Вы "думаете", Гедеван Александрович...
     
    Не могу удержаться :)

    Цитата:
    ...А вообще-то, я утверждаю, т.к прежде, чем говорить, я все проверил...  

    Как тут не помянуть еще одного классика:
    "А Вы знаете, Вера Сергеевна, какой я конкретный?! У-ух, какой я конкретный!"
     
    Если я не прав в своих выводах (вкралась ошибка, некорректно проведено сравнение etc.) - готов публично принести извинения в любом месте (местах) руборда, указанном (ых) Вами.  
    .

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 11:00 17-03-2011 | Исправлено: asbo, 12:46 17-03-2011
    BabyTalk



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста, что значит ошибка во второй строчке "Runtime Error 9 Subscript Out of Range"? По каким причинам она возникает?
     
     

    Код:
     
    'постановка в очередь
            W(minwind).kle = W(minwind).kle + 1
    -->W(minwind).kl(W(minwind).kle) = iP
     

     
    Есть задача решенная, а запустить не могу. Моделирование очереди в кассу. Если разрешите...я весь код выложу.  
     
    ЗЫ: не актуально, ошибку нашла.

    Всего записей: 2 | Зарегистр. 04-02-2010 | Отправлено: 13:04 17-03-2011 | Исправлено: BabyTalk, 16:03 17-03-2011
    SAS888

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

    Цитата:
    Ваш код работает в 3 (ТРИ!) раза медленне моего.

    Вы, мягко говоря, ошибаетесь.
    Вот Ваш код.
    А Вот мой.
    Из Вашего макроса удален вывод сообщений, а из моего - вывод на рабочий лист.
    Почувствуйте разницу.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 14:25 17-03-2011 | Исправлено: SAS888, 14:28 17-03-2011
    asbo

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

    Цитата:
    Вы, мягко говоря, ошибаетесь.
    Уж не намек ли это на то, что мне придется извиняться? :))
     
    Вот участки кодов, которые сравнивал я:
    В этом контексте:
    1. Так Вы может быть покажете свои цифры?
    2. Любезность с Вашей стороны в удалении последней процедуры формирования окончательной строки была излишней.
    3. А вот, наоборот, было бы чрезвычайно любезно, если бы Вы использовали последнюю, уточненную версию - без Asc.
    4. Я повторю этот опыт в Вашей интерпретации. Я хочу рассуждать о цифрах, а не об очередном Вашем мнении по поводу.
    Добавлено:

    Цитата:
    Вы, мягко говоря, ошибаетесь. Вот Ваш код. А Вот мой. Из Вашего макроса удален вывод сообщений, а из моего - вывод на рабочий лист. Почувствуйте разницу.
    Намек не понял. Разницу чего и чего? Кодов? Удаленных фрагментов? Ап чом Вы? Будьте любезны, изъясняйтесь складнее, ага?
     
    Добавлено:
    SAS888, Вы взяли мой неоптимизированный код и с удовольствием его померяли :) С таким же успехом Вы могли померять мое первое сообщение по поводу этого парсера, где еще не было никакого кода :) Вы тему-то, вообще, читаете??
     
    Да. В старом варианте, по Вашей методе получается 0.15625 vs 0.125 не в мою пользу. Но... Но! Вы же просто нагло передернули, сделав вид, что моего поста с уточнением и акцентом на скорострельность не было :) Что сказать Вам на это?... В уточненном (см. ссылку выше) варианте мои брюки превращаются в шорты длиной 0.0625
     
    Почувствовали разницу? В два раза (по Вашей методе) мой код быстрее...
     
    Я уж не буду распространяться по поводу методы Ваших "замеров" - учите матчасть и погуглите на тему измерений и оценки скрострельности кода. И если все замеры сделать грамотно цифры получаются, как в моем первом отчете (я перепроверил) - т.е. в три раза.
     

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 15:03 17-03-2011 | Исправлено: asbo, 16:05 17-03-2011
    mrdime



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

    Цитата:
    Да! Там может быть апостроф! "'" Chr(39)
    Тогда в первом варианте будут всего _два_ апострофа, Len = 0, Ask даст ошибку 5, а Empty = False
    Наверное в этом и дело.  

    Очень заинтересовали твои рассуждения. Давно, но безуспешно пытался написать макрос для удаления пустых строк и столбцов из таблицы (т.е. в которых все ячейки - не содержат видимых значений). Т.е. если там есть пробелы или невидимые апострофы (насколько я понял - это Chr(39)).
    В связи с вышенаписанным вопрос: почему этот апостроф (если это вообще апостроф) не отображается в ячейке? Как определить какой символ или вообще - что именно - находится в ячейке?
    Часто доводится играться с вот такими файлами.
    Например, в первом столбце куча пустых (визуально) ячеек, только все они почему-то проверку на IsEmpty выдают False. Что в этих ячейках? Из-за подобных проблем не удается сделать корректную проверку на пустые строки и столбцы.
    Буду благодарен за помощь.

    Всего записей: 2975 | Зарегистр. 04-01-2005 | Отправлено: 16:43 17-03-2011 | Исправлено: mrdime, 16:50 17-03-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    mrdime,  
    * почему этот апостроф (если это вообще апостроф) не отображается в ячейке?  
    - дело в том, что в Экселе апостроф используется, в частности, для принудительной интерпретации им (Экселем) данных в ячейке, как текст, когда А расположен в начале строки. Ну, типа альтернатива форматированию ячейки как текст (@). И он не виден в этом случае.  
     
    * Как определить какой символ или вообще - что именно - находится в ячейке?  
    - Как показал эксперимент - и VBA его не видит... Надо еще поэкспериментировать на досуге. А может кто объявится и с готовым решением. На файлы взгляну обязательно к вечеру ближе.
     
    * в первом столбце куча пустых (визуально) ячеек, только все они почему-то проверку на IsEmpty выдают False. Что в этих ячейках?
    - я давным-давно решал подобную задачу. Времни было в обрез. Плюнул и решил ее на стадии шагом ранее - исключил попадание подобных данных в интересующие меня диапазоны листа :)

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 17:02 17-03-2011
    DmitryPrint

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

    Цитата:
    проверку на IsEmpty

    А почему именно IsEmpty? Оно обязательно? Дает какие то преимущества или скорость вычислений повышает?
    Почему так не сделать

    Код:
    If Range("A9") = Empty then
        Msgbox "empty"
    End if


    Всего записей: 39 | Зарегистр. 05-08-2008 | Отправлено: 19:59 17-03-2011 | Исправлено: DmitryPrint, 20:01 17-03-2011
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DmitryPrint
    В примере asbo где-то было именно IsEmpty. Я и взял его за основу. Это не принципиально. Хотя могу предположить, что функции исполняются быстрее, чем произвольные логические действия. Но, это лишь мое ИМХО.

    Всего записей: 2975 | Зарегистр. 04-01-2005 | Отправлено: 20:16 17-03-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DmitryPrint,  
     
    *1 А почему именно IsEmpty?  
    - Тему читаем?
     
    *2 Оно обязательно?  
    - Да
     
    *3 Дает какие то преимущества ...
    - Да (и см. п.1)
     
    *4 ... или скорость вычислений повышает?  
    - А это тут при чем?
     
    *5 Почему так не сделать  
    - Вот поэтому (и см п.1):
     
    Range("A9").ClearContents
    ? Range("A9") = Empty
    True
    ? IsEmpty(Range("A9"))
    True
    Range("A9") = "'"
    ? Range("A9") = Empty
    True
    ? IsEmpty(Range("A9"))
    False
     
    Добавлено:
    mrdime, да нет. У Zloy_Gelud и была изначально проверка на IsEmpty, только он сравнивал ее с ="", а не с = Empty

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 20:25 17-03-2011 | Исправлено: asbo, 20:32 17-03-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

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