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

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



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

    Цитата:
    Сортировать не обязательно.

    Я просто хотел ускорить процесс - на собственном опыте убедился, что поиск в массиве на листе с использованием цикла - это "от лукавого" ибо при большом количестве записей вызывает тормоза. Поэтому больше такой поиск не использую, а если что-то надо искать, ищу через Worksheetfunction.Match и Index (и им подобные) - на порядок быстрее.
    А сортировка нужна затем, что при сортированном массиве отпадает необходимость проходить по всему массиву. Достаточно с помощью Worksheetfunction найти первое совпадение и от него идти вниз, пока содержимое ячейки в столбце А совпадает с содержимым ячейки в столбце F. Получается, что пройти надо будет не весь массив, а лишь его небольшую часть. Про сортировку спросил только из-за этого.
    Кроме того, удаление элемента также вызывает это событие, поэтому надо еще и проверять, что там вообще за Target. Если Empty, то вместо добавления Validation в столбец В, его надо удалить и вообще зачистить ячейку, чтобы на пустом месте не оставалось никаких непонятно к чему относящихся цифр.
    А что вот это даст:
    Цитата:
    Target.Address = "$A$2"
    - это же только для первой ячейки, а, насколько я понял, нужно для всего столбца. Или я что-то не так понял?
    Я просто недавно похожий скрипт писал.
     
    С прошедшими тебя праздниками и наступающим СНГ!

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 19:02 10-01-2007 | Исправлено: The okk, 19:06 10-01-2007
    ZORRO2005



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Yuk
    Спасибо большое.
        Но это только для ячейки A2
    1. А как сделать так чтобы в ячеках A3,A4,A5...также получалось.  
        Ну максимум до A25
    2. Если я меняю значение в столбце G то можно сделать обновляющийся  
        выпадающий список в столбце B?
        Сейчас обновляется только после того как я поменяю значения в столбце A.
     

    Всего записей: 342 | Зарегистр. 08-10-2005 | Отправлено: 20:27 10-01-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемый ZORRO2005, и многоуважаемые The okk и  Yuk.
    Вчера написал пост - но то ли я сбойнул, то ли винда... короче, я его не вижу... ;-((
    и развитие событий с разработкой скрипта позволяет мне повторить свою мысль:
    я понимаю, что Excel бесконечно сильная штука и позволяет вытворять чудеса, заменяющие SQL, даже с нескольким взаимосвязанными таблицами (реляционная СУБД, блин ;-))) Но стоит ли овчинка выделки? задача ZORRO2005 просто просится быть запрограммированой в ЛЮБОЙ СУБД (хоть в том же Access'е)!! Просто куча геморроя уходит (я имею в виду, что 1500 строк в столбце F и 1000 уникальных значений для них в G будут вызывать серьёзные проблемы со скоростью обработки, ИМХО...) Плюс хлопоты, связанные с поддержанием целостности в столбце B при изменении, переименовании, удалении и добавлении данных в столбце F ... ) как я вижу, задача решается, и даже достаточно эффективно, но, повторю - ИМХО, ZORRO2005,  вам стоит задуматься о программе с СУБД...
     
    Yuk, А за красивый скрипт - Большое спасибо, он в моей копилке займёт достойное место!! ;-))
     
    Добавлено:
    Yuk мне кажется будет более эффективным сделать следующее:
    1) в Worksheet_Change проверять изменение в заполненном диапазоне FG
     формировать новый столбец B и в скрытом столбце (ну скажем E) хранить строчку валидации (то, что накапливается в frm)
     
    2) при изменениях в столбце A по таргету брать сохранённую строку из скрытого столбца (E) и устанавливать её для валидации с нужной строчке для столбца B
     
    3) The okk прав - и столбец FG лучше сделать ОТСОРТИРОВАННЫМ...

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 21:27 10-01-2007 | Исправлено: SERGE_BLIZNUK, 21:29 10-01-2007
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZORRO2005
    The okk прав, могут быть тормоза при таком раскладе.  
    Какого размера ожидается массив в столбцах F и G? Сколько максимально может быть величин на месяц?  
    1. 1-е условие меняется на If Target.Column = 1 Then
    Надо подумать, как сделать это эффективнее. Возможно через динамический массив.
     
    Добавлено:

    Цитата:
    в скрытом столбце (ну скажем E) хранить строчку валидации (то, что накапливается в frm)

    Вот это неплохая мысль!

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 21:42 10-01-2007
    ZORRO2005



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

    Цитата:
    задуматься о программе с СУБД...

    а я не очень разбираюсь в ACCESS,1С.... а EXCEL очень люблю,
    а платить за СУБД для каждой такой похожей задачи мне накладно.
    Кстати эту задачу попросил решить человек,который все время работает в 1С.
    Огромное спасибо Yuk,который не первый раз мне помогает, а также
    многим другим,кто поддерживает этот форум.  
     
    Добавлено:
    The okk

    Цитата:
     это же только для первой ячейки, а, насколько я понял, нужно для всего столбца. Или я что-то не так понял?

    да, правильно
     
    Добавлено:
    Yuk

    Цитата:
    1-е условие меняется на If Target.Column = 1 Then

    Что-то не получается
     
     
    Добавлено:

    Цитата:
    Какого размера ожидается массив в столбцах F и G? Сколько максимально может быть величин на месяц?  

    в столбце F около 1000 в столбце F около 3000  
    макс.на месяц 10

    Всего записей: 342 | Зарегистр. 08-10-2005 | Отправлено: 22:11 10-01-2007 | Исправлено: ZORRO2005, 22:25 10-01-2007
    SERGE_BLIZNUK

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

    Цитата:
     я не очень разбираюсь в ACCESS,1С.... а EXCEL очень люблю,  
    а платить за СУБД для каждой такой похожей задачи мне накладно

    А кто говорит - "платить" ?? Я почему и вспомнил Access (не к ночи он будь помянут ;-))
    что он ориентирован на конечного пользователя (поэтому и входит в MS Office) - научиться им пользоваться (именно пользоваться) - не намного сложнее, чем программировать на VBA!
    Конечно, то, что Вы на нём сделаете будет мягко говоря не очень быстро работать и не выдержит никакой критики со стороны нормальной СУБД (кстати, cейчас и MS SQL и Oracle базу данных до 4 Гиг держат БЕСПЛАТНО)  - но это уже совсем другая песня...
    впрочем, Вам (или Вашему товарищу) решать - чем пользоваться и чем при этом жертвовать... ;-) - "каждый выбирает по себе..."
     
    Yuk
    Цитата:
    Вот это неплохая мысль
    так, совместными усилиями и добьём... ;-))
     
    ZORRO2005
    Цитата:

    Цитата:
    1-е условие меняется на If Target.Column = 1 Then  

    Что-то не получается  

    надо и назначение подправить:
    Код:
     
    If Target.Column = 1 Then
        For Each c In Range(Range("F1"), Range("F1").End(xlDown)).Cells
            If c.Value = Target.Value Then
               frm = frm & "," & c.Offset(0, 1).Text
            End If
        Next
        With Cells(Target.Row, 2).Validation
            .Delete
            .Add Type:=xlValidateList, Formula1:=frm
            .IgnoreBlank = True
            .InCellDropdown = True
            .ShowInput = True
            .ShowError = False
        End With
     

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

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



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

    Цитата:
    If Target.Column = 1

    А что будет в свойстве .Column, если Target Is Empty?
     
    P.S.: Обычно
    Код:
    If Not Target Intersect Range("A:A") is Empty
    , но в данном случае твой замысел оценил. Действительно, интересное частное решение.
     
    SERGE_BLIZNUK

    Цитата:
    If Target.Column = 1 Then  
        For Each c In Range(Range("F1"), Range("F1").End(xlDown)).Cells  
            If c.Value = Target.Value Then  
               frm = frm & "," & c.Offset(0, 1).Text  
            End If  
        Next  
        With Cells(Target.Row, 2).Validation  
            .Delete  
            .Add Type:=xlValidateList, Formula1:=frm  
            .IgnoreBlank = True  
            .InCellDropdown = True  
            .ShowInput = True  
            .ShowError = False  
        End With  

    Что-то мне тут не нравится. Попробуй выделить в первом столбце несколько заполненных клеток и удали в них значения (Del)... а потом то же самое, только с незаполненными. И что получилось в столбце B?
    И попробуй вставить в первый столбец несколько значений (Ctrl+C, Ctrl + V). - Чему будет равно Target.Value в этом случае?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 07:09 11-01-2007 | Исправлено: The okk, 08:24 11-01-2007
    vzbzdnov



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    К вопросу выборки уникальных значений - проще и быстрее всего завести Collection и добавлять элементы по ключу, а потом читать всё подряд
     
    Dim UnqArray As New Collection,  rng, val
    LastRow = Sheets("Sheet1").Range("A65536").End(xlUp).Row
    On Error Resume Next   ' позаботимся о dup keys  
    For Each rng  In Sheets("Sheet1").Range("A1:A" & LastRow)
       val=rng.value
       UnqArray.Add Item:=val, key:=CStr(val)   ' dup keys не добавятся
    Next rng
     
    For Each val in UnqArray.Item
    .....
    Next val
     
     
     
    Добавлено:
    Надеюсь всё же получить когда-нить ответ на свой вопрос

    Цитата:
    Требуется сохранить worksheet с русским текстом в файл, чтобы в файле получился оттабулированный текст, т.е. чтоб все строчки в колонках чётко начинались в одних и тех же позициях.   Не нашёл, как такое сделать, поэтому сначала сцепил все колонки построчно в одну выравнивая текст дополнительными пробелами и эту одну широченную колонку пытаюсь сохранить в файл. Делаю следующие манипуляции  
    ActiveWorkbook.SaveAs FileName:="MyFile.txt",  FileFormat:=xlUnicodeText, CreateBackup:=False  
    В результате в файле имеем красиво оттабулированный текст, только .... он в двойных кавычках... Такое вот безобразие.. Приходится потом файл вручную редактировать и удалять кавычки.  
    Как упростить процедуру, или, если такое низзя, то как сохранить в файл, чтоб было без кавычек?  
     


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

    Всего записей: 3950 | Зарегистр. 27-03-2002 | Отправлено: 07:47 11-01-2007 | Исправлено: vzbzdnov, 07:50 11-01-2007
    The okk



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

    Цитата:
    worksheet с русским текстом в файл, чтобы в файле получился оттабулированный текст

    FileFormat := xlTextWindows (Текстовые файлы с разделителями табуляции)
     
    SERGE_BLIZNUK

    Цитата:
    в скрытом столбце (ну скажем E) хранить строчку валидации (то, что накапливается в frm)  

    Да, мысль верная. Только вот формировать строку (String) - идея не самая лучшая, поскольку во-первых, тип String ограничен количеством символов (много чисел в 255 символов не уместишь), а во-вторых, до 10 конкатенаций на создание каждой строчки валидации (быстродействие не на высоте).  
    Думаю, где-то нужно иметь диапазон со списком валидации. А в валидацию прописывать только имя этого диапазона. Формироваться эти диапазоны будут формулами. При таком подходе будем иметь:
    1. Уход от использования множественных конкатенаций.
    2. Максимально быстрое изменение существующих валидаций при изменении в FG. (поскольку диапазон для валидации будет формироваться формулами, а не VBA-скриптом).
    3. Уход от сортировок.
    Только надо решить частные вопросы: конкретный вид формулы для имени диапазона, формула формирования диапазонов на основе FG, где будут храниться эти диапазоны.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 08:14 11-01-2007 | Исправлено: The okk, 09:20 11-01-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    Цитата:
    Что-то мне тут не нравится. Попробуй выделить в первом столбце несколько заполненных клеток и удали в них значения (Del)...  
    тут и говорить не о чем... это БЕССПОРНО!!! Это очень черновой вариант, просто, чтобы показать ZORRO2005 как это будет выглядеть... ;-))
     

    Цитата:
    Думаю, где-то нужно иметь диапазон со списком валидации. А в валидацию прописывать только имя этого диапазона.  

    в том посте, который потерялся (очень жаль..;((() - я как раз и шёл в этом направлении. Т.е., пока я не увидел решение Yuk, и мне нужно было бы решить такую задачу, я бы одназначно шел в сторону создания заполненого списка (в скрытой области или листе) и подсовывания его в область B для валидации. Только я не представлял (и не представляю пока) как это можно получить без VBA - только с помощью формул...
     
    и ещё раз повторю - задача просто "просится" быть запрограммированной с помощью СУБД ;-))
     
    vzbzdnov
    Цитата:

    Цитата:
    worksheet с русским текстом в файл, чтобы в файле получился оттабулированный текст
     
    FileFormat := xlTextWindows (Текстовые файлы с разделителями табуляции)
    вот тут не всё так просто... Имхо, когда я проверял - кавычки добавляются НЕ ВСЕГДА. Т.е. я не смог уловить условие, при котором текст сохраняется в кавычках...
    vzbzdnov - у вас весь текст в кавычках? Пример можно?...
     
     

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 10:08 11-01-2007
    giash



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Доброго всем утра.
    Очередной раз обращаюсь за помощью в надежде, что вы разрешите мою проблему.
    Дело в том, что у меня есть файл, который содержит информацию об изменениях вносимых в бюджеты филиалов (для каждого отдельный лист). Нельзя ли сделать так, чтобы вводимая в филиалах информация автоматически переносилась в сводную таблицу этой же книги? Таблица выглядит так:
    Основание №корр. Дата Iкв. IIкв. IIIкв. IVкв.    
    Решение сов/дир 4 09.01.07 500

    Заранее всем благодарен
     
     
    Добавлено:
    The OKK

    Цитата:
    Почему бы и нет. Пиши название файла в отдельной ячейке, а на листе все формулы, ссылающиеся на лист, пиши в виде: =ДВССЫЛ(ячейка с названием) & нужная ячейка этого листа.  
    Например:  
    У нас есть файлы 1.xls, 2.xls и 3.xls. Нам нужно в файле 1.xls сделать ссылки на третий лист второй книги, потом заменить в ссылках вторую книгу на третью.  
    В отдельной ячейке (например, A1) любого (например, третьего) листа первой книги создаем ссылку на третий лист второй книги: [2.xls]Лист3! (БЕЗ знака "=")  
    А формулы в первой книге пишем в виде: =ДВССЫЛ(A1 & "ячейка_листа"), где A1 - ячейка со ссылкой на книгу, ячейка_листа - адрес ячейкй в указанной книге.  
    Вот, собственно, и все. Теперь достаточно изменить адрес в ячейке A1 на [3.xls]Лист3!, чтобы адреса во всех ссылках поменялись.
     
    Приветствую. Вы перед самым НГ предложили мне воспользоваться функцией двойной ссылки, что я и сделал. Проверил все работает. Однако, слишком много неудобств при работе с этой функцией, напр., файл на который мы ссылаемся должен быть обязательно открыт, да и запись с названием книги - первой части ссылки, требует дополнительного редактирования. Мне то ничего, но вот моим сотрудницам, которым уже за 50-т разобраться во всем этом будет не легко. Исходя из этого нет ли иного решения данной проблемы?  
    Заранее благодарен за помощь  
    С уважением

    Всего записей: 10 | Зарегистр. 18-12-2006 | Отправлено: 10:09 11-01-2007 | Исправлено: giash, 10:14 11-01-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    giash
    для начала посмотрите в этом топике 20-22.12.2006 от Gtto было обсуждение подобной проблемы. Если не разберётесь - пишите сюда - только побольше конкретики - что нужно переносить, откуда и куда... Ручками вы это можете сделать? тогда сможете и объяснить. Плюс неплохо бы выложить файлик-пример...
    ДА и ещё - перенос (физически) данных, в отличии от формул - не будет меняться, если вдруг изменяться данные в исходных файлах...

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



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

    Цитата:
    Только я не представлял (и не представляю пока) как это можно получить без VBA - только с помощью формул...  

    Да я и сам раньше не представлял, как много можно сделать не прибегая к помощи VBA, пока не наткнулся у буржуев на формулу для выдирания униальных значений из массива.

    Цитата:
    задача просто "просится" быть запрограммированной с помощью СУБД

    Жаль, я до понедельника занят - а то руки чешутся эту задачу через формулы сделать. - Будет хороший опыт.
     
    giash

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

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

    Цитата:
    файл на который мы ссылаемся должен быть обязательно открыт,

    Он должен быть открыт (если и должен), только когда ты меняешь ссылку.

    Цитата:
    Мне то ничего, но вот моим сотрудницам, которым уже за 50-т разобраться во всем этом будет не легко.

    Боюсь, "сотрудницам, которым уже за 50" разобраться будет не легко, даже если  форму сделать для выбора файла.

    Цитата:
    Исходя из этого нет ли иного решения данной проблемы?

    А что было нужно сделать?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 12:17 11-01-2007
    alin



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

    Код:
    Private Sub OK_Click()
    Dim strDate As String
    strDate = Format(Now(), "dd.mm")
    If Sheets(1).Name <> strDate Then
        ActiveSheet.Copy Before:=Sheets(1)
        Sheets(1).Select
        Sheets(1).Name = strDate
    End If
        Sheets(1).Select
        Sheets(1).Name = strDate
        Range("E3:E25", "E27:E31").Value = Range("AD3:AD25", "AD27:AD31").Value
        Range("F3:AD25", "F27:AD31").ClearContents
        Range("AL23:AQ28").ClearContents
            For Each s In Worksheets(1).Shape
            If s.Type = msoOLEControlObject Then
                If InStr(s.OLEFormat.progID, "ToggleButton") > 0 Then
                s.OLEFormat.Object.Object.Value = False
                End If
            End If
            Next
    End Sub

    Выдает ошибку: "Run time error '9'. Subscript out of range"
    Подскажите, пожалуйста, что неправильно сделал?

    Всего записей: 683 | Зарегистр. 05-08-2004 | Отправлено: 12:54 11-01-2007 | Исправлено: alin, 12:55 11-01-2007
    The okk



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

    Цитата:
    "Run time error '9'. Subscript out of range"  

    Значит VBA чего-то не нашел и у тебя в коде строка с этим "чем-то" выделилась желтым. В этой строке программа обращается к элементу коллекции, которого нет.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 12:59 11-01-2007 | Исправлено: The okk, 13:16 11-01-2007
    giash



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    to The OKK
    Цитата:
    А через формулы не пробовал?  На листе с итоговой таблицей можно же сделать формулы, ссылающиейся на данные в других листах.  

    Скорее всего, моих познаний Excel-а недостаточно для подбора формулы. Проблема в том, что данные в листах содержащих информацию по филиалам будут постоянно добавляться (начиная с основания и заканчивая суммой) и я не понимаю каким образом переносить новую информацию в сводную табличку. Логика здесь такая: сводная пробегается по листам филиалов сверяет данные имеющиеся в них со своими и в случае необходимости добавляет новую запись в себя. Топорно я сделал это следующим образом, просто ввел последовательно с запасом ссылки на различные листы книги, а в сводной дал в фильтре не равно 0. Все бы хорошо, но только чтобы увидеть новую запись надо заново дать условие в фильтре. в общем, как-то не симпатично получается.
    с уважением
     

    Всего записей: 10 | Зарегистр. 18-12-2006 | Отправлено: 14:20 11-01-2007
    SERGE_BLIZNUK

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

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 15:44 11-01-2007
    alin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    На эту строчку указывает, но уже другая ошибка:

    Код:
    For Each s In Worksheets(1).Shape

    "Run time error '438'.Object doesn't support this prioritey method"

    Всего записей: 683 | Зарегистр. 05-08-2004 | Отправлено: 15:57 11-01-2007 | Исправлено: alin, 15:58 11-01-2007
    Troitsky



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

    Цитата:
    For Each s In Worksheets(1).Shape

    For Each s In Worksheets(1).Shapes
     


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 16:02 11-01-2007
    giash



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

    Цитата:
    так может в этом и есть ключ к решению?на открытие вашего документа код в VBA, который проверяет доп.листы и при необходимости корректирует фильтр

    Абсолютно с вами согласен. Но, к сожалению, создание кода выходит за рамки моих возможностей. Увы...
     
     

    Всего записей: 10 | Зарегистр. 18-12-2006 | Отправлено: 17:00 11-01-2007 | Исправлено: giash, 10:10 12-01-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