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

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



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

    Цитата:
    On Error Resume Next - мне помогает в случае, когда нет формул на листе

    Мне кажется, что вы перемудрили. On Error покрывает у вас большую часть кода. Если вы без него никак не можете, то надо сделать так, чтобы он контролировал проблемный оператор, а за ним сразу его выключать. Смотрите фрагмент программы:

    Код:
     
    F=-1 ' Для проверки, что нет ячеек
    On Error Resume Next 'Если нет ячеек с формулами - продолжать  
    F = Sheets(i).Cells.SpecialCells(xlCellTypeFormulas).Count 'Поиск ячеек с формулами  
    On Error goto 0 ' Выключаем обработчик
    if F>0 then
     ' здесь идёт код, если есть ячейки
    end if
    Если ячеек нет, то F будет равно -1. Проверяйте это значение где надо и всё.
     
    Добавлено:

    Цитата:
    а зачем If Error = 0 Then  я так и не понял

    Я тоже не совсем понимаю. Если хотите проверить, была ли ошибка, то это неверно по 2м причинам:
    1) проверять надо Err.Number, а не Err
    2) не совсем понятно, когда и какое значение будет иметь Err.Number внутри блока обработки ошибок. Я бы так не стал писать.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 23:40 02-04-2008 | Исправлено: nick7inc, 23:48 02-04-2008
    SAS888

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

    Цитата:
     Я тоже не совсем понимаю. Если хотите проверить, была ли ошибка, то это неверно по 2м причинам:
    1) проверять надо Err.Number, а не Err
    2) не совсем понятно, когда и какое значение будет иметь Err.Number внутри блока обработки ошибок. Я бы так не стал писать.
    Это вовсе не для поиска ошибок (откуда им взяться?). Если на листе есть хотя бы одна ячейка с формулами, то Err = 0 и выполняется код сравнения и т.д., если Err <> 0, то переходим к следующему листу. Можно, конечно, сравнивать и  
    Цитата:
    if F>0 then
    , но какая разница?

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 05:22 03-04-2008
    nick7inc



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

    Цитата:
    Это вовсе не для поиска ошибок (откуда им взяться?).
       
    Да ну?! Шутите? Есть, причём как при работе оператора поиска, так, похоже,  и в самом коде.

    Цитата:
     какая разница?

    Я вам уже говорил: у вас при любой ошибке будет пропускаться строчка, вызвавшая ошибку, а т.к. охват On Error Resume Next у вас большой, то ваш код вообще непонятно как себя ведёт. Если вы такие крутые программисты, что же вы до сих пор не решили проблему?    
    Я вам указываю на проблемный участок программы, говорю, что он написан далеко не оптимально, сложен для понимания работы программы и её отладки.  
     
    Последний раз советую...
     
    По поводу Err коректнее писать Err.Number, поскольку это объект, а не числовая переменная. Почитайте помощь по VBA, там в примере написано:
    Цитата:
    If Err.Number <> 0 Then

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 15:35 03-04-2008 | Исправлено: nick7inc, 15:50 03-04-2008
    Raytps

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем здравствуйте.  
    Программирование на VBA только начал изучать, поэтому прошу о помощи.  
    Дана таблица с m-множеством столбцов с данными и n-множеством строк с данными,  
    первая строка как обычно содержит заголовки столбцов.  
    Есть код:  
    a = Selection.AutoFilter(Field:=3, Criteria1:="условие")  
    который осуществляет фильтрацию столбца по "условию".  
    Вопрос: как программно получить количество отобранных записей  
    после применения фильтрации?  
    Заранее благодарен.

    Всего записей: 1 | Зарегистр. 21-02-2008 | Отправлено: 16:13 03-04-2008 | Исправлено: Raytps, 08:26 04-04-2008
    ol7ca

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nick7inc
    SAS888
     
    я применил переменную F с заданным значениме по-умолчанию -1, но ошибка тут:  
    ReDim Preserve A(LBound(A) To UBound(A) - 1)
    она там и была.  
    когда я убрал If Error = 0 Then - все заработало, но при условии что тут:"Sheet" нет ошбки, иначе опять ошибка тут:  
    ReDim Preserve A(LBound(A) To UBound(A) - 1)
     
    Добавлено:
    причем, код работает только когда On Error goto 0 стоит в конце, где и был
    иначе - ошибка.
    вот что у меня пока работает:
        Dim i As Integer, F As Long, A() As String, myCell As Range
        For i = 1 To ActiveWorkbook.Sheets.Count  
            On Error Resume Next  
            F = Sheets(i).Cells.SpecialCells(xlCellTypeFormulas).Count  
            'On Error GoTo 0 - ошибка.
            If F > 0 Then
                For Each myCell In Sheets(i).Cells.SpecialCells(xlCellTypeFormulas)
                    If InStr(1, myCell.Formula, "Sheet") <> 0 Then
                    MsgBox Sheets(i).Name & Chr(33) & myCell.Address
                    End If
                Next
            End If
            On Error GoTo 0
        Next
    End Sub
     
     
    при этом иногда код выдает похожие а не точные варинты  
    как при агументе True функции VLOOKUP
    можно ли установить поиск точных значений или использовать другую функцию?

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 18:28 03-04-2008 | Исправлено: ol7ca, 00:04 04-04-2008
    nick7inc



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

    Цитата:
    код работает только когда On Error goto 0 стоит в конце, где и был  
    иначе - ошибка

    Это означает, что код не работает как надо. Он просто пропускает оператор Redim. А вообще, я не вижу оператора ReDim в вашем примере. Приведите весь код.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 23:09 03-04-2008 | Исправлено: nick7inc, 23:12 03-04-2008
    SAS888

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

    Цитата:
    Это означает, что код не работает как надо.

    А Вы сами пробовали хотя бы "протестить" предложенный код?  
    По проводу Вашего замечания на счет контроля ошибки я уже согласился. Только почему Вы предлагаете  
    Цитата:
    F=-1
    ? Нужно F = 0.
    На счет работы с массивом, действительно, если ни на одном листе книги нет ни одной ячейки с формулой, содержащей искомый фрагмент, то при выходе из всех циклов будет предпринята попытка уменьшить размерность массива из одного элемента (что есть ошибка).
    Посмотрите следующий код, где устранен этот недостаток и учтены Ваши замечания.

    Код:
    Sub qq()
       
        Dim i As Integer, F As Long, A() As String, myCell As Range
        ReDim A(0)
        For i = 1 To ActiveWorkbook.Sheets.Count
            F = 0
            On Error Resume Next
            F = Sheets(i).Cells.SpecialCells(xlCellTypeFormulas).Count
            On Error GoTo 0
            If F > 0 Then
                For Each myCell In Sheets(i).Cells.SpecialCells(xlCellTypeFormulas)
                    If InStr(1, myCell.Formula, "Лист") <> 0 Then
                        A(UBound(A)) = Sheets(i).Name & Chr(33) & myCell.Address
                        ReDim Preserve A(LBound(A) To UBound(A) + 1)
                    End If
                Next
            End If
        Next
         
        If UBound(A) > 0 Then ' Если нет ни одной ячейки, то размерность уменьшать не будем
            ReDim Preserve A(LBound(A) To UBound(A) - 1)
         
            For i = LBound(A) To UBound(A)
                MsgBox A(i)
            Next
        End If
         
    End Sub

    Хотя, опять же, нет никакой разницы, что проверять. Хоть "If F > 0", хоть If Err = 0 (но до восстановления обработчика ошибок). Согласны?  
     
    Добавлено:
    ol7ca
    Что значит
    Цитата:
    можно ли установить поиск точных значений
    ? Задавайте это значение.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 05:43 04-04-2008 | Исправлено: SAS888, 10:42 04-04-2008
    ol7ca

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nick7inc
    SAS888
     
    Это весь код. Я оставил только то, что у меня работало. Я не понял зачем нужен массив, если все работает и так. Возможно, это повлечет другую ошибку, но пока я имею две проблемы:
    1. иногда код мне дает ближайшее (не точное) значение, как правило тогда, когда там нет точного результата а есть похожий (А2 вместо А1).
    2. На одном листе код "спотыкается" и дает ошибку
     
    Но, все тоже самое происходит и с оригинальным кодом.
    Вот мой вариант:Это весь код. Я оставил только то, что у меня работало. Я не понял зачем нужен массив, если все работает и так. Возможно, это повлечет другую ошибку, но пока я имею две проблемы:
    1. иногда код мне дает ближайшее (не точное) значение, как правило тогда, когда там нет точного результата а есть похожий (А2 вместо А1).
    2. На одном листе код "спотыкается" и дает ошибку
     
    Но, все тоже самое происходит и с оригинальным кодом.
    А может я чего-то перемудрил?
    Вот мой вариант:
    Sub A()
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
     
    Set wb = Application.Workbooks("map3.xls")
    For ZZ = 2 To Workbooks("map3.xls").Sheets("TB").Range("K65536").End(xlUp).Row
    If Not IsEmpty(ZZ) Then
    CC = Cells(ZZ, 11)
    qq MM, CC
    Workbooks("map3.xls").Sheets("TB").Cells(ZZ, "L") = MM
    End If
    Next
    End Sub
    Sub qq(MM As Variant, CC As Variant)
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False
       
        Dim i As Integer, F As Long, A() As String, myCell As Range
        ReDim A(0)
        For i = 1 To ActiveWorkbook.Sheets.Count
            F = 0
            On Error Resume Next
            F = Sheets(i).Cells.SpecialCells(xlCellTypeFormulas).Count
            On Error GoTo 0
            If F > 0 Then
                For Each myCell In Sheets(i).Cells.SpecialCells(xlCellTypeFormulas)
                    If InStr(1, myCell.Formula, CC) <> 0 Then
                        A(UBound(A)) = Sheets(i).Name & Chr(33) & myCell.Address
                        ReDim Preserve A(LBound(A) To UBound(A) + 1)
                    End If
                Next
            End If
        Next
         
        If UBound(A) > 0 Then  
           ReDim Preserve A(LBound(A) To UBound(A) - 1)
            For i = LBound(A) To UBound(A)
                MM = A(i)
                'MsgBox A(i)
                 
            Next
        End If
         
    End Sub

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 19:06 04-04-2008
    nick7inc



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

    Цитата:
    А Вы сами пробовали хотя бы "протестить" предложенный код?  

    Свой код я проверял. Чтобы ваш код проверить, мне нужен был последний полный вариант  (не фрагмент). В предыдущем сообщении вы мне его предоставили, сейчас гляну.
     
    Добавлено:

    Цитата:
    почему Вы предлагаете  
    Цитата:F=-1  
    ? Нужно F = 0.

    На тот случай, если (вдруг) функция вернёт 0 и мне потребуется определить, вернула она чего-нибудь или вылетела по ошибке. В последнем варианте (вряд ли она вернёт отрицательное значение) я получу -1.
     
    Добавлено:

    Цитата:
    Хотя, опять же, нет никакой разницы, что проверять. Хоть "If F > 0", хоть If Err = 0 (но до восстановления обработчика ошибок). Согласны?  

    Вы имеете ввиду отмену програмной обработки ошибок при помощи On Error goto 0? Не согласен. Если вы используете конструкцию:  
    If условие Then
     ...
    End If
    и хотите использовать Err, то отмену програмной обработки ошибок вам придётся делать после блока IF ... Then ... End If, иначе вы обнулите Err. В этом случае, как я уже говорил, On Error Resume Next будет влиять на работу большого участка кода (что не оптимально, когда в коде есть недочёты). В своём примере я отменяю обработку ошибок сразу за "проблемным оператором". И если в моём коде есть ошибка, то она не маскируется оператором On Error Resume Next, а вылезает в процессе отладки с последующим её исправлением.
     
    Добавлено:
    SAS888
    Код, похоже рабочий. Единственное, может быть ложное срабатывание при операциях со строками, содержащие формулы со словом "Лист".
     
    Добавлено:
    ol7ca

    Цитата:
    For ZZ = 2 To Workbooks("map3.xls").Sheets("TB").Range("K65536").End(xlUp).Row  
    If Not IsEmpty(ZZ) Then

    Как я понял, ZZ - номер строки. Не думаю, что команда IsEmpty() даст правильный результат, ей нужно передать ссылку на одну ячейку, если вы хотите узнать, пустая ли ячейка. Со столбцами и строками дело сложнее...
    Лучше применять конретные типы, а не универсальный variant. Отлаживать будет легче, да и код понятнее...

    Цитата:
     Application.DisplayAlerts = False  
        Application.ScreenUpdating = False

    Зачем без отмены действия, да ещё и несколько раз подряд вызывается?
     
    Было бы легче вам помочь, если бы были коментарии к коду (что вы и где хотите сделать, что за параметры вы передаёте, что ожидаете получить), да и файлы примера, где у вас что-то работает, а где-то ошибка. Просто так код у меня не работает, а гадать что и как у вас я не хочу.

    ----------
    Джин, не лезь в бутылку.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 22:25 04-04-2008 | Исправлено: nick7inc, 00:20 05-04-2008
    SAS888

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

    Цитата:
    Как я понял, ZZ - номер строки. Не думаю, что команда IsEmpty() даст правильный результат, ей нужно передать ссылку на одну ячейку, если вы хотите узнать, пустая ли ячейка. Со столбцами и строками дело сложнее...

    Для проверки строки на "пустоту" можно воспользоваться, например
    Код:
    If Rows(ZZ).Text = "" Then MsgBox "Строка пуста"
    , где ZZ - номер проверяемой строки.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 08:24 06-04-2008
    ol7ca

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вот пример файла с кодом о котором шла речь:
    http://slil.ru/25662765
    цель: в клонке А (лист TB) имя. Надо во всей книге найти где испольуется это имя (в формуле) и вставить ссылку в клонку B (лист TB). (желательно, чтобы по ссылке потом можно было перейти к указанной ячейке, а также при наличии 2-x и более ссылок  - вписать их в ячейки справа)
    основная проблема:
     иногда код мне дает ближайшее (не точное) значение.  
    это видно в B50 (лист TB) - она верная а далее - ошибка до B99 и т.д.
    почему так - я не могу понять.
    и если хотя бы это исправить - то буду благодарен.  
    заранее спасибо за помощь.

    Всего записей: 125 | Зарегистр. 01-02-2007 | Отправлено: 17:56 07-04-2008 | Исправлено: ol7ca, 19:18 07-04-2008
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ol7ca
    Посмотрите Здесь. Сравните с Вашим кодом. Пояснений не вкладываю, т.к. все очевидно.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 06:42 08-04-2008
    Mint86



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

    Всего записей: 166 | Зарегистр. 25-06-2007 | Отправлено: 10:15 08-04-2008
    SAS888

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

    Код:
    Cnt = GetSetting("XYZ Corp", "InvoiceNum", "Count", 0)
    Cnt = Cnt + 1
    SaveSetting "XYZ Corp", "InvoiceNum", "Count", Cnt

    Достали из реестра значение в переменную "Cnt" - увеличили на 1 и снова записали.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 10:59 08-04-2008 | Исправлено: SAS888, 11:01 08-04-2008
    nick7inc



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

    Цитата:
    Для проверки строки на "пустоту" можно воспользоваться, например  
    Код:If Rows(ZZ).Text = "" Then MsgBox "Строка пуста"  
    , где ZZ - номер проверяемой строки.

    У меня есть более универсальное средство:
    Код:
    Public Function IsEmptyRange(Myrange As Range) As Boolean
    Dim cell As Range
     For Each cell In Myrange.Cells
     If Not IsEmpty(cell) Then IsEmptyRange = False: Exit Function
    Next cell
    IsEmptyRange = True
    End Function

     
    Добавлено:
    Хотя, возможно, для проверок строк и столбцов лучше функцию переписать, проверяя используемое пространство:
    код

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 11:02 08-04-2008 | Исправлено: nick7inc, 11:31 08-04-2008
    SAS888

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

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 11:03 08-04-2008
    nick7inc



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

    Цитата:
    Но в частных случаях (например, проверка именно строки) я стараюсь использовать (если это оправдано) код покороче и побыстрее.

    При условии, что он себя адекватно ведёт. К примеру, можно передать функции isEmpty() диапазон, содержащий несколько ячеек или  даже столбец. Но функция ведёт себя неадекватно при данных условиях: она будет всегда возвращать одно и то же значение, в не зависимости от того, все ячейки пустые  или нет.
     
    Добавлено:
    Предыдущее сообщение дополнил.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 11:34 08-04-2008
    Mint86



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

    Цитата:
    Достали из реестра значение в переменную "Cnt" - увеличили на 1 и снова записали.  

    Спасибо! А можно этим или другим способом увеличивать значение в определенном ini или txt файле?

    Всего записей: 166 | Зарегистр. 25-06-2007 | Отправлено: 11:45 08-04-2008
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mint86
    Если имеется ввиду, что хранить какие-либо значения в .ini (.txt) файле, то нужно считывать и сохранять файл как текст. (Функция Workbooks.OpenText Filename:=...)
     
    Добавлено:
    nick7inc

    Цитата:
    К примеру, можно передать функции isEmpty() диапазон, содержащий несколько ячеек или  даже столбец. Но функция ведёт себя неадекватно при данных условиях: она будет всегда возвращать одно и то же значение, в не зависимости от того, все ячейки пустые  или нет.

    Во истину так. Но это не относится к моему предложению  
    Код:
    If Rows(ZZ).Text = "" Then ...


    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 12:48 08-04-2008
    nick7inc



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

    Цитата:
    А можно этим или другим способом увеличивать значение в определенном ini или txt файле?

    Читайте в справке: Open, Close, Print, Input

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 13:34 08-04-2008
       

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