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

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



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    aar
     
    Дык у меня его тоже под рукой нет - одни ностальгические воспоминания... когда приходится лезть в хелп нынешний.
    ну и потом без интеграции какой смысл?

    Всего записей: 17168 | Зарегистр. 14-10-2001 | Отправлено: 21:25 04-03-2007 | Исправлено: LevT, 21:26 04-03-2007
    vzbzdnov



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    aar
    Да знаю, что в 2003 всё пучком! А вы в 2007 попробуйте!!!

    ----------
    |^^^пиво^^\\|""\\_,_
    |___________||___|__|)
    (@)(@)""*|(@)(@)**(@)

    Всего записей: 3960 | Зарегистр. 27-03-2002 | Отправлено: 21:29 04-03-2007
    aar



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    olinka1986
    А решение из шапки темы не подходит?

    Цитата:
     
    # Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
    # Пример 1
    # Пример 2
    # Пример 3 (проверка области)
    # Пример 4
    # Пример 5

     


    ----------
    * * *

    Всего записей: 7080 | Зарегистр. 20-11-2003 | Отправлено: 22:04 04-03-2007
    olinka1986



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я пыталась...и примеры брать...  никак...  
    )) спасибо..буду ещё пытаться..у меня помимо этого очень много остальных заданий...с этим не могу никак до конца справится...

    Всего записей: 3 | Зарегистр. 04-03-2007 | Отправлено: 00:58 05-03-2007
    vasilyevd

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    # ??? Очень мучает вопрос - где хранятся описания пользовательских функций и их аргументов?
    Где их прописывать, чтобы они были видны привыборе функции и её заполнении

    Всего записей: 2 | Зарегистр. 05-03-2007 | Отправлено: 04:34 05-03-2007
    tec4

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

    Цитата:
    А почему просто не поставить в последнюю ячейку формулу суммы? Или так: Данные - Итоги...

     
    Если я поставлю в последнюю ячейку формулу суммы, то при последующем обновлении если придёт таблица с бОльшим числом строк, эта формула просто сотрётся, либо в ней будет указан диапазон  строки предыдущей таблицы (той, которая пришла месяц назад). Данные-Итоги тоже не то, что нужно...

    Всего записей: 12 | Зарегистр. 02-03-2007 | Отправлено: 05:23 05-03-2007
    aar



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, есть ли в Excel VBA конструкции наподобие хэшей в Perl, то есть чтобы доступ к значению осуществлялся по ключу.


    jONES1979
    Спасибо.

    ----------
    * * *

    Всего записей: 7080 | Зарегистр. 20-11-2003 | Отправлено: 10:27 05-03-2007 | Исправлено: aar, 11:36 05-03-2007
    jONES1979



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    aar
    не знаю, как в "перле", а в VBA доступен объект "Scripting.Dictionary" ...
    вроде бы тоже работает по принципу "ключ-значение" ... см google

    Всего записей: 324 | Зарегистр. 20-05-2005 | Отправлено: 10:54 05-03-2007
    kansky

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Помогите плз найти причину ошибки 91 (Object variable or With block variable not set ).
    Причем если убираю вызовы (их 2) другого макроса (Application.Run "'Оплата безналом2003.xls'!NewZaivkaVuvod"), то ошибки нет. По отдельности макросы работают.
     
    Код
    Sub VuvodZaivki1()
         'excecute the first find
        Dim c As Range
        Dim curZaivka(30) As Long
        Dim iZaivka As Integer
        Dim firstAddress As String, lastaddress As String
         
        iZaivka = 0
        Worksheets("Заявки").Activate
        Range("A1").Activate
        'поиск 1
        Set c = ActiveSheet.Cells.Find(What:="@", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False)
            If Not c Is Nothing Then
                '1
                firstAddress = c.Address
                '2
                lastaddress = c.Address
                '3
                curZaivka(iZaivka) = Worksheets("Заявки").Range("A" & c.Row)
                MsgBox (curZaivka(iZaivka))
                '4
                iZaivka = iZaivka + 1
                Range("C" & c.Row).Activate
                '5 reserved
                Worksheets("Вывод").Range("A1").Formula = "=Заявки!A" & c.Row
            '6 reserved
            Application.Run "'Оплата безналом2003.xls'!NewZaivkaVuvod"
            'следующий поиск
                    Do While c.Address <> firstAddress & iZaivka <> 1
    '                    Range("C" & c.Row).Activate
                        Set c = ActiveSheet.Cells.Find(What:="@", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
                        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
                        , SearchFormat:=False)
                        '2
    ???                    lastaddress = c.Address ///ВОТ ТУТ ДАЕТ ОШИБКУ
                            If c.Address = firstAddress Then
                               Exit Do
                                firstAddress = ""
                                lastaddress = ""
                                iZaivka = 0
                            End If
                        '3
                        curZaivka(iZaivka) = Worksheets("Заявки").Range("A" & c.Row)
                        MsgBox (curZaivka(iZaivka))
                        '4
                        iZaivka = iZaivka + 1
                        '5 reserved
                        Worksheets("Вывод").Range("A1").Formula = "=Заявки!A" & c.Row
                '6 reserved
                'Application.Run "'Оплата безналом2003.xls'!NewZaivkaVuvod"
                'следующие поиски продолжение
                        Range("C" & c.Row).Activate
                    Loop
            Else
                firstAddress = ""
                lastaddress = ""
                iZaivka = 0
                MsgBox ("Не найдено")
            End If
        Set c = Nothing
    End Sub

    Всего записей: 6 | Зарегистр. 04-02-2006 | Отправлено: 11:33 05-03-2007 | Исправлено: kansky, 11:46 05-03-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    olinka1986
    Цитата:
    Составить событийную процедуру, которая при изменении значения количества товара в клетке (Кол-во), и если в клетке слева цена товара (Цена) задана, вычисляет стоимость (Стоимость) и записывает ее в клетку справа.  

    так что у Вас конкрентно не работает?
    Киньте пример вашей таблицы (особенно лист 2 - с ценами) - посмотрим, что можно сделать!

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 12:05 05-03-2007
    The okk



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

    Цитата:
                        Set c = ActiveSheet.Cells.Find(What:="@", After:=ActiveCell, LookIn:=xlValues, LookAt:= _  
                        xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _  
                        , SearchFormat:=False)  
                        '2  
    ???                    lastaddress = c.Address ///ВОТ ТУТ ДАЕТ ОШИБКУ  

    Меня терзают смутные сомненья. Уж не Nothing ли у тебя с после такого Set. Посмотри, что делает NewZaivkaVuvod - возможно, там Activesheet меняется.
     
    Добавлено:
    vasilyevd
    Это аттрибуты. Не знаю, где они в VBE настраиваются, не нашел. Но пока знаю только один способ - экспортируешь модуль в файл bas, открываешь в текстовом редакторе, правишь и импортируешь обратно.  
    Например, описание функции будет:

    Код:
    Attribute очистка.VB_Description = "Эта функция ничего не делает"

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 12:21 05-03-2007 | Исправлено: The okk, 12:31 05-03-2007
    kansky

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

    Цитата:
    Меня терзают смутные сомненья. Уж не Nothing ли у тебя с после такого Set.

     
    Если убрать вызовы макроса, то все работает и следует ,мое мнение, что не Nothing. (Там рядом MsgBox для контроля стоит)

    Всего записей: 6 | Зарегистр. 04-02-2006 | Отправлено: 12:40 05-03-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kansky
    Я говорю про второй Set. Первый-то отрабатывает нормально, а вот второй, скорее всего нет. То бишь @ он не находит.
     
    tec4
    Вот такой макрос повесь на кнопку (кнопку ты сам на лист поставь ):

    Код:
    Sub itog()
        Cells(Rows.Count, 1).End(xlUp).Offset(1) = _
        WorksheetFunction.Sum(Columns(1))
    End Sub

    Жирные единички - это номер столбца. Для столбца B будет 2, C -3 и т.д.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 12:55 05-03-2007
    kansky

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

    Цитата:
    kansky  
    Я говорю про второй Set. Первый-то отрабатывает нормально, а вот второй, скорее всего нет. То бишь @ он не находит.

     
    Я понял что про втроq, но на всякий случай проверил, убрал вызов макроса, в результате - макрос нашел все @ на листе. Те есть второй SET работает. Но пока нет вызова макроса.
    Может ли Application.Run "'Оплата безналом2003.xls'!NewZaivkaVuvod" как то влиять на определение C?
    Код обоих Set с одинаков по-моему.

    Всего записей: 6 | Зарегистр. 04-02-2006 | Отправлено: 12:55 05-03-2007 | Исправлено: kansky, 13:06 05-03-2007
    The okk



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

    Цитата:
    Сорри, а можно немного подробнее объяснить

    Насколько подробнее и что объяснить?
     

    Цитата:
    Кое что нашел про это вроде бы

    Это я читал .
     
    Добавлено:
    olinka1986

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

    Может, с помощью формулы?:
    A B C    
    Количество Цена Стоимость    
    =ЕСЛИ(И(A2;B2);A2*B2;"")

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 13:02 05-03-2007 | Исправлено: The okk, 13:14 05-03-2007
    kansky

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

    Цитата:
    Меня терзают смутные сомненья. Уж не Nothing ли у тебя с после такого Set. Посмотри, что делает NewZaivkaVuvod - возможно, там Activesheet меняется.

     
    The okk
     
    Вот это было верно!!! )
    Добавил перед Set
    Worksheets("Заявки").Activate
    все ок теперь
     
    Спасибо за помощь огромное!

    Всего записей: 6 | Зарегистр. 04-02-2006 | Отправлено: 13:18 05-03-2007 | Исправлено: kansky, 13:22 05-03-2007
    The okk



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

    Цитата:
    Спасибо за помощь огромное!

    Рад был помочь.
     
    Только лучше бы не "перед Set", а прямо в Set:

    Код:
    Set c = Worksheets("Заявка").Find...

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 13:22 05-03-2007 | Исправлено: The okk, 13:28 05-03-2007
    aar



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не могу понять... В модуле вот такой код:

    Код:
     
    Type Node
        Level As Integer
        Criterion As Variant
    End Type
     
    Sub test()
        Set TaxNodes = CreateObject("Scripting.Dictionary")
         
        Dim N1 As Node
        Dim C As Variant
         
        N1.Level = 1
        C(1) = "a"
        C(2) = "b"
        C(3) = "c"
        N1.Criterion = C
         
        TaxNodes.Add "777", N1
    End Sub
     

    Ругается на выделенную строчку "TaxNodes.Add "777", N1":

    Цитата:
    Only public user defined types defined in public object modules can be used as parameters or return types for public procedures of class modules or as fields of public user defined types

     
    Что надо-то?


    ----------
    * * *

    Всего записей: 7080 | Зарегистр. 20-11-2003 | Отправлено: 13:57 05-03-2007
    The okk



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

    Цитата:
    Что надо-то?  

    Например, класс Node с свойствами Level и Criterion

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 15:39 05-03-2007
    saurian



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

    Всего записей: 12 | Зарегистр. 01-02-2007 | Отправлено: 16:14 05-03-2007
       

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