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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня вот такой ещё возник вопрос, как я уже писал до этого, у меня решается транспортная задача.
    Весь путь судна разбит на 120 с лишним участков, задано начало действия модели.
    И так начиная с 1го заканчивая последним блоком, идёт складывание времени (в VBA)  
    То есть, к начальному времени прибавляется время первого блока, ко времени первого блока прибавляется время второго итд. С изменением времени года в отдельных блоках меняются условия, что влияет на время, так же когда лето судно ходит по одному маршруту, когда наступает зима, судно начинает ходить по сокращённому маршруту.
     
    Мой вопрос: Как в  Excel VBA грамотно сделать цикл, чтобы после прохождения первого круга (цикла), следующий круг начинался не с начального времени, а со времени окончания первого круга, то есть, чтобы постоянно росло текущее время.
    Плюс к тому, не совсем понятно как зациклить  программу с оператором IF
     
    Принцип моей программы вкратце выглядит так:
     
    Начальная дата (число месяц год часы минуты)  
    Начальное время 0
     
    Из порта А идём в порт Б (только летом)
    Далее из порта Б идём в порт В, из В в Г итд.
    Потом возвращаемся через все порты идём обратно
    Те из Г в В из В в Б
    Дальше наступает момент истины и проверяется время года:
    Если лето то идём в порт А
     
    Если зима то идём обратно в порт В итд, пока лето не наступит…
     
    В общем, жуткая муть…
     
    Если у кого-нибудь есть какие-нибудь соображения, очень бы хотелось их услышать
    Заранее спасибо!
     

    Всего записей: 129 | Зарегистр. 24-05-2006 | Отправлено: 15:39 29-05-2006
    SZap



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DimidROLL
    Не совсем понятен алгоритм...
    А так, задача не очень сложная...

    Всего записей: 145 | Зарегистр. 19-11-2003 | Отправлено: 16:28 29-05-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    DimidROLL
    Как я понял твою задачу: судну нужно выполнить 120 рейсов между портами А, Б, В и Г. В определенное время года судоходная обстановка не позволяет совершать рейсы на участке АБ, поэтому судно вместо того чтобы пройти его транзитом будет производить в нем погрузку/выгрузку.

     
    Немного изменив условия, можно написать вот такой код.
    Кривовато, но смысл, думаю, понятен


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 18:04 29-05-2006 | Исправлено: Troitsky, 18:07 29-05-2006
    DimidROLL



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SZap  
    Не сложная да, не так проста...
     
    Troitsky
     
    К сожалению не совсем правильно ты меня понял или я объяснил.
     
    Цель: Судно курсирует между 5 портами, одним речным(Нижний Новгород),
    и пятью морскими (Санкт-Петербург, Стокгольм, Копенгаген, Лондон, Гавр)
    Судно заходит и разгружается/загружается в каждом порту.
     
            Летом судно курсирует на линии:
     Нижний Новгород - Санкт-Петербург - Стокгольм - Копенгаген - Лондон - Гавр.  
     
            Зимой судно курсирует на линии:  
     Санкт-Петербург, Стокгольм, Копенгаген, Лондон, Гавр
     
    Суть в том, что я в Excel разбил весь путь на 120 с лишним блоков, в каждом из них с использозованием случайных чисел вычисляется время блока. В VBA же я пытаюсь сделать сложение всех этих блоков с учётом времени года, то есть если лето то складывать все блоки, если же зима, то складывать то лько те блоки которые доступны зимой и так в течении года. (То есть выполняем не 120 рейсов, а какое то количество рейсов в течении года.)
     
    Вот здесь мой рабочий файл
    _http://user.rol.ru/~ladeynov/02.05.06_SM_Excel%202.1.3.rar

    Всего записей: 129 | Зарегистр. 24-05-2006 | Отправлено: 21:55 29-05-2006
    SZap



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DimidROLL
    На сколько я понимаю, решением этой задачи является расчет времени, затраченного каждым из N судов на выполнение K рейсов, с разбивкой по блокам и рейсам, с учетом времени года и следовательно маршрута движения. Я прав?
     
    ОСНОВНАЯ НА МОЙ ВЗГЛЯД ПРОБЛЕМА ДАННОЙ СИСТЕМЫ:
    Система работает только с условием одинаковой загрузки/разгрузки в портах. На практике, по моему, это не совсем так, но в этом случае могут возникнуть критические ошибки с загрузкой судна, она может уйти в минус, а может и превысить грузоподъемность судна, в связи с изменением маршрута движения. Более того, очевидным является и тот факт, что  при каждом рейсе во всех портах производится одинаковая загрузка/разгрузка.
     
    И еще, строки время и "Глобальное время" актуально только для последнего рейса
    Не знаю, может это и не нужно, но мне так не кажется...
     
    ПРЕДЛОГАЮ:
    1. Расширенная таблица "загрузка/разгрузка" с данными для всех рейсов...
    2. Промежуточные и итоговые результаты выводить на отдельном листе в формате что-то типа: Судно, №рейса, Глобальное время, Блок (или Порт по желанию), Время на операцию
    3. Изменить расположение блоков таким образом, чтобы была возможность работать через цикл (для удобства)
     
     
     
     

    Всего записей: 145 | Зарегистр. 19-11-2003 | Отправлено: 12:28 30-05-2006
    DimidROLL



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SZap
    Да, идея такова, мне нужно собрать время за рейс и за год для каждого из пяти судов. И собственно вывести эти данные для анализа. То есть мне в принципе то нужно только общее время. А не на каждом блоке.
     

    Цитата:
    ОСНОВНАЯ НА МОЙ ВЗГЛЯД ПРОБЛЕМА ДАННОЙ СИСТЕМЫ:  
    Система работает только с условием одинаковой загрузки/разгрузки в портах. На практике, по моему, это не совсем так, но в этом случае могут возникнуть критические ошибки с загрузкой судна, она может уйти в минус, а может и превысить грузоподъемность судна, в связи с изменением маршрута движения. Более того, очевидным является и тот факт, что  при каждом рейсе во всех портах производится одинаковая загрузка/разгрузка.

     
    По поводу одинаковости количества разгрузки/погрузки, я с тебя не совсем понял, у меня же создана таблица задающая сколько в каком порту будет выгружаться=загружаться (пока что только так, друго го наверное уже и не будет)
    А при последующем круге или опыте, данные автоматом изменятся, ибо я же использовал в этих ячейках функцию СЛУЧМЕЖДУ()  
     

    Цитата:
    И еще, строки время и "Глобальное время" актуально только для последнего рейса  
    Не знаю, может это и не нужно, но мне так не кажется...

     
    В принципе да, но ведь они у меня используются в VBA, я просто в них для удобства при каждом рейсе или опыте вставляю данные которые собственно должны каждый раз заменяться, и так до последнего рейса.
     
    А время каждого рейса для каждого судна естественно должно выводиться в отдельную область. Просто я это ещё не расписал.
     
     

    Цитата:
    3. Изменить расположение блоков таким образом, чтобы была возможность работать через цикл (для удобства)

     
    Если можно не совсем понял как это лучше сделать.
     
    P.s.
    Признаться, с VBA я не очень, как собственно и с программированием, просто столкнулся с такой проблемой при написании диплома, кстати его уже до 15 июня надо закончить... в 20х числах защита... А я всё никак программу сделать не могу...

    Всего записей: 129 | Зарегистр. 24-05-2006 | Отправлено: 14:13 30-05-2006
    avk06

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Знатоки VBA помогите.
     
    Требуется из файла excel скопировать некоторые столбцы(но не все) в другой файл и расположить их при этом в определенном порядке.  
    Естественно, требуется не одноразовая операция по копированию, а постоянно производить эти действия с файлами.
     
    Например в исходном файле есть такие столбцы и в такой последовательности:  
    Кол-во комнат  
    Планировка      
    Цена  
    Район  
    Улица      
    Общая площадь  
    Жилая площадь  
    Кухня      
    Этаж  
    Этажность  
    А в конечном файле требуется скопировать данные таких столбцов и в такой последовательности :  
    Комнат  
    Планировка  
    Район  
    Улица  
    Этаж      
    Этажность      
    Жилая площадь  
     
    И такую процедуру требуется повторять каждый день с файлом со свежими данными. Как это реализовать програмно? Через VBA? Я его не знаю, к сожалению. Может какой-то текст программы набросаете?

    Всего записей: 127 | Зарегистр. 15-12-2003 | Отправлено: 14:35 30-05-2006
    vitalij zayac

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как создать панель иниструментов в MS Excel с двумя кнопками  
     
     
    Добрый день.  
     
    Возникла проблема: надо создать панель инструментов с двумя кнопками, при нажатии которых запускались бы на выполнение мои проги *.exe, написанные на C++ Builder. (VB совсем не знаю :(
    Помогите плз, что надо почитать, или примерчик какой посмотреть. Я просто не знаю в какую сторону бежать.  
     
    ПОМОГИТЕ!  

    Всего записей: 1 | Зарегистр. 30-05-2006 | Отправлено: 15:09 30-05-2006
    MrZeRo



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vitalij zayac
    1. Записать макрос вида

    Цитата:
     
    Sub Макрос1()
      Shell ("my_favorite_program.exe")
    End Sub
     

    2. Пойти в меню сервис-настройка, там слева выбрать "Макросы", справа "Настраиваемая команда меню", вытянуть на панель и по правой кнопке назначить записанный макрос.
     
    Макрос можно протестировать отдельно из редактора VisualBasic.


    ----------
    ... не это главное ...

    Всего записей: 831 | Зарегистр. 30-01-2002 | Отправлено: 15:36 30-05-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    avk06
    Я тебе уже ответил в Excel FAQ. Задача не сложная, попробуй сделать через запись.  
    В исходных файлах все время одинаковая последовательность столбцов? Второй файл должен каждый раз создаваться новый, или новые данные добавляются в конец старых?

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 18:42 30-05-2006
    OchkaritO

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

    Код:
     
    Private Sub Calendar1_Click()
      Cells(5, 3).Value = Calendar1.Object
    End Sub
     

    вставляет дату в ячейку С5. Скажите, пожалуйста, как сделать чтоб дата вставлялась не в одну ячейку, а в любую выделеную. Спасибо!

    Всего записей: 19 | Зарегистр. 02-02-2006 | Отправлено: 09:35 31-05-2006
    Troitsky



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

    Код:
    ActiveCell.Value = Calendar1.Object


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 11:56 31-05-2006
    AlexRomano

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто-нибудь знает как настроить excel чтобы он в гиперссылке открывал формат PDF. У меня открывает все форматы (JPG, TIF, DOC, XLS), кроме PDF. Как быть? ПОМОГИТЕ, пожалуйста!!!! Мне это сильно мешает работать!!!!!

    Всего записей: 3 | Зарегистр. 01-06-2006 | Отправлено: 17:19 01-06-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AlexRomano
    Вопрос скорее для FAQ.
    Что значит не открывает? Ничего не происходит или вылезают ошибки? Adobe Acrobat (по крайней мере Reader) установлен? Гиперссылка на локальный файл или в Интернет? PDF на диске открывается? В крайнем случае попробуй переустановить Акробат.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 17:51 01-06-2006
    OchkaritO

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Еще вопрос: скажите. пожалуйста. почему этот

    Код:
     
    Private Sub CommandButton2_Click()
    Dim i As Integer
    Dim z As Integer
    Set Z1 = ThisWorkbook.Worksheets("Work")
    Set Z2 = ThisWorkbook.Worksheets("Kalendar")
     
    Z2.Range("F35").Copy
    Z1.Cells(5, 4).PasteSpecial Paste:=xlPasteValues
     
    End Sub
     

    не работает, в чем ошибка? Спасибо.

    Всего записей: 19 | Зарегистр. 02-02-2006 | Отправлено: 06:39 02-06-2006 | Исправлено: OchkaritO, 06:41 02-06-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OchkaritO
    A Dimы для Z1, Z2 забыл?

    Код:
    Dim Z1 As Worksheet
    Dim Z2 As Worksheet

     
     
    Добавлено:
    А не лучше вот так?

    Код:
    Z1.Cells(5, 4).Value = Z2.Range("F35").Value

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Товарищи!
    Помогите Чайнику. Не могу закрыть книгу. Дает ошибку:Run-time error '1004'
     
    Иописание при debug: Method 'ThisWorkbook' of object'_Global' failed
     
    Пытался закрыть след. образом
    ------------------------------------------------------
    Private Sub cmdCloseAllWorkBooks_Click()
    Dim Book As Workbook
    '
    '  Saving and Closing all workbooks.
    '
    For Each Book In Workbooks
        If Book.Name <> ThisWorkbook.Name Then
            Book.Close savechanges:=True
        End If
    Next Book

    Всего записей: 2 | Зарегистр. 02-06-2006 | Отправлено: 21:16 02-06-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    biggloomy
    Хм... У меня все сработало без проблем.
    Попробуй перед ThisWorkbook поставить Application.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 21:52 02-06-2006
    biggloomy

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    теперь пишет: Method 'ThisWorkbook' of object'_Application' failed
     
    может что-то где-то забыл описать?

    Всего записей: 2 | Зарегистр. 02-06-2006 | Отправлено: 01:05 03-06-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    biggloomy
    А где у тебя эта кнопка?
    Версия экселя?
     
    Добавлено:
    Вот файл с твоим кодом (заменил только true на false, чтобы не сохранять файлы, но и с true не было проблем): http://www.mytempdir.com/713104
    Там 2 кнопки - одна прямо в листе, другая в форме. Обе работают.
    Excel 2003 (english)

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 16:39 03-06-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