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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Братцы, подскажите как сделать, что бы VB распознавал русский текст. Я создал БД в Access. Это не Эксель, но тот же VB. Русский из таблицы воспроизводится нормально и все надписи на формах тоже. Но, мне нужно текст присвоить текстбоксу на русском через программный код. Английский текст присваивает нормально, а вот русский VB видит только ???? и поэтому ничего сохранить не может.
     
    Заранее спасибо.

    Всего записей: 81 | Зарегистр. 18-10-2005 | Отправлено: 08:57 12-01-2006
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AlDol
    Попробуй присваивать через ASC-коды
    Вопросы по Access следует задавать в соответсвующих темах. Вот хотя бы в VBA for Access . Или подбери себе подходящую: http://forum.ru-board.com/forum.cgi?action=filter&forum=33&filterby=topictitle&word=access
    Да, не плохо бы было понять в какой среде програмируем: VB или VBA.

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 09:40 12-01-2006 | Исправлено: dneprcomp, 09:52 12-01-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    jrd32
    Для конкретно этого случая если нумерация в начале строки состоит из двух цифр и точки (3 символа) и путь к текстовому файлу "C:\1.txt", можно применить такой код.

    Код:
      Dim j As Integer
      Dim strMx() As String
      Dim TextLine As String
     
      Open "C:\1.txt" For Input As #1 ' Открывает файл.
        j = -1
        Do While Not EOF(1) ' Цикл до конца файла.
          Line Input #1, TextLine ' Читает строку в переменную.
            TextLine = Mid(TextLine, 4, Len(TextLine) - 4)
            TextLine = Trim(TextLine)
            If TextLine <> "" Then
              j = j + 1
              ReDim Preserve strMx(j)
              strMx(j) = TextLine
            End If
        Loop
      Close #1    ' Закрывает файл.

    В результате массив strMx будет содержать строки вида "qwertyuiopasdfghEXEL00jklzxcvbnm". Что с ними делать дальше ты до сих пор внятно не объяснил.
    Позиция с которой начинается "EXEL00" всегда постоянна?
    Как именно вводить данные в лист?
    По каким числовым значениям строить диаграмму?
    Какая диаграмма интересует?
     
    Жду внятных ответов. Когда они появятся, тогда и продолжим.

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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 12:26 12-01-2006
    jrd32



    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Spasibo
    A deograma dolzna vygledet vrode peroga i vnej pokazono skolko mesta zanimaet EXEL00... a esli dopustem pripishem ishe 2 raza  "qwertyuiopasdfghEXEL12jklzxcvbnm" to pokazet shto EXEL12 zanimaet mesta bolshe chem libo inoi EXEL00........

    [b][s]Добавлено:[/s][/b]
    [b]Troitsky[/b]

    Da pozicyia dolzna byt postojanna.
    A v list vodit nado pod Bukvoi " A " vniz. Na cyfru 1 idet EXEL00 potom na cyfru 2  EXEL01 itd.... . A vot pustovo mesta na liste nedolzno byt.

    [b][s]Добавлено:[/s][/b]
    <b> Извените за транслит. <b>
    По русский медленно пешу да и еш с ошибками. А так пешу  на русском через прогу Зю - каторая позволяет переводит буквы с латыни на азбуку. - Для тех кто привык писать на латыне. Кому надо вышлю.

    Всего записей: 7 | Зарегистр. 22-12-2005 | Отправлено: 11:17 15-01-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    jrd32
    Вот на скорую руку сделал. Что-то в этом роде должно быть:
     

    Код:
    Type MyType
      Text As String
      Count As Integer
    End Type
     
    Sub MySub()
     
      Dim i As Integer, j As Integer
      Dim f As Boolean
      Dim Mx() As MyType
      Dim TextLine As String
     
      Open "C:\1.txt" For Input As #1 ' Открывает файл.
        i = -1
        Do While Not EOF(1) ' Цикл до конца файла.
          Line Input #1, TextLine ' Читает строку в переменную.
            TextLine = Trim(Mid(TextLine, 20, 6))
            f = False
            If TextLine <> "" Then
              For j = 0 To i
                If Mx(j).Text = TextLine Then
                  Mx(j).Count = Mx(j).Count + 1
                  f = True
                  Exit For
                End If
              Next j
              If Not f Then
                i = i + 1
                ReDim Preserve Mx(i)
                Mx(i).Text = TextLine
                Mx(i).Count = 1
              End If
            End If
        Loop
      Close #1    ' Закрывает файл.
     
      With Worksheets(1)
        For j = 0 To i
          .Cells(j + 1, 1).Value = CStr(Mx(j).Text)
          .Cells(j + 1, 2).Value = CInt(Mx(j).Count)
        Next j
        Charts.Add
        ActiveChart.ChartType = xl3DPie
        ActiveChart.SetSourceData Source:=.Range(.Cells(1, 1), .Cells(j, 2)), PlotBy:=xlColumns
      End With
     
    End Sub

     


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 12:32 15-01-2006
    DonRus

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

    Всего записей: 6 | Зарегистр. 22-01-2006 | Отправлено: 01:44 22-01-2006
    Nickos23



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите новичку в VBA!
    Возможно ли сводную таблицы создавать для данных, расположенных в массиве или же для этого обязательно надо их скопировать на лист?

    Всего записей: 51 | Зарегистр. 13-05-2003 | Отправлено: 15:36 02-02-2006
    Sonix

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

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

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
     Создаешь книгу с макросами, которые должны быть доступны для разных книг и кладешь ее в папку C:\Program Files\Microsoft Office\OFFICE11\XLSTART (соответственно \OFFICE11 для 2003 офиса). Эта книга будет открываться при запуске екселя будет невидимой но макросы из нее будут доступны

    Всего записей: 20 | Зарегистр. 21-10-2003 | Отправлено: 12:16 08-02-2006
    Sonix

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

    Всего записей: 5 | Зарегистр. 05-01-2006 | Отправлено: 12:20 15-02-2006
    Olive77

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DonRus
    А не проще просто запаролить лист?

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 18:39 15-02-2006
    Fantom 14



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    народ помогите!
    меня тут попросили написать прогу на Excel VBA по профилю я с ним не занимался и нету пока причин с ним заниматься. прога очень простая: дано 4х значное число, надо в этом числе выбрать цифру которая стоит левее минимальной цифры, и еще одну которая стоит левее максимальной.  
     
    для примера 6597 прога должна вывести 6 как цифра стоящая левее минимальной, и 5 как цифра стоящая левее максимальной

    Всего записей: 322 | Зарегистр. 23-10-2004 | Отправлено: 15:39 17-02-2006
    Troitsky



    Водник Водкин
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    deleted
     
    пардон, не туда запостил
     
    Добавлено:
    раз уж запостил по обшибке, дабы пост не пустой был отвечу
    Fantom 14
    Почему именно на VBA? число должно с листа браться?
    Что нужно сделать если все цифры одинаковые? Если максимальная цифра является крайней? куда вывести? В лист?

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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 18:18 17-02-2006 | Исправлено: Troitsky, 18:19 17-02-2006
    Fantom 14



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

    Цитата:
    Почему именно на VBA?

    потому что считают, что студенты обычного гуманитарного универа должны знать его. будь это на паскале или си я бы сделал а с ВБА я дела не имел.

    Цитата:
    число должно с листа браться?  

    ввожу сам в поле типа ЕДИТ(говорю в терминологии С++)

    Цитата:
    Что нужно сделать если все цифры одинаковые?

    вывод сообщения что все числа одинаковы

    Цитата:
    Если максимальная цифра является крайней?

    вывод сообщения что число крайнее. тоже самое сделать если и миним. число крайнее

    Цитата:
    В лист?

    в поле типа МЕМО(по С++)
     
    меня только попросили сделать прогу на ВБА и дали задание. больше не знаю. дайте хоть каконить вариант. буду рад

    Всего записей: 322 | Зарегистр. 23-10-2004 | Отправлено: 18:57 17-02-2006 | Исправлено: Fantom 14, 19:26 17-02-2006
    Troitsky



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

    Цитата:
    меня тут попросили написать прогу на Excel VBA по профилю я с ним не занимался и нету пока причин с ним заниматься
    А разве то, что тебя попросили не является причиной?

    Цитата:
    потому что считают, что студенты обычного гуманитарного универа должны знать его

    Цитата:
    меня только попросили сделать прогу на ВБА

    Я к тому спрашиваю, что может ты с VB путаешь, т.к. на VBA, в принципе, прогу не напишешь, а лишь макрос(ы), дополнив таким образом документ и сделав его подобным приложению.
     
    Вообще, задание мутное какое-то
     
    Без всяких изощренных проверок если, то будет выглядеть вроде этого
    Код:
    Private Type MyType
      Number As Integer
      Position As Integer
    End Type
     
    Sub Find()
      Dim strNum As String
      Dim intLen As Integer
      Dim i As Integer
      Dim intCur As Integer
      Dim iMax As MyType
      Dim iMin As MyType
       
      iMax.Number = 0
      iMax.Position = 0
      iMin.Number = 9
      iMin.Position = 0
       
      ' Ввод числа из ячейки A1
      strNum = ActiveSheet.Cells(1, 1).Text
      intLen = Len(strNum)
       
      For i = 1 To intLen
        intCur = Val(Mid(strNum, i, 1))
     
        If intCur >= iMax.Number Then
          iMax.Number = intCur
          iMax.Position = i
        End If
         
        If intCur <= iMin.Number Then
          iMin.Number = intCur
          iMin.Position = i
        End If
      Next i
       
      If iMax.Position > 1 Then
        ' Вывод цифры, которая стоит левее максимальной цифры, в ячейку B1
        ActiveSheet.Cells(1, 2).Formula = Mid(strNum, iMax.Position - 1, 1)
      Else
        ActiveSheet.Cells(1, 2).Formula = "фиг вам"
      End If
       
      If iMin.Position > 1 Then
        ' Вывод цифры, которая стоит левее минимальной цифры, в ячейку C1
        ActiveSheet.Cells(1, 3).Formula = Mid(strNum, iMin.Position - 1, 1)
      Else
        ActiveSheet.Cells(1, 3).Formula = "фиг вам"
      End If
       
    End Sub

     
     
     


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 20:33 17-02-2006 | Исправлено: Troitsky, 20:38 17-02-2006
    Fantom 14



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Troitsky
    чето я не понял: а как его с ВБА связать? что надо сделать чтобы его там запустить? я походу делаю чтото не так он пишет мне что Compile Error: Invalid inside procedure :0?

    Всего записей: 322 | Зарегистр. 23-10-2004 | Отправлено: 21:10 17-02-2006
    Troitsky



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

    Цитата:
    чето я не понял: а как его с ВБА связать?
    добавь модуль. вставь туда код. введи в ячейку A1 число и выполни макрос.

    Цитата:
    Compile Error: Invalid inside procedure
    А разве в ВБА можно такую ошибку получить?  


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

    Всего записей: 795 | Зарегистр. 13-12-2003 | Отправлено: 22:03 17-02-2006
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Привет всем,  
     
    Часто возникает такая задача. Есть лист Excel в котором 5-6 сотен хаотически заполненных ячеек. Как определить диапазон этих ячеек? Т.е. фактически координаты - последней нижней правой заполненной ячейки?

    Всего записей: 2975 | Зарегистр. 04-01-2005 | Отправлено: 01:39 18-02-2006
    Olive77

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

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 01:59 18-02-2006
    respite



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

    Код:
    i = 1
    j = 1
    While Cells(i, j).Value Is Not Null
       '... тут обрабатываешь все заполенные ячейки
       
       i = i + 1
       j = j + 1
    Wend

     
    Такой вариант не подойдет?
    Спускаемся по диагонали до тех пор, пока не встретим пустую ячейку. Можно сделать вложенный цикл.
     
     

    Код:
    i = 1
    j = 1
    While Cells(i, 1).Value Is Not Null
       'ищем первую пустую ячейку в первой колонке
       
       i = i + 1
    Wend
     
    While Cells(i - 1, j).Value Is Not Null
       'ищем первую пустую ячейку в последней строке. координаты последней нижне-правой ячейки: i-1,j-1
       
       j = j + 1
    Wend

     

    Всего записей: 201 | Зарегистр. 26-08-2003 | Отправлено: 12:04 21-02-2006 | Исправлено: respite, 12:09 21-02-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