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

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



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Киньте пожалуйста линк на описание "как кодируеться инфа в екселе"
     
    А то надо запрограмить автоматическую обработку .xls файлов  
    на php, а ничего об этом не знаю (
    т.е. хочеться узнать как "читаеться" xls, если его блокнотом открывать.

    Всего записей: 156 | Зарегистр. 05-09-2004 | Отправлено: 21:37 23-03-2006
    Troitsky



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


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

    Всего записей: 794 | Зарегистр. 13-12-2003 | Отправлено: 08:56 24-03-2006
    ayol



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

     
    Troitsky
    Спасибо огромное
     
    читаю..

    Всего записей: 156 | Зарегистр. 05-09-2004 | Отправлено: 09:03 24-03-2006
    Wolfcrush



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Посоветовали обратится в этот раздел...
    Подскажите плиз, как в Экселе реализовать такой вот прикол...
     
    A B C D    
    1 Link1 Info1    
    2 Link2 Info Info2    
    3 Link3 Info3    
    4 Link4 Info4    
    5 Link5 Info5    
    6 Link6 Info6

     
    Нужно, чтобы при нажатии на ячейку Link1 в ячейке Info отображалось то, что находится в ячейке Info1, при нажатии на ячейку Link2 в ячейке Info отображалось то, что находится в ячейке Info2 и т.д. При этом ячейки Info1-Info6 должны быть скрыты.
    Что-то типа фреймов в ХТМЛ...
     
    Нужно для списка фильмов. Т.е. при нажатии на название фильма в определенной ячейке должна отображаться инфа о нем.
     
    Заранее огромное пасиба!

    ----------
    Homo homini lupus est...

    Всего записей: 282 | Зарегистр. 09-06-2004 | Отправлено: 15:15 24-03-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Wolfcrush
    Если уж совсем примитивно, то тогда вот так:
    Код:
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If ActiveCell.Column = 1 Then Cells(1, 2) = Cells(ActiveCell.Row, 3)
    End Sub

     
    но гораздо удобнее будет добавить форму в документ и на ее основе реализовывать каталог.

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

    Всего записей: 794 | Зарегистр. 13-12-2003 | Отправлено: 21:48 24-03-2006
    icywind



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Нужно написать макрос для минимизации функции двух переменных (точнее, приведение ее к определенному значению). Недолго думая, решил использовать надстройку "Поиск решений". После автоматической записи макроса получил следующий код:
     

    Код:
    Sub Макрос1()
        SolverOk SetCell:="$G$13", MaxMinVal:=3, ValueOf:="96", ByChange:="$B$3,$D$3"
        SolverSolve
    End Sub

     
    Только вот засада: при попытке выполнить его VBA ругается на то, что функция не определена. Что мне нужно добавить? И еще: может существует какой-нибудь предельно простой алгоритм для сабжа? (так, для общего развития   )

    Всего записей: 95 | Зарегистр. 26-10-2004 | Отправлено: 21:32 26-03-2006
    OchkaritO

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ, помогите дописать код:
     
    Sub MSG()
    Dim i As Integer
    Dim z As Integer
    Set w1 = ThisWorkbook.Worksheets("Work") 'Nazvanie lista, na kotorom vvodatsay dannye'
    Set w2 = ThisWorkbook.Worksheets("DB") 'Nazvanie lista, kuda budem kopirovat'
    Range("R[i]C1:R[i]C10").Select
    Selection.Copy
    End Sub
     
    Может быть что-то не правильно. Буду очень благодарен за помощь.

    Всего записей: 19 | Зарегистр. 02-02-2006 | Отправлено: 12:56 27-03-2006
    aquaman77



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OchkaritO
    А что хоть скрипт делать должен???

    Всего записей: 8 | Зарегистр. 18-11-2005 | Отправлено: 14:36 27-03-2006
    OchkaritO

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

    Всего записей: 19 | Зарегистр. 02-02-2006 | Отправлено: 15:11 27-03-2006
    aquaman77



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

    Код:
     
    Sub MSG()
    Dim i As Integer
    Dim z As Integer
    Set w1 = ThisWorkbook.Worksheets("Work") 'Nazvanie lista, na kotorom vvodatsay dannye'
    Set w2 = ThisWorkbook.Worksheets("DB") 'Nazvanie lista, kuda budem kopirovat'
    i = 1 'cчетчик по источнику
    j = 1 'счетчик по назначению
    w1.Activate
    ' начало цикла по i тут
    Range(Cells(i, 1), Cells(i, 10)).Copy w2.Cells(j, 1)
    ' если скопировали, то j=j+1
    ' конец цикла по i
    End Sub
     

     
    что-то типа этого?.. Если нет - то подробнее распиши что надо.

    Всего записей: 8 | Зарегистр. 18-11-2005 | Отправлено: 16:50 27-03-2006
    Anjin_Kazawa



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    icywind
    Существует. Через отклонения.
    К примеру есть значение в ячейке 1 и через кучу формул иммем значение в ячейке 10.
    Тогда в ячейку 1 заносим первое значение к примеру 100, тогда в 10 ячейке имеет какое-то число находим отклонение (полученное значение делённое на искомое) и умножаем 10 на отклонение, кажись так. Если нужно то могу поискать, точно такое делал.
     
    Add
    Ещё если хочешь использовать SOLVER, то его нужно подключить в Reference, для этого вызываешь функцию посик решений, делаешь неважно что, потому в VBA и подключаешь.

    Всего записей: 391 | Зарегистр. 08-06-2005 | Отправлено: 18:53 27-03-2006 | Исправлено: Anjin_Kazawa, 19:04 27-03-2006
    icywind



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Anjin_Kazawa
    Поищи пожалуйста, буду благодарен

    Всего записей: 95 | Зарегистр. 26-10-2004 | Отправлено: 22:17 27-03-2006
    Anjin_Kazawa



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

    Цитата:
    Поищи пожалуйста, буду благодарен

    Вообщем поскольку проект в котором использовал был коммерческим, быстренько перекинул алгоритм.
    Код на VBA

    Код:
     
    Sub Посик_решения()
     CurrentValueInFirstCell = 0 'текущее значение в первой ячейке
     CureentValueInFormulaCell = 0 'текущее значение в ячейке после всех формул
     CurrentValueInNeedCell = 0 'требуемое значение
     Pr = 0 'отклонение полученного числа от требуемого
     Col = ActiveCell.Column
     Row = ActiveCell.Row
     ActiveCell.SpecialCells(xlLastCell).Select
     EndRow = ActiveCell.Row
     Cells(Row, Col).Activate
     Cells(Row, Col).Select
     
     For I = 2 To EndRow
        Cells(I, 1) = 100
        CurrentValueInFirstCell = Cells(I, 1)
        CureentValueInFormulaCell = Cells(I, 12)
        CurrentValueInNeedCell = Cells(I, 13)
        Pr = CurrentValueInNeedCell / CureentValueInFormulaCell
        CurrentValueInFirstCell = CurrentValueInFirstCell * Pr
        Cells(I, 1) = CurrentValueInFirstCell
     Next I
    End Sub
     

     
    И поностью готовый .xls файл
     
    Your file Demo.rar (9806 Bytes) is now online.
    Your Download-Link
     
    #

    Всего записей: 391 | Зарегистр. 08-06-2005 | Отправлено: 12:59 28-03-2006 | Исправлено: Anjin_Kazawa, 13:00 28-03-2006
    OchkaritO

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    aquaman77
     
    Это код, который добавляет данные. Я подкорректировал, чтобы данные забирались из пятой строки, но на другой лист он их не добавляет, а заменяет...  
     
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim z As Integer
    Set w1 = ThisWorkbook.Worksheets("Work")  
    Set w2 = ThisWorkbook.Worksheets("DB")  
    i = 5  
    j = 1 w1.Activate
    Range(Cells(i, 1), Cells(i, 10)).Copy w2.Cells(j, 1)
    j=j+1
    MsgBox "Данные успешно добавлены."
    End Sub
     
    Блин. Допиши, пожалуйста, чего ему еще не хватает.

    Всего записей: 19 | Зарегистр. 02-02-2006 | Отправлено: 13:26 29-03-2006 | Исправлено: OchkaritO, 13:32 29-03-2006
    aquaman77



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OchkaritO
    Насколько я понял, ты каждый раз после ввода данных на лист "Work" запускаешь скрипт для копирования строки в лист "DB"? так?
    Гм, тогда переменной j нужно присвоить значение "w2.UsedRange.Rows.Count+1", а не 1, т.е.:

    Код:
     
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim z As Integer
    Set w1 = ThisWorkbook.Worksheets("Work")
    Set w2 = ThisWorkbook.Worksheets("DB")
    i = 5
    j = w2.UsedRange.Rows.Count + 1
    w1.Activate
    Range(Cells(i, 1), Cells(i, 10)).Copy w2.Cells(j, 1)
    MsgBox "Данные успешно добавлены."
    End Sub
     

     
    попробуй так. Но это с условием, что писать ты будешь данные, начиная со 2-й строки. а в первой строке ячейка A1 - не должна быть пустая..
    В противном случае - переменная j всегда будет равна 2...

    Всего записей: 8 | Зарегистр. 18-11-2005 | Отправлено: 01:24 30-03-2006 | Исправлено: aquaman77, 01:27 30-03-2006
    OchkaritO

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    aquaman77
     
    Работет.  Но на страницу DB надо добавить еще одну запись со страницы Zarplata из ячейки I18. Данные в I18 изменяются с вводом данных на листе Work и должны добавляться в туже строку, где данные с листа . Тоесть:
     
    Work Work Work Work Zarplata
    Work Work Work Work Zarplata
     и т.д.
     
    Но в лист Work данные с Zarplata выводить нельзя.
    Подскажи, как как реализовать.
     
    И еще ворос в догонку про Календарь 11. При клике на ячейку вылезает календарь и указываешь число... Мож ссылку дашь, где данная процедура описывается? Спасибо.
     
     

    Всего записей: 19 | Зарегистр. 02-02-2006 | Отправлено: 10:19 31-03-2006
    aquaman77



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OchkaritO
    Если данные по зарплате постоянно обновляются в ячейке I18 листа "Zarplata", то
    соответственно так же, как и в предыдущем случае:

    Код:
     
    Set w3 = ThisWorkbook.Worksheets("Zarplata")
    w3.range("I18").copy w2.cells(j,11)
     

     
    Про календарь:
    какая процедура имеется в виду? Выбор определенного числа? В хелпе все описано вроде бы..

    Всего записей: 8 | Зарегистр. 18-11-2005 | Отправлено: 12:33 31-03-2006
    OchkaritO

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    aquaman77
       Неа. вместо суммы пишет ССЫЛКА! и все тут.
     
    Вот сам файлик, посмотри "на месте", пожалуйста.
    http://pavel-x1.narod.ru/PRIMER.xls
     
       

    Всего записей: 19 | Зарегистр. 02-02-2006 | Отправлено: 13:21 31-03-2006
    aquaman77



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OchkaritO
     
    Если бы ты сразу сказал, что в ячейке I18 - не значение, а выражение, то проблем бы не возникло..
     
    измени процедуру так:

    Код:
     
    Private Sub CommandButton1_Click()
    Dim i As Integer
    Dim z As Integer
    Set w1 = ThisWorkbook.Worksheets("Work")
    Set w2 = ThisWorkbook.Worksheets("DB")
    Set w3 = ThisWorkbook.Worksheets("Zarplata")
    i = 5
    j = w2.UsedRange.Rows.Count + 1
    w1.Activate
    Range(Cells(i, 1), Cells(i, 9)).Copy w2.Cells(j, 1)
    w3.Range("I18").Copy
    w2.Cells(j, 10).PasteSpecial Paste:=xlPasteValues
    MsgBox "Данные успешно добавлены."
    End Sub
     


    Всего записей: 8 | Зарегистр. 18-11-2005 | Отправлено: 13:48 31-03-2006
    felix25

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

    Всего записей: 2 | Зарегистр. 31-03-2006 | Отправлено: 15:52 31-03-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.Board
    © Ru.Board 2000-2018

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru