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

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



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    denis_a
    Иногда полезно внимательно ошибки читать. Метод SaveCopyAs определен только для объекта Wokbook, но не для Worksheet. Используй SaveAs. Я бы еще вставил проверку, что лист с таким именем существует. Порядок не сильно важен.
     

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

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я пробовал и SaveAs, если сохраняется первый csv, то Excel вылетает с эксешоном, сохранив csv и не до конца обрабаботанный xls. Если наоборот, xls сохраняется, Эксель после выполнения вешается, а csv не сохраняются вообще.
     
    Добавлено:
    Причем если записать макрос Экселем в режиме записи, он создает такой же код, и так же криво работает.
     
    Добавлено:
    По моему разобрался, этот глюк завязан непосредственно на конкретном экселовском файле или макросе, буду искать концы.

    Всего записей: 214 | Зарегистр. 16-08-2004 | Отправлено: 00:45 10-05-2006
    ScorpionS



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, а как реализовать следующую задумку?
    При открытии Excel'евского файла (книги)
    1. Выдавать сообщение "Message"
    2. Проверять если текущая дата больше, чем (скажем) 20.05.2006 то выдавать сообщение "До свидания" и закрывать этот файл.
    P.S. Своего рода триал период.

    Всего записей: 141 | Зарегистр. 24-02-2003 | Отправлено: 11:55 11-05-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    ScorpionS
    Повесить на событие открытия книги выполнение подобного кода:
    Код:
    Private Sub Workbook_Open()
       
    ' 1)
      MsgBox "Здравствуйте..."
       
    ' 2)
      Dim MyDate As Date
       
      MyDate = "20.05.2006"
       
      If Now > MyDate Then
        MsgBox "До свидания"
        ActiveWorkbook.Close
      End If
       
    End Sub



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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня почему-то Workbook_Open() не срабатывает! Почему это может быть? Версия 6.3.

    Всего записей: 141 | Зарегистр. 24-02-2003 | Отправлено: 19:34 11-05-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ScorpionS
    Проверь установки безопасности: Tools-Options-Security-Macro Security (надеюсь, сможешь перевести).

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Если ты про уровень безопасности макросов, то он у меня "Низкая". Была бы "Высокая" ни один макрос не срабатывал бы, а то не срабатывает именно Workbook_Open(). И так пробовал:

    Код:
    Private Sub WorkbookOpen(ByVal Wb As Workbook)
    End Sub

    тоже не срабатывет.

    Всего записей: 141 | Зарегистр. 24-02-2003 | Отправлено: 20:29 11-05-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ScorpionS
    А куда ты вставляешь Workbook_Open? Надеюсь в ThisWorkbook код, а не в отдельный модуль.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 21:12 11-05-2006
    ScorpionS



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Блин, вот где собака зарыта!
    Yuk
    Спасибо тебе большое, в том числе за понимание и терпение.

    Всего записей: 141 | Зарегистр. 24-02-2003 | Отправлено: 21:25 11-05-2006
    igorkorn



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

    Всего записей: 15 | Зарегистр. 17-03-2004 | Отправлено: 15:37 12-05-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    igorkorn
    У меня все работает, включая список (через Data Validation). Даже если новое значение тоже, что и старое. Покажи код. Как организован список?

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



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Код очень простой:
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column > 3 And Target.Column < 12 Then
      вот тут происходит работа макроса...
    End If
    End Sub
     
    Ну а с 4-го по 11-й столбец находятся данные, изменение которых нужно отслеживать.
    С 4-го по 10-й - это просто цифры. Тут все прекрасно работает.
    А в 11-м - организован список через имя источника.
    Интересно, что если войти двойным нажатием мышки в ячейку этого 11-го столбца,
    даже ничего не меняя, а затем нажать Enter, то макрос срабатывает.
    А если просто выбрать мышкой из списка значение , то ничего не происходит.  

    Всего записей: 15 | Зарегистр. 17-03-2004 | Отправлено: 16:30 12-05-2006
    Yuk



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

    Цитата:
    А в 11-м - организован список через имя источника.

    Можно поподробнее.
     
    Какая версия экселя? В старых версиях (97) были проблемы с этим.
     
    Рядов много? Можно попробовать в отдельную колонку вписать формулу типа =К2 и т.д. и обрабатывать событие Woorksheet_Calculate.

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 17:03 12-05-2006 | Исправлено: Yuk, 17:04 12-05-2006
    igorkorn



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Чудо !!!
     
    Два дня мучился с этой ерундой, как вдруг оно заработало.
    Правда не совсем само. Но результат тот, что и хотел.
    Попробовал поиграться, присвоив имя этому 11-му столбцу, а затем проверяя изменения этого имени. Так после присвоения имени, даже без проверки, заработал  Worksheet_Change через список.
    Просто ради интереса удалил имя - а ОНО осталось работать, как и требовалось.
       

    Всего записей: 15 | Зарегистр. 17-03-2004 | Отправлено: 17:18 12-05-2006
    aquaman1977



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Обнаружил такую странную багу в редакторе..
    Если на форме копи-пастнуть контрол типа ComboBox, то (по крайней мере у меня) - некорректно отображается шрифт скопированного элемента.
     
    К примеру, есть ComboBox1 с параметром шрифт: Tahoma 8pt. При копировании элемента, очевидно, что все поля свойств контрола должны быть идентичными, но этого не происходит. Если посмотреть по очереди на свойства шрифта в обеих элементах будет значится Tahoma 8pt. Но при выделении их вместе - поле шрифт остается пустым.
     
    Кто-нить может объяснить или подтвердить сие недоразумение!?
     
    Для наглядности небольшой пример: _http://aquaman.bizhat.com/primer.xls

    Всего записей: 94 | Зарегистр. 11-03-2005 | Отправлено: 10:45 16-05-2006 | Исправлено: aquaman1977, 11:03 16-05-2006
    nantonov2006

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    У меня такой вопрос:
    Вроде бы должно быть просто, но ни как не могу допереть.
     
    В форме вставлена картинка. Как сделать, что бы при щелчке на картинке открывался браузер и какой-нибудь сайт ?
     
    Заранее благодарю за ответ.

    Всего записей: 3 | Зарегистр. 16-05-2006 | Отправлено: 13:24 16-05-2006
    aquaman1977



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

    Код:
     
    Private Declare Function ShellExecute Lib "Shell32.dll" _
      Alias "ShellExecuteA" (ByVal hWnd As Long, _
      ByVal lpOperation As String, ByVal lpFile As String, _
      ByVal lpParameters As String, ByVal lpDirectory As String, _
      ByVal nShowCmd As Long) As Long
     
    Sub Image1_Click()
      URL = "www.microsoft.com" ' тут прописать нужный урл..
      Call ShellExecute(0&, vbNullString, URL, vbNullString, _
      vbNullString, vbNormalFocus)
    End Sub
     

    Всего записей: 94 | Зарегистр. 11-03-2005 | Отправлено: 15:13 16-05-2006
    nantonov2006

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Выдает ошибку:
     
    Compile error:
     
    Only comments may appear after End Sub, End Function, or End Property

    Всего записей: 3 | Зарегистр. 16-05-2006 | Отправлено: 05:38 17-05-2006
    aquaman1977



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nantonov2006
    Значит, убери коммент.. Хотя странно все это..

    Всего записей: 94 | Зарегистр. 11-03-2005 | Отправлено: 08:47 17-05-2006
    nantonov2006

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А нет - это я прогнал.
     
    Все нормлаьно работает !
     
    Огромное спасибо.

    Всего записей: 3 | Зарегистр. 16-05-2006 | Отправлено: 09:46 17-05-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