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

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

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

    Цитата:
    написал, блокировки в самое начало поставил.  

    Приведите окончательный код, пожалуйста.

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 15:21 30-03-2007
    kiVAR

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
     
    Dim iRow As Long
     
    iRow = Target.Row 'получаем строку ввода и только для неё проводим изменения
     
    For iRow = 2 To 10
    If Target.Column = 2& Then
        If IsNumeric(Cells(iRow, 3&).Value) And IsNumeric(Cells(iRow, 2&).Value) Then
            Cells(iRow, 3&).Formula = "=" & Cells(iRow, 3&).Value & "-" & Cells(iRow, 2&).Address
        End If
    ElseIf Target.Column = 1& Then
        If IsNumeric(Cells(iRow, 1&).Value) And IsNumeric(Cells(iRow, 3&).Value) Then
            Cells(iRow, 3&).Formula = "=" & Cells(iRow, 3&).Value & "+" & Cells(iRow, 1&).Address
        End If
    End If
    Next iRow
    Application.EnableEvents = True
    Application.ScreenUpdating = True
     
    End Sub

    Всего записей: 10 | Зарегистр. 26-03-2007 | Отправлено: 15:36 30-03-2007
    AndVGri

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

    Цитата:
    For iRow = 2 To 10
    - а это зачем? Цикл как раз
    Цитата:
     ну всё равно, ввожу я в другую строку, а он мне все значения пересчитывает
    - уберите цикл и тогда изменения будут выполняться только для той строки, в которой выполнен ввод в столбец А или В.
    Может вы по детальнее напишете, что надо сделать?

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 15:50 30-03-2007
    kiVAR

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всё. вроде получилось.
    AndVGri большое спасибо
    страна тебя не забудет

    Всего записей: 10 | Зарегистр. 26-03-2007 | Отправлено: 16:12 30-03-2007
    Olive77

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

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 16:34 30-03-2007
    Tellme

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ПРивет! Вот моя проблемка...  
    Мне необходимо, в зависомости от введённого числа, допустим в ячейку А1 , заполнить столько ячеек, какое число было введено в А1 в столбце B , по определённой формуле, в которой фигурирует переменная для каждой следующей ячейки стобца B её значение увеличивается на единицу и к ней прибавляются знаения из столбца С, такимобразом, что в В1 будет сумма С1 и нашей переменной, в В2 будет сумма С2 и нашей переменной(увеличенной на единицу), в столбце В3- сумма С3 и нашей переменной увеличенной на единицу, относительно значения, занесённого в В2 и т.д. до В с индексом равным значению ячейки А1.
      Уже несколько дней туплю . А диплом-то не ждёт! Помогите, плиз, если кто знает как!

    Всего записей: 2 | Зарегистр. 31-03-2007 | Отправлено: 12:43 31-03-2007
    AndVGri

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

    Цитата:
    несколько дней туплю

    Это видно

    Цитата:
    какое число было введено в А1 в столбце B
    - как?

    Цитата:
    по определённой формуле

    то есть: b(i)=c(i) + a(1) + (i - 1), для i = 1..n, где n = a(1)? Почётче, если возможно

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 13:33 31-03-2007 | Исправлено: AndVGri, 13:35 31-03-2007
    Tellme

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1. В ячейку А1 вводится число n или просто просят ввести n с помощью окошка Inbox.
    2. В ячейку В1 вводится значение 0.
    3. В ячейку В2 вводится значение формулы: В1+С1+1*3
    4. В ячейку В3 вводится значение формулы: В2+С2+2*3
    ...
    n+1. В ячейку Вn вводится значение5 формулы:В(n-1)+ С(n-1)+(n-1)*3
     
    Так понятней?

    Всего записей: 2 | Зарегистр. 31-03-2007 | Отправлено: 16:00 31-03-2007
    AndVGri

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

    Цитата:
    Так понятней?
    Аха;)
    Подробнее...

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 16:34 31-03-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tellme
    AndVGri
    Только, с позволения уважаемого AndVGri,
    я бы заменил
    Код:
     
                For i = 3& To vCount
                    Range("B2").Copy Cells(i, 2&)
                Next i
    на код
                Range("B2").Copy Range(Cells(3, 2), Cells(vCount, 2))
     


    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 23:25 31-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SERGE_BLIZNUK
    Спасибо. Живу - учусь

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 04:07 01-04-2007
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    ;-) Вы не поверите, я тоже в этом форуме больше учусь, чем отвечаю ;-))) Ну 50 на 50...
    И ещё, я уверен, что Вы только на форуме junior (пока ;-)), но в программировании на VBA - отнюдь не новичок!!
     
    p.s. пример с переносом данных и копированием целого диапазона был тут давно на форуме. Так что - ВЕК ЖИВИ, ВЕК УЧИСЬ или
    "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)

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

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

    Всего записей: 7 | Зарегистр. 24-01-2006 | Отправлено: 08:00 02-04-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    le3ch
     
        Dim pos As Long
        Dim vRefers As String
         
        vRefers = ActiveWorkbook.Names("Имя диапазона").RefersTo
        pos = VBA.InStr(vRefers, "!")
        Debug.Print Mid$(vRefers, 2&, pos - 2&)

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 08:45 02-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    le3ch
    Вот такая вот UDF получается:

    Код:
    Function ИМЯ_ЛИСТА(RangeName As String) As String
     Application.Volatile
     ИМЯ_ЛИСТА = Names(RangeName).RefersToRange.Parent.Name
    End Function

    В качестве аргумента используется СТРОКА, т.е. в ячейку формула вставляется в виде:
    =ИМЯ_ЛИСТА("название_твоего_диапазона")
    Результатом формулы будет название листа.

    Всего записей: 327 | Зарегистр. 16-11-2006 | Отправлено: 08:54 02-04-2007 | Исправлено: The okk, 08:55 02-04-2007
    le3ch

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

    Всего записей: 7 | Зарегистр. 24-01-2006 | Отправлено: 08:57 02-04-2007
    The okk



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Привет! Не люблю строковые операции.
    А что касается копирования формулы (предыдущий код). Формулу в таких случаях вводят двумя способами: вводят формулу в одну ячейку и запускают метод AutoFill, либо:  
    Range(<наш диапазон>).FormulaR1C1 = "<наша формула в стиле R1C1>". Последний способ мне нравится больше, поскольку он быстрее и в одно действие

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот и у меня вопрос появился
    Имею форму, на ней фрейм. На него динамически вывожу кнопки-переключатели (ToggleButton). Надо чтобы при нажатии на одну из кнопок другие сбрасывались в состояние отжата. В доке написано, что если свойству GroupName таких кнопок присвоить некоторое общее имя, то это обеспечит требуемое поведение.
    Пробовал в качестве GroupName задавать имя фрейма, другую строку, но нарываюсь на ошибку 387 - set not permited. Как обойти и в чём проблема? Да, ещё - Excel 2003
     
    Private Const ButtonProgID As String = "Forms.ToggleButton.1"
     
    Private Sub UserForm_Initialize()
    Dim Added As MSForms.ToggleButton
    ...
    'frmImages - объект класса Frame, btName - уникальное название кнопки-переключателя
    Set Added = frmImages.Controls.Add(ButtonProgID, btName)
    With Added
        .GroupName = frmImages.Name
        ...
    End With
    ...
    End Sub

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 18:02 02-04-2007 | Исправлено: AndVGri, 18:05 02-04-2007
    Olive77

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    пока могу только сказать, что свойство GroupName применяется к CheckBox и OptionButtоn.
    У ToggleButton этого свойства нет.
    Придется, по-видимому, программировать.

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 18:46 02-04-2007 | Исправлено: Olive77, 19:09 02-04-2007
    AndVGri

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

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 19:01 02-04-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