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

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

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

    Код:
    Attribute VB_Name = "Module1"
    Function Suma_Litere(sc)
    On Error GoTo Err_Suma_Litere
    ' Функция возвращает сумму прописью
    ' на русском языке
    ' для подключеничя макроса выберите пунк сервис/макрос/редактор Visual Basic
    ' File/Import  
    ' 20.02.2001 Басистый В.И.  
    '
     
        Dim adec As Variant
        Dim rez As String, k As String, Kop As String, a1 As String, a As String
        Dim pz As Integer, ad As Integer, ae As Integer
        ReDim zeci(90) As String, sut(9) As String, o(5, 2) As String
        ReDim M(4) As Double, z(4) As Double, S(4) As Double
     
        zeci(1) = "один"
        zeci(2) = "два"
        zeci(3) = "три"
        zeci(4) = "четыре"
        zeci(5) = "пять"
        zeci(6) = "шесть"
        zeci(7) = "семь"
        zeci(8) = "восемь"
        zeci(9) = "девять"
        zeci(10) = "десять"
        zeci(11) = "одинадцать"
        zeci(12) = "двенадцать"
        zeci(13) = "тринадцать"
        zeci(14) = "четырнадцать"
        zeci(15) = "пятнадцать"
        zeci(16) = "шестнадцать"
        zeci(17) = "семнадцать"
        zeci(18) = "восемнадцать"
        zeci(19) = "девятнадцать"
        zeci(20) = "двадцать"
        zeci(30) = "тридцать"
        zeci(40) = "сорок"
        zeci(50) = "пятьдесят"
        zeci(60) = "шестьдесят"
        zeci(70) = "семьдесят"
        zeci(80) = "восемьдесят"
        zeci(90) = "девяносто"
     
        sut(1) = "сто"
        sut(2) = "двести"
        sut(3) = "триста"
        sut(4) = "четыреста"
        sut(5) = "пятьсот"
        sut(6) = "шестьсот"
        sut(7) = "семьсот"
        sut(8) = "восемьсот"
        sut(9) = "девятьсот"
     
        o(1, 1) = "миллиардов"
        o(1, 2) = "миллиард"
        o(2, 1) = "миллионов"
        o(2, 2) = "миллион"
        o(3, 1) = "тысячи"
        o(3, 2) = "тысяча"
        o(4, 1) = "лея"
        o(4, 2) = "лей"
     
        'sc = Forms!Form_oi!valoarea
     
        adec = 100000000000000# + (sc * 100)
        a1 = adec
        a = Mid(a1, 2)
         
        M(1) = Mid(a, 1, 3)
        z(1) = Mid(a, 2, 2)
        S(1) = Mid(a, 1, 1)
        M(2) = Mid(a, 4, 3)
        z(2) = Mid(a, 5, 2)
        S(2) = Mid(a, 4, 1)
        M(3) = Mid(a, 7, 3)
        z(3) = Mid(a, 8, 2)
        S(3) = Mid(a, 7, 1)
        M(4) = Mid(a, 10, 3)
        z(4) = Mid(a, 11, 2)
        S(4) = Mid(a, 10, 1)
        k = Mid(a, 13, 2)
     
        rez = " "
     
        For pz = 1 To 4
            If M(pz) > 1 Then
                zeci(1) = "один"
            ElseIf pz = 3 Then
                zeci(1) = "одна"
            End If
            If pz < 4 Then
                zeci(2) = "два"
            End If
            If S(pz) > 0 Then
                rez = rez & sut(S(pz)) & " "
            End If
            If z(pz) > 0 Then
                If z(pz) < 20 Then
                    rez = rez & zeci(z(pz)) & " "
                Else
                    ae = z(pz) Mod 10
                    ad = z(pz) - ae
                    rez = rez & zeci(ad) & " "
                    If ae > 0 Then
                        rez = rez & Trim(zeci(ae)) & " "
                    End If
                End If
            End If
            If M(pz) > 0 Then
                If M(pz) = 1 Then
                    rez = rez & Trim(o(pz, 2)) & " "
                Else
                    rez = rez & Trim(o(pz, 1)) & " "
                End If
            End If
            zeci(1) = "один"
            zeci(2) = "два"
        Next
        If M(1) + M(2) + M(3) + M(4) = 0 Then
            rez = rez & "ноль лей"
        Else
            If M(4) = 0 Then
                rez = rez & "лей"
            End If
        End If
        sc = Mid(rez, 2)
    '    If Val(k) <> 0 Then
          sc = sc & " " & k & " " & "бань"
    '    End If
        Suma_Litere = UCase(Left(sc, 1)) & Mid(sc, 2, Len(sc))
         
     
    Exit_Suma_Litere:
        Exit Function
     
    Err_Suma_Litere:
        'Result = ErrorHandler(Err)
        Resume Exit_Suma_Litere
    End Function
     
     
    Sub SumLiter()
    Attribute SumLiter.VB_Description = "Возвращает сумму прописью"
    Attribute SumLiter.VB_ProcData.VB_Invoke_Func = "l\n14"
     Suma_Litere (sc)
    End Sub

    или Microsoft Office Extensions -> Программы для представления числа прописью на русском языке

    Всего записей: 159 | Зарегистр. 07-08-2005 | Отправлено: 01:59 12-08-2005
    archimed7592

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    всем привет!
    ещё один вопрос: можно ли (если да то как) в excel'е сделать так, чтобы в заданной ячейке заданного столбца была эталонная формула, а все ячейки (или их n-ое кол-во), что находятся ниже заданной делали вычисления будто в них скопировали эталонную формулу?
     
    заранее спасибо

    Всего записей: 159 | Зарегистр. 07-08-2005 | Отправлено: 19:38 14-08-2005
    Sleepwalker



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    archimed7592
    если просто копируешь ячейку с формулой, то ссылки меняются согласно изменению положения ячейки. Чтобы этого не происходило, перед каждой ссылкой ставишь $, например =$A$3*$A$4.
    Это?

    Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 20:10 16-08-2005
    archimed7592

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    к сожалению нет
    эффект нужен имено без $, но нужно чтобы в нижних ячейках лежали не формулы - слишком большой размер книги

    Всего записей: 159 | Зарегистр. 07-08-2005 | Отправлено: 06:09 18-08-2005
    aquaman1977



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Писал тут скрипт, и возник очередной вопрос:
    Для начала кусок кода (чтобы проще было объяснять):
     

    Код:
     
    Set newb = Workbooks.Add
    Range(Cells(1, 1), Cells(k + 1, Num_Col + 1)).Name = "MyR"
    s=... ' Название листа
    With newb
      .Charts.Add
      .ActiveChart.ChartType = xlLineMarkers
      .ActiveChart.SetSourceData source:=.Worksheets(s).Range("MyR"), PlotBy:=xlColumns
    End With
     

     
    При таком раскладе (т.е. именуя нужную область) - все работает нормально, диаграмма строится. Если область указать явно (т.е. .Worksheets(s).Range(Cells(1,1),Cells(k+1,Num_Col+1)) вылезает ошибка 1004.
     
    Не подскажете, в чем тут грабли?

    Всего записей: 94 | Зарегистр. 11-03-2005 | Отправлено: 17:48 29-08-2005
    AlienRainbow

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
     
    Как можно сделать базу данных на листе (допустим лист называется "BD" и в его ячейках забиты заранее определенные данные: код(В столбец)/наименование(С столбец)/размер(D столбец)/цена(E столбец)).
     
    В листе "ШАБЛОН" в таблицу я забиваю КОД (в столбец "В"), а в столбцы С/D/E должны находиться автоматически и попадать данные из листа "BD".  
     
    Кто поможет в написании VBA для автоматизации БД?
     
    Заранее благодарен

    Всего записей: 1 | Зарегистр. 26-08-2005 | Отправлено: 08:56 02-09-2005
    Asylum

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Уважаемые, помощь нужна.
    Вопрос как правильно сделать адресацию в макросе, чтобы по нажатию кнопки, некая таблица копировалась вниз неизвестное количество раз. То есть сначала 2 раза, потом понадобилось еще парочку. И того на листе стало уже 4 таблицы в столбик.

    Всего записей: 195 | Зарегистр. 23-01-2004 | Отправлено: 13:07 05-09-2005 | Исправлено: Asylum, 16:41 05-09-2005
    DisAsm

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Есть ли в VB команда, получение вычисленного значения в ячеке, где стоит формула?
    Функция Value возращает пустую строку.
     
    sss1 = Worksheets(List).Cells(rwIndex, 9).Formula
    q = Worksheets(List).Cells(rwIndex, 9).Value
     
    Может надо что то прописать выше, типа пересчтитать книгу?
    Подскажите plz!
    Не охото еще и формулы в VB переводить.
     
    *************
    Извеняюсь, все работает. Смотрел на пустой сттроке, соответственно и возращал пустую строку.

    Всего записей: 65 | Зарегистр. 16-11-2004 | Отправлено: 09:35 11-10-2005 | Исправлено: DisAsm, 09:42 11-10-2005
    Olive77

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    All
    Кто может подсказать какие есть методы обезопасить код в VBA для Excel?
    Встроенные в Excel не предлагать.
     
    Добавлено:
    aquaman1977

    Код:
    .ActiveChart.SetSourceData Source:=.Worksheets(s).Range(.Worksheets(s).Cells(1, 1), .Worksheets(s).Cells(k + 1, Num_Col + 1)), _
                PlotBy:=xlColumns

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 12:31 11-10-2005 | Исправлено: Olive77, 13:18 11-10-2005
    FreemanRU



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Такой вопросик - при объединении ячеек через Merge, в случае если обе ячейки содержат значения, появляется предупреждение - его можнон как-то заблокировать?

    ----------
    Если не получается с первого раза - прочти инструкцию. (с)
    "Откуда нам знать, что такое война, если мы не знаем мира..."(с)
    Записки

    Всего записей: 3795 | Зарегистр. 16-07-2004 | Отправлено: 11:42 18-10-2005
    Olive77

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    попробуй Application.displayalerts=false
     
    не забудь снова включить.

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 12:09 18-10-2005 | Исправлено: Olive77, 12:10 18-10-2005
    FreemanRU



    Silver Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Olive77
    Спасибо, это то что нужно

    ----------
    Если не получается с первого раза - прочти инструкцию. (с)
    "Откуда нам знать, что такое война, если мы не знаем мира..."(с)
    Записки

    Всего записей: 3795 | Зарегистр. 16-07-2004 | Отправлено: 13:24 18-10-2005
    NIC13

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

    Всего записей: 2 | Зарегистр. 28-04-2005 | Отправлено: 17:22 18-10-2005
    Nimnul



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

    Цитата:
    Есть такой вопрос. Существует Exel файл. При его редактирование и сохранение чтобы этот файл сохранялся текущей датой и временим. И так каждый раз при его редактирование. Возможно такое или нет. Заранее спасибо за помощь в моем вопросе.

    Так это вроде файловой системой поддерживается.
    У файла есть три аттрибута, время создания, модификации, доступа.

    Всего записей: 1072 | Зарегистр. 05-02-2003 | Отправлено: 19:53 18-10-2005
    zeleniy



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

    Цитата:
    Кто может подсказать какие есть методы обезопасить код в VBA для Excel?  
    Встроенные в Excel не предлагать.  

    Пришлось сделать так написать программу на другом языке (не на VBA), например, на VB, скомпилировать программу и ее уже вызывать из Excel передавая ей необходимые параметры.

    Всего записей: 777 | Зарегистр. 07-12-2001 | Отправлено: 20:20 18-10-2005
    Nimnul



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

    Цитата:
    Кто может подсказать какие есть методы обезопасить код в VBA для Excel?

    Всю жизнь для меня была мечта поиметь дистрибутив Office Developer Edition...
    Но не судьба в моем городе, а с инета так и не выкачал, подобное только в p2p сетях...
    Суть такая что проект пишешь как в обычном офисе, но потом можно подготовить проект для сдачи заказчику, т.е. все само пакуется в дллки и все вызовы. (это как я понял, подробнее можно почитать в интернете либо на сайте майкрософт)

    Всего записей: 1072 | Зарегистр. 05-02-2003 | Отправлено: 22:26 18-10-2005
    Olive77

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zeleniy
    Nimnul
    Мне бы хватило и чего попроще (хотя Office Developer Edition судя по описанию очень заманчиво).
    Я думал, может какие функции запихать в dll (xll).
    Есть ли методы обезопасить библиотеки от декомпайлеров для C++?

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 23:48 18-10-2005
    dneprcomp



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

    Цитата:
    Всю жизнь для меня была мечта поиметь дистрибутив Office Developer Edition

    Тоже вот решил скачать и посмотреть...  
    Снят с производства. И 97-й, и 2000-й. Т.о. у MS скачать нельзя. Только в инете найти как-нибудь,

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 04:30 19-10-2005
    NIC13

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

    Цитата:
    Есть такой вопрос. Существует Exel файл. При его редактирование и сохранение чтобы этот файл сохранялся текущей датой и временим. И так каждый раз при его редактирование.

     Речь идет не о атрибуте файла, а имени файла. На пример файл 051019_1354.xls (где 051019 -дата, 13.54 - время) после его сохранении он становился 051019_1358.xls. То есть что бы имя файла менялось на текущую дату и время каждый раз при его сохранение.

    Всего записей: 2 | Зарегистр. 28-04-2005 | Отправлено: 14:05 19-10-2005
    Nimnul



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

    Цитата:
    То есть что бы имя файла менялось на текущую дату и время каждый раз при его сохранение.

    Можно.
    Перехватить событие перед сохранением книги, получить текущий путь и имя файла, запомнить его.
    Получить текущую дату и время, отформатировать так как нужно, сохранить книгу под этим именем.
    Удалить старый файл.
    Закрыть книгу.

    Всего записей: 1072 | Зарегистр. 05-02-2003 | Отправлено: 15:05 19-10-2005
       

    Страницы: 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