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

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

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

    Всего записей: 1 | Зарегистр. 22-02-2006 | Отправлено: 10:00 22-02-2006
    Sonix

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    yandex (google) -> Advanced Office XP password Recovery+crack.
    прога ломает - сам проверял.
     
    Добавлено:
    Вопрос для "Morlok":
    ну во-первых книга их xlstart не невидимая - открывается вместе с любой запущеной;
    во-вторых процедуры почему-то не используются - выдается сообщение "sub or function not defined" (хотя процедура - public).

    Всего записей: 5 | Зарегистр. 05-01-2006 | Отправлено: 10:59 22-02-2006
    Morlok

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
     Если видимость выражается в отображении листов то это можно победить. Перед сохранением книги делаешь - меню "Window" и там есть пункт "Hide" после закрываешь Excel и сохраняешь при закрытии книгу. После при открытии ее не будет видно. Можно указать общее место для всех откуда открывать книги, в меню "Options" закладка "General" есть пункт открывать при запуске все файлы из папки, указываешь доступную для всех папку и все (надо будет конечно всех клиентов настроить но один раз).  
      А по поводу процедур ...   При запуске процедуры из обще книги я указываю так Application.Run "ИмяФайлаСМакросом!ИмяПроцедуры"

    Всего записей: 20 | Зарегистр. 21-10-2003 | Отправлено: 11:46 22-02-2006
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Olive77
     
    Большое спасибо за совет. Я не знал о таком объекте. Теперь проблема решена.  
     
    respite
     
    Подобным образом я пытался решить задачу с самого начала. Но он к сожалению не подходит потому, что
     
    Во-первых: Достаточно один раз кликнуть мышью по ячейке, ничего туда не вводя, как она станет удовлетворять условию Is Not Null.
     
    Во-вторых: Таким как ты описал образом, поиск производится до первой удовлетворяющей этому условию ячейки, т.е. до первой пустой ячейки. А в строке может быть 1, 2, 3, 10 пустых ячеек подряд, а потом снова ячейки с данными. В описанном тобой варианте поиск прекратится после первой же найденной пустой ячейки в строке или столбце, стало быть диапазон заполненных ячеек будет найден некорректно.

    Всего записей: 2975 | Зарегистр. 04-01-2005 | Отправлено: 00:22 23-02-2006
    Stek



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    а каким образом можно в ячейке показать картинку ? Скажем эти картинки есть в других полях файла.

    Всего записей: 1544 | Зарегистр. 19-09-2001 | Отправлено: 00:27 05-03-2006
    NEOMATRIX



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скажите пожалуйста как решить задачу в Excel:
    Процесс изготовления двух видов промышленных изделий состоит в последовательной обработке каждого из них на трех станках. Время использования этих станков для производства данных изделий ограничено 10 ч. в сутки. Время обработки и прибыль от продажи одного изделия приведены в таблице. Найдите оптимальные объемы производства изделий каждого вида.
     
    Изделие | Время обработки 1 изделия, мин. | Удельная прибыль  
               Станок 1  Станок 2  Станок 3  
    1              10           6              6                    2 долл.  
    2               5            20            15                  3 долл.

    Всего записей: 202 | Зарегистр. 29-12-2004 | Отправлено: 20:21 05-03-2006
    anareon

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    можно ли в cделать что-то вроде auto-comlete.. Т.е пользователь набирает в ячеке начало фразы (из некторнго ограниченого множества фраз), а эксель сам дополняет фразу.. как отловить событие набора каждого символа я не нашел - его вообще возможно отловить?

    Всего записей: 2 | Зарегистр. 07-03-2006 | Отправлено: 15:50 07-03-2006
    Anatolij2005

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

    Всего записей: 26 | Зарегистр. 04-10-2005 | Отправлено: 17:43 15-03-2006
    Anjin_Kazawa



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

    Цитата:
    Люди подскажите пожалуйста как написать макрос VBA в Excel что бы выделить все ячейки на листе где есть заливка красным цветом


    Код:
     
        ActiveCell.SpecialCells(xlLastCell).Select
         
        end_row = ActiveCell.Row
        end_col = ActiveCell.Column
         
        If end_row = 2 Then end_row = 65536
        If end_col = 1 Then end_col = 256
        For I = 1 To end_row
        For J = 1 To end_col
            If Cells(I, J).Interior.ColorIndex = 7 Then
               If Cells(I, J).Interior.Pattern = xlSolid Then
                  MsgBox "FOUND row-" + CStr(I) + " col-" + CStr(J)
               End If
            End If
        Next J, I
     

    Всего записей: 392 | Зарегистр. 08-06-2005 | Отправлено: 12:09 16-03-2006
    aquaman77



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

    Код:
     
    Sub SelectCells()
     
    Dim iCell As Range
    Dim iUnionRange As Range
     
    For Each iCell In Range("A1:Z100")
     
    If iCell.Interior.ColorIndex = 3 Then
     
    If iUnionRange Is Nothing Then
       Set iUnionRange = Union(iCell, iCell)
    Else
       Set iUnionRange = Union(iUnionRange, iCell)
    End If
     
    End If
     
    Next
     
    If Not iUnionRange Is Nothing Then iUnionRange.Select
     
    End Sub
     

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Благодарю все прекрасно работает.Отдельное спасибо Junior Member и Aquamann77.

    Всего записей: 26 | Зарегистр. 04-10-2005 | Отправлено: 16:00 16-03-2006
    Adrenalina

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте! Подскажите, пожалуйста, почему при запуске макроса мне выдаёт- "ошибка компиляции" и "процедура слишком велика" . Что нужно  сделать?

    Всего записей: 7 | Зарегистр. 18-11-2005 | Отправлено: 13:41 18-03-2006
    NEOMATRIX



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите плз с задачей которую я указал выше. :/

    Всего записей: 202 | Зарегистр. 29-12-2004 | Отправлено: 00:24 21-03-2006
    Iv2

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Имеется Excel 2003 и файл xml, кусок файла приведен ниже:
     
    ...
    <DOC>
      <STROKA NAME="..." QUANTITY="..." PRICE="...">
        <LAB NOM="..." TARA="..."  QUANTITY="..." />
        <LAB NOM="..." TARA="..." QUANTITY="..." />  
      </STROKA>
    </DOC>
    ...
     
    В xml я не силен, подскажите, как с помощью VBA вытащить значения NAME, QUANTITY и PRICE в отдельные столбцы?

    Всего записей: 3 | Зарегистр. 06-01-2006 | Отправлено: 11:54 21-03-2006
    respite



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

    Код:
     
    MyPath = "D:\"
    MyName = Dir(MyPath, vbDirectory)
    i = 1
    Do While MyName <> ""
        If MyName <> "." And MyName <> ".." Then
        DoEvents
            Open MyPath & MyName For Input As #1
             Do While Not EOF(1)
                DoEvents
                Line Input #1, strTemp
                If InStr(1, strTemp, "<STROKA", vbTextCompare) <> 0 Then
                    l1 = InStr(l1 + 1, strTemp, "NAME", vbTextCompare)
                    cells(i, 1) = Mid(strFile, l1 + 7, InStr(l1 + 1, strFile, """", vbTextCompare) - l1 - 7)
                    i=i+1
                End If
            Loop
            Close #1
             
             
        End If
        MyName = Dir
         
    Loop
     
     

     
    Перебирает построчно все файлы в папке d:\, если находит в строке "<STROKA, то в первый столбик записывает содержимое параметра NAME.

    Всего записей: 201 | Зарегистр. 26-08-2003 | Отправлено: 12:12 21-03-2006 | Исправлено: respite, 12:14 21-03-2006
    Iv2

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    respite
    Спасибо, но это несколько не то. В этом варианте все хорошо пока <STROKA> - это действительно одна строка.
     
    При импорте в Excel возникает неудобство, связанное с тем,что QUANTITY присутствует и в <STROKA>, и в <LAB> (интересует только то, что находиться в <STROKA>). Может можно как-то создать программно свою xmlmap и используя ее вытащить только то, что необходимо? Или нужно использовать что-то другое?

    Всего записей: 3 | Зарегистр. 06-01-2006 | Отправлено: 13:22 21-03-2006
    respite



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Iv2
    Я предложил вариант решения "в лоб". Что мешает проверять, закончился ли тэг и использовать какую-нибудь булевую переменную?
     
    Или сначала прочитать в переменную весь файл, а потом прыгать не по строчкам, а по "<STROKA" -> "</STROKA>".
     
    С другой стороны, можно поробовать просто открыть xml-файл Экселем, а потом уже произвести необходимые манипуляции с данными.

    Всего записей: 201 | Зарегистр. 26-08-2003 | Отправлено: 18:00 21-03-2006
    Iv2

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

    Цитата:
    С другой стороны, можно поробовать просто открыть xml-файл Экселем, а потом уже произвести необходимые манипуляции с данными.

     
    Сейчас я реализовал этот вариант, но все же хотелось бы полнее использовать возможности excel-я по работе с xml. При текущем варианте сначала полностью импортируется xml-файл, а затем происходит обработка полученной таблицы. Почему бы сразу сразу не импортировать только то, что необходимо? Как это сделать я и хочу выяснить.

    Всего записей: 3 | Зарегистр. 06-01-2006 | Отправлено: 09:00 22-03-2006
    Zelenodolec

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

    Всего записей: 1 | Зарегистр. 19-03-2006 | Отправлено: 10:40 22-03-2006
    respite



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Iv2
    Если хочется элегантных решений, наверно, можно использовать Excel 2003 XML Tools: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odc_xl2003_ta/html/OfficeExcelXMLToolAddin.asp
     
    Zelenodolec

    Код:
        Dim lRest, lInt As Long
        Dim iBanknotes As Variant
        iBanknotes = Array(1000, 500, 100, 50, 10, 5, 2, 1)
        lRest = 3862
        For i = 0 To UBound(iBanknotes)
            lInt = Fix(lRest / iBanknotes(i))
            If lInt Then Debug.Print lInt & " * " & iBanknotes(i)
            lRest = lRest - (lInt * iBanknotes(i))
        Next i

     
    Результат выглядит так:

    Код:
    3 * 1000
    1 * 500
    3 * 100
    1 * 50
    1 * 10
    1 * 2

    Всего записей: 201 | Зарегистр. 26-08-2003 | Отправлено: 09:19 23-03-2006 | Исправлено: respite, 09:21 23-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.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru