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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA

Модерирует : ShIvADeSt

ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

RUSmafia



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

 
 
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами 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.
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов

  • Всего записей: 556 | Зарегистр. 31-07-2002 | Отправлено: 21:40 14-10-2004 | Исправлено: lucky_Luk, 20:44 13-04-2007
    ZORRO2005



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

    Цитата:
    Подразумевается, что данные в 1-м столбце А начиная со 2-й строки. (Первую строку на заголовок.)  Исходные данные в листе 1-3, 4-и лист должен существовать.  В общем, если что не работает, пиши конкретно где что.

     
    Спасибо большое за макрос
    а как сделать,чтобы не было разделений по РЕГИСТРУ?
    Получается вот так:
    BUNKER Buda 5
    Bunker Buda 5
     
    CONVERSE 1U165
    Converse 1U165
     
    Надо чтобы выбиралось что-нибудь одно.
    Допустим только так:
    BUNKER Buda 5
    CONVERSE 1U165
    ---------------------------
    P.S.
    Если сортировать через сводную таблицу или консолидацию то получается
    Bunker Buda 5
    Converse 1U165
     
    но с твоим макросом эфектнее
     
     

    Всего записей: 342 | Зарегистр. 08-10-2005 | Отправлено: 23:29 06-09-2006 | Исправлено: ZORRO2005, 23:40 06-09-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZORRO2005
    В функции RemoveDuplicates подставь UCase или LCase:
     Private Sub RemoveDuplicates(ByRef a As Variant)
    ...
         For i = LBound(a) To UBound(a) - 1  
            If UCase(a(i)) <> UCase(a(i + 1)) Then  
    ...

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 00:25 07-09-2006
    tarrac



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

    Цитата:
     
    Определить число используемых рядов:  
    nr = ActiveSheet.UsedRange.Rows.Count  
     
    Прыгаем вверх до последней заполненной ячейки:  
    lastrow = Cells(nr,col).End(xlDown).Row  
    где col - номер нужного столбца  
     

    вот так правильнее

    Всего записей: 414 | Зарегистр. 29-09-2003 | Отправлено: 10:41 07-09-2006
    Troitsky



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

    Цитата:
    Спасибо большое, я прекрасно понимаю, что можно и без VBA... Но суть проблемы в следующем: для ячеек  
    H104=КОРЕНЬ(ДИСП(F4:F104))  
    H105=КОРЕНЬ(ДИСП(F5:F105))  
    H106=КОРЕНЬ(ДИСП(F6:F106))  
    H107=КОРЕНЬ(ДИСП(F7:F107))  
    H108=КОРЕНЬ(ДИСП(F8:F108))  
    и т.д.  
     
    Нужно написать макрос, чтобы это все считалось автоматом. Потому что интервал дисперсии часто приходится менять. Т. е. он может быть равен 100, 250, 255...

    Зачем заниматься ерундой и лепить макросы там, где прекрасно можно обойтись без них? Вводишь значение интервала дисперсии в отдельную ячейку, например, А1 и записываешь такую формулу с последущим ее растягиванием по всему столбцу

    Код:
    H104=КОРЕНЬ(ДИСП(F104:СМЕЩ(F104;-$A$1;0)))

    Или я чего опять недопонял?

    Цитата:
    И это не единственная задача для этого макроса...

    Что еще должен выполнять этот "макрос"?
     
    А то может лучше будет продолжить в теме Excel FAQ?
     


    ----------
    Мы в хорошем настроении гуляем по лесам.
    Кто обидеть нас захочет – сам получит по усам.
    Сам полу- получит по усам. Сам полу- получит по усам!

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 11:07 07-09-2006
    ZORRO2005



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Yuk
     
    Я поменял
        If a(i) <> a(i + 1) Then  
    на
        If UCase(a(i)) <> UCase(a(i + 1)) Then
    но все также осталось
     
    На 1 листе у меня:  Bunker 001
                                  Bunker 002
                                  Convers 005
     
    На 2 листе у меня:  BUNKER 001
                                  CONVERS 005
     
    На 3 листе у меня:  BUNKER 002
                                  CONVERS 006
     
    Мне нужно в итоге:Bunker 001
                                 Bunker 002
                                 Convers 005
                                 CONVERS 006
                                 
                                 
    И в конце опять отсортировать по алфавиту.

    Всего записей: 342 | Зарегистр. 08-10-2005 | Отправлено: 11:52 07-09-2006 | Исправлено: ZORRO2005, 11:54 07-09-2006
    Anton T

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Yuk
    Из файла надстройки.

    Цитата:
    Либо прописывай имя листа, либо не используй ThisWorkbook

    Понял, побробую.
     
    Добавлено:
    Надстрйки который создан в файле Сохранить как... и тип файла: Надстройка MS Excel

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 13:35 07-09-2006
    sheinfain

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет!
    I need a help!!!
    у меня возникла проблема с испрользованием функции вычисления медианыы в Excel. А точнее, я не знаю, как правильно её использовать для диапазона, а результаты записать в другой обозначенный диапазон! Заранее благодарю, если кто поможет!!!

    Всего записей: 1 | Зарегистр. 07-09-2006 | Отправлено: 17:57 07-09-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZORRO2005
    Измени тo же в функции SortArray:
    If UCase(a(i)) > UCase(a(j)) Then
     
    Выбор между строчными и прописными символами не гарантируется. Надо пересматривать алгоритм (PITA).
     
    sheinfain
    В чем проблема-то?
    =МЕДИАНА(A1:A10)
    Такие вопросы в Excel FAQ.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:55 07-09-2006
    utmpatpc

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Работает!!! Все отлично! Спасибо! С меня бутылка помидор.
    И теперь не к чему стремиться )
    Начну наверно изучать программирование в VBA

    Всего записей: 19 | Зарегистр. 28-08-2006 | Отправлено: 18:57 07-09-2006
    ZORRO2005



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Yuk
    Спасибо огромное,все получилось

    Всего записей: 342 | Зарегистр. 08-10-2005 | Отправлено: 20:31 07-09-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZORRO2005
    Оказалось выбор между строчными и прописными символами не так сложно.
    Опять же в SortArray:

    Код:
                If UCase(a(i)) > UCase(a(j)) Then    'change to < for descending order
                    t = a(i)
                    a(i) = a(j)
                    a(j) = t
                ElseIf UCase(a(i)) = UCase(a(j)) And a(i) < a(j) Then 'change to > to prefer upper case
                    t = a(i)
                    a(i) = a(j)
                    a(j) = t
                End If
    Можно через OR, но с ElseIf нагляднее
     
    tarrac

    Цитата:
    nr = ActiveSheet.UsedRange.Rows.Count  
    lastrow = Cells(nr,col).End(xlDown).Row  
    вот так правильнее

    Ты хоть пробовал этот код?  
    lastrow у тебя все время будет 65536.
    Или надо 1 вместо nr (до первой пустой ячейки).

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 20:45 07-09-2006
    ZORRO2005



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

    Цитата:
    Оказалось выбор между строчными и прописными символами не так сложно.

    что то выдает ошибку

    Всего записей: 342 | Зарегистр. 08-10-2005 | Отправлено: 21:57 07-09-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZORRO2005
    Вот вся функция SortArray.
     
    Конкретно, что за ошибка и в какой строке.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 23:02 07-09-2006
    filmax



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как (например для команды FileCopy) указать путь к файлу по сети?
    комп в сетке - Tb2
    такой путь не срабатывает "\\Tb2\Мои документы\Документы в работе\2006\Сентябрь 2006.xls"
    и такой путь не срабатывает "file:///\\Tb2\Мои документы\Документы в работе\2006\Сентябрь 2006.xls"
     
    __________________________________________________________________________
    через подключение к букве диска... при входе... не устраивает
    компы включаются в разное время... часто при включении отсутствует доступ к файлу.

    ----------
    "Лилия гнилая пахнет хуже, чем сорная трава в навозной луже"

    Всего записей: 220 | Зарегистр. 12-10-2002 | Отправлено: 13:09 08-09-2006
    Anton T

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

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 13:43 08-09-2006
    DONRU1



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    извиняюсь за назойливость. Я вроде как разобрался в своей задаче и программа работает, но вот только результат не тот выдает (
    Может глянешь?
     
    Dim CRCTAB_16(0 To 256) As Integer  
    Dim iLen As Long  
    Dim btArr() As Byte  
    Dim iPrevSumm As Long  
     
    Sub testr()  
    Dim i As Integer  
    Dim TypeConv As Integer  
    TypeConv = 128  
    btArr = StrConv("100/46823/0021004682324.03.200524.03.2005950004001Яковлева Е. П.Антонова О. В.10001151005000213310100001000000100011510000100001000010000100100310004061972622899000010000001001003289900001000028990000100002900000029000000", TypeConv)  
    iLen = UBound(btArr)  
    For i = 0 To UBound(CRCTAB_16)  
        CRCTAB_16(i) = CRCTAB_16(i) And &HFFFF&  
        'Workbooks("Baze.xls").Worksheets("реквизиты").Cells(i + 3, 25) = CRCTAB_16(i)  
    Next i  
    ddd = calcCRC16(iPrevSumm, btArr(), iLen)  
    MsgBox ddd  
    End Sub  
     
    Public Function calcCRC16(ByVal iPrevSumm As Long, ByRef btArr() As Byte, ByVal iLen As Long) As Long  
        Dim i As Long  
        For i = 0 To iLen  
            iPrevSumm = CLng(CRCTAB_16((((iPrevSumm \ 256)) And &HFF)) Xor ((iPrevSumm And &HFF) * 256) Xor (btArr(i))) And &HFFFF  
        Next i  
        calcCRC16 = iPrevSumm  
    End Function  

    Всего записей: 32 | Зарегистр. 19-04-2006 | Отправлено: 18:59 08-09-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DONRU1
    Во-первых, нет инициализации массива CRCTAB_16, все его члены равны 0.
    Во-вторых, не понятно для чего нужна обработка этого массива:
    CRCTAB_16(i) = CRCTAB_16(i) And &HFFFF&
    Я понимаю, что эта операция делает, но значения массива при этом не меняются.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 21:57 08-09-2006 | Исправлено: Yuk, 22:16 08-09-2006
    DONRU1



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Простите меня за мою безграмотность, но работа с массивами всегда была мом слабым местом, что значит "Инициализация массива" Каким образом ее правильно провести. Пытаюсь задать CRCTAB_16 через Array, так VBA сразу ругается на первый же элемент массива. Черз цикл for next тоже.

    Всего записей: 32 | Зарегистр. 19-04-2006 | Отправлено: 21:21 09-09-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DONRU1
    Глядя на этот твой код, массив CRCTAB_16 должен быть Long или динамический Variant (так возможно будет проще).

    Код:
    Dim CRCTAB_16(0 To 255) As Long
    или
    Код:
    Dim CRCTAB_16 As Variant

    Если Variant, можно использовать Array:

    Код:
    CRCTAB_16 = Array(&H0&, &H1021&, &H2042&)
    & после константы как раз определяет, что она типа Long.
     
     
    Добавлено:
    Правильный ответ 13658? Если нет, то какой?

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 23:48 09-09-2006
    DONRU1



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

    Всего записей: 32 | Зарегистр. 19-04-2006 | Отправлено: 00:22 11-09-2006
       

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

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA
    ShIvADeSt (23-04-2007 01:59): http://forum.ru-board.com/topic.cgi?forum=33&topic=8273


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru