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

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



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

    Всего записей: 742 | Зарегистр. 03-02-2006 | Отправлено: 17:34 22-11-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ilyansk
    Попробуй  
    Open fname For Binary Access Write As #1
     
    The okk

    Цитата:
    Что за Value2 у объекта Target?

    Target - это объект типа Range для обработки событий.
    Value2 отличается от Value только тем, что не использует типы данные Date и Currency. Вместо этого возвращается Double.
     

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



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

    Цитата:
    спасибо за ссылку, только вот что-то не работает этот код
    Ну так напильником нужно было доработать!

    Цитата:
    я имел ввиду менять положение ScrollTop колесом мышки
    С такой штукой никогда не работал, поэтому опять мог понять неправильно. Доработал код из того примера, что давал тебе и вот что получилось.
     
    Код модуля:
    Код:
    Option Explicit
     
    Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
     
    Public hW As Long ' Хендл пользовательской формы
     
    Private Declare Function CallWindowProcA Lib "user32" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function SetWindowTextA Lib "user32" (ByVal hwnd As Long, ByVal lpString As String) As Long
    Private Const GWL_WNDPROC = -4
    Private Const WM_MOUSEWHEEL = &H20A
    Private lpPrevWndProc As Long, Wheel As Integer
     
     
    Sub Hook(hwnd As Long)
      lpPrevWndProc = SetWindowLongA(hwnd, GWL_WNDPROC, AddressOf WindowProc)
    End Sub
     
    Sub UnHook(hwnd As Long)
      SetWindowLongA hwnd, GWL_WNDPROC, lpPrevWndProc
    End Sub
     
    Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
      On Error GoTo xErr
      If uMsg = WM_MOUSEWHEEL Then
        If wParam = -7864320 Or wParam = -23592960 Or wParam = -15728640 Then
          myForm.Scroll , fmScrollActionLineDown ' скролим вниз
        ElseIf wParam = 7864320 Or wParam = 23592960 Or wParam = 15728640 Then
          myForm.Scroll , fmScrollActionLineUp ' скролим вверх
        End If
      Else
        WindowProc = CallWindowProcA(lpPrevWndProc, hwnd, uMsg, wParam, lParam)
      End If
    xErr:
    End Function

    Код формы:
    Код:
    Option Explicit
     
    Private Sub UserForm_Initialize()
      hW = FindWindow(vbNullString, Me.Caption & Chr(0))
      Hook hW
    End Sub
     
    Private Sub UserForm_Terminate()
      UnHook hW
    End Sub

    Тестовый пример:
    Цитата:
    http://slil.ru/23450156
    Файл будет удален через 1 месяц после последнего скачивания.

    Если перемудрил и для такого в самом Excel VBA предусмотрена возможность - звиняйте - не работал, не ведаю. Кто если в курсе дела, тогда поправьте меня.

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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 20:03 22-11-2006 | Исправлено: Troitsky, 20:04 22-11-2006
    Yuk



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Макрос для mrnovel:
    http://forum.ru-board.com/topic.cgi?forum=5&topic=19106&start=1040#13

    Цитата:
    надо два файлика excel-евских с двумя листами в каждом, объединить в один. Причём значения в некоторых ячейках надо просуммировать и вывести в третий файлик.

    тут
    Двa файла можно выбрать в 1 или 2 шага (если разные фолдеры, например, или просто забыл )
    Суммируются только зеленые ячейки.
    Да, вроде только для Excel 2003 (из-за объекта FileDialog).
     

    Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 00:08 23-11-2006 | Исправлено: Yuk, 03:33 23-11-2006
    The okk



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

    Цитата:
    Value2 отличается от Value только тем, что не использует типы данные Date и Currency. Вместо этого возвращается Double.  

    Правильно ли я понял, что в Value2 всегда хранится значение Value, приведенное к типу Double?
    Это свойство имеет какое-то практическое применение или нужно только для совместимости?
     
    Добавлено:
    Можно ли как-нибудь сделать, чтобы значок автофильтра был не в верхнем правом, а в нижнем правом углу?
     
    Добавлено:
    А, сорри, туплю. - Нашел.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 07:13 23-11-2006 | Исправлено: The okk, 07:14 23-11-2006
    Yuk



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

    Цитата:
    Правильно ли я понял, что в Value2 всегда хранится значение Value, приведенное к типу Double?

    Не совсем. Во-первых, не хранится. Value2, как и Value и др. является свойством объекта, то есть возвращает его значение. Во-вторых, к типу Double приводятся только Date и Currency.
    Равнозначно CDbl(объект.Value). Насчет практического значения, не знаю, я практически не использую, в основном из-за того, что редко работаю с датами, а тем более с деньгами.
     
     
    Добавлено:
    Народ, с SOAP (веб-сервисы) в VBA никто не пробовал работать? Кое-что получается, но один сайт совсем не хочет отзываться, хотя через Pyton без проблем. Может, я что-то недоконфигурировал. Есть специалисты?
     

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Yuk
    Спасибо громадное!
     
    Я решил вопрос "более по-другому"
     

    Цитата:
     
    Sub сложение()
    '
    ' сложение Макрос
    ' Макрос записан  (brp)
    '
     
    '
        ChDir "C:\soft\dds"
        Workbooks.Open Filename:="1.xls"
        Range("I22:L393").Select
        Range("L393").Activate
        Selection.Copy
        Workbooks.Open Filename:="2.xls"
        Range("I22").Select
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlAdd, SkipBlanks:= _
            True, Transpose:=False
        Application.CutCopyMode = False
        ActiveWorkbook.SaveAs Filename:="result.xls", FileFormat:= _
            xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
            , CreateBackup:=False
    End Sub
     

     
     
    Сегодня хочу совместить приятное с полезным: диалоги открытия файлов (пользователям это всё таки понятнее...) с суммированием только определенного диапазона на листах.
     
    Ещё раз: большущее тебе спасибо что натолкнул на правильную мысль!

    Всего записей: 65 | Зарегистр. 21-11-2006 | Отправлено: 08:56 23-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как определяется UsedRange?
     
    Добавлено:
    И как сделать, чтобы гиперссылки не были синими и подчеркнутыми? И, по-возможности, еще и ни на что не ссылались .

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 09:27 23-11-2006
    Yuk



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

    Цитата:
    Как определяется UsedRange?

    Последняя ячейка как по Ctrl-End.
     

    Цитата:
    И как сделать, чтобы гиперссылки не были синими и подчеркнутыми?

    Обычным форматом - убрать подчеркивание и цвет.

    Цитата:
    И, по-возможности, еще и ни на что не ссылались

    Удалить гиперссылку.

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



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

    Цитата:
    Последняя ячейка как по Ctrl-End.  

    Я имею в виду, что туда входит? А то ячейки все пустые, а в UserRange все равно вошли почему-то.
     

    Цитата:
    Обычным форматом - убрать подчеркивание и цвет.  

    ok. С этим ясно.
     

    Цитата:
    Удалить гиперссылку.


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

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 09:57 23-11-2006 | Исправлено: The okk, 09:57 23-11-2006
    kramrus

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем добрый День?
    Возможно ли написать макрос:
    Если ячейки СА11=0 и ВА11=0 строку 11 скрыть (нужно что бы она на печаталась на принтере). Заранее Всем СПАСИБО!

    Всего записей: 27 | Зарегистр. 07-11-2006 | Отправлено: 12:24 23-11-2006
    The okk



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

    Код:
    if Range("CA11") = 0 and Range("BA11")=0 then
     Rows(11).Hidden = true
    end if

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 12:39 23-11-2006 | Исправлено: The okk, 12:56 23-11-2006
    kramrus

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    The okk
    Спасибо ГРОМАДНОЕ.
    А вобще где нибудь, можно найти доку по макросам и VBA на русском языке?

    Всего записей: 27 | Зарегистр. 07-11-2006 | Отправлено: 13:10 23-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kramrus
    Книжку купи . Уокенбаха желательно. А если надо решать простейшие задачки типа последней, то просто справочник по VBA6.3... хотя Уокенбах все равно не помешает

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 13:29 23-11-2006
    Anton T

    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Народ помоги пожалуйста в Аксессе.
    http://forum.ru-board.com/topic.cgi?forum=33&topic=3121&start=40#2

    Всего записей: 325 | Зарегистр. 12-04-2006 | Отправлено: 13:54 23-11-2006
    kramrus

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

    Всего записей: 27 | Зарегистр. 07-11-2006 | Отправлено: 13:58 23-11-2006
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как запретить пользователю редактировать защищенные ячейки, НО разрешить менять их скриптом.
     
    Добавлено:
    Так, с этим вроде тоже разобрался. UserInterface = True.
     
    И все таки - что же входит в UsedRange кроме заполненных ячеек?

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 15:22 23-11-2006
    SERGE_BLIZNUK

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

    Цитата:
     вобще где нибудь, можно найти доку по макросам и VBA на русском языке

    Литературы в инете ПОЛНО!! в том числе и на русском. и книжек полно.
    поищи, например, на Natahaus - Лучшие книги Интернета
    там был Уокенбах, Джон Подробное руководство по созданию формул в Excel 2002.  
    (правда, 34 Мб!) ссылки на скачку
    там же - Каталог ссылок на книжки по теме MS Excel
    и ещё на рубоарде есть топик Учебники по MS Office 2003 на русском.. разные! много!

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 17:58 23-11-2006 | Исправлено: SERGE_BLIZNUK, 18:01 23-11-2006
    Yuk



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

    Цитата:
    что же входит в UsedRange кроме заполненных ячеек?

    Все от Ctrl-Home до Ctrl-End.
     
    Добавлено:
    Можешь проверить макросом:
    Debug.Print Activesheet.UsedRange.Address
     
     
    Добавлено:

    Цитата:
    нужно сделать всплывающую подсказку

    А коменты чем не устраивают?

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



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

    Цитата:
    Все от Ctrl-Home до Ctrl-End.  

    Объясняю ситуацию - заполнено 10 строк. UsedRange.Rows.Count = 80. Не могу понять, почему. Ведь остальные строки чистые.
     

    Цитата:
    А коменты чем не устраивают?

    меня просто удивило отсуствие очевидной опции в Excel. - Выдавать всплывающую подску для ячеек. Ведь может быть и такое, что содержимое ячейки не помещается на экране полностью. В этом случае помогает всплывающая подсказка, к которой мы все так привыкли. А коменты/заметки/примечания - это ОЧЕНЬ слабая и малопривлекательная замена.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 20:58 23-11-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