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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    genf
    А зачем Вам программа. Не проще ли воспользоваться ВПР?
    на другом листе
    в А1 пишите МН105-1, в В1 - количество, в С1 =ВПР(A1;Лист1!A2:C150;2; ЛОЖЬ)*B1 - получите значение по прокат-массе, аналогично в D1. Если использовать абсолютные ссылки в ВПР для диапазона базы или задать ей имя, то можно потом её раскопировать на несколько позиций

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 12:45 23-03-2007
    filmax



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте! Подскажите, плз!
    Задача:
    файл 1.xls содержит ячейки закрашенные цветом. Лежит в локальной сети.
    файл 2.xls копирует из закрытого 1.xls данные, и обрабатывает.
    Так вот не могу найти как анализировать цвет ячейки(вопрос 1), да еще по локальной сети из закрытого файла(вопрос 2).
    Т.е. например если красная(1.xls), то вставить значение "1"(2.xls), а если синяя(1.xls), то значение "2"(2.xls).
     
    aar
    спасибо!

    ----------
    "Лилия гнилая пахнет хуже, чем сорная трава в навозной луже"

    Всего записей: 220 | Зарегистр. 12-10-2002 | Отправлено: 15:27 23-03-2007 | Исправлено: filmax, 15:49 23-03-2007
    aar



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

    Цитата:
    анализировать цвет ячейки

    Cells(x, y).Interior.ColorIndex

    ----------
    * * *

    Всего записей: 7080 | Зарегистр. 20-11-2003 | Отправлено: 15:43 23-03-2007
    evsino

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    на одном из листов есть нужная мне информация из которой формируется имя файла
    типа #.####_#.####_01.01 2007 г.
    Это значение лежит в ячейке и собирается по функции СЦЕПИТЬ
     
    делаю saveas failname:=range("A1").value
    EXEL не ругается
    сохраняет но когда обращаюсь к папке куда сохраняю вижу что файл то сохранился не верно
    если сразу жму на панели сохранить как в окне вижу
     что вроде сохранялся файл как '#.####_#.####_01.01 2007 г.'
    в общемто файл сохранился но по значку это не EXCEL
    но если я его стартую то файл открывается EXCEL
     
    помогите разобраться
    и еще перед saveas мне надо что бы EXCEL создал папку имя которой лежит в ячейке#
    а уж потом в эту папку сохранялся бы правильно сам файл

    Всего записей: 26 | Зарегистр. 13-11-2006 | Отправлено: 19:36 23-03-2007
    genf

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri! Огромное вам спасибо за такую подсказку!!!
    Всё работает! А то я уже полез в программирование VBA.
    У меня ещё такой вопрос-есть в Exel 2 ячейки, в каждой из которой по формуле (достаточно сложные и громоздкие, поэтому MatCAD отпадает), в каждую из этих формул входит один неизвестный параметр (обозначим его через X). Необходимо подобрать этот параметр таким, чтобы результат двух формул был бы одинаковым. Я так полагаю необходим просто перебор чисел, до достижения условия равенства двух ячеек. Но как это автоматизировать?
    Заранее благодарю за помощь в решении проблемы!

    Всего записей: 8 | Зарегистр. 17-03-2007 | Отправлено: 00:00 24-03-2007 | Исправлено: genf, 00:01 24-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    evsino
    Короче, всё до кучи
     
        Dim SavePath As String
        Dim SaveName As String
         
        SavePath = Application.DefaultFilePath
        If Mid$(SavePath, Len(SavePath), 1&) <> "\" Then SavePath = SavePath & "\"
        SavePath = SavePath & CStr(Range("Ячейка имени папки").Value)
         
        If VBA.Dir(SavePath, vbDirectory) = "" Then VBA.MkDir SavePath
         
        SaveName = CStr(Range("Ячейка имени книги").Value)
        If Len(SaveName) < 4& Then
            SaveName = SaveName & ".xls"
        Else
            If UCase$(Mid$(SaveName, Len(SaveName) - 3&, 4&)) <> ".XLS" Then SaveName = SaveName & ".xls"
        End If
        ActiveWorkbook.SaveAs Filename:=SavePath & "\" & SaveName
     
    Добавлено:
    genf

    Цитата:
    Необходимо подобрать этот параметр таким, чтобы результат двух формул был бы одинаковым. Я так полагаю необходим просто перебор чисел, до достижения условия равенства двух ячеек. Но как это автоматизировать?  

    Опять же, можно обойтись без программирования. Как пример:
    В А1 - начальное приближение Х, в В1 - 1-ую формулу, в С1 - 2-ую формулю, в D1 - =C1-B1. Далее меню Сервис-"подбор параметра", в диалоге ставим: установить в ячейке D1 - 0, изменяя значение в А1

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 02:49 24-03-2007 | Исправлено: AndVGri, 03:37 24-03-2007
    genf

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AndVGri
    Все получилось! Благодарствую!!!
    Я понял насколько мало знаю об Exel.
    Может посоветуешь какую-нибудь литературу по Office!

    Всего записей: 8 | Зарегистр. 17-03-2007 | Отправлено: 17:42 24-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    genf
    Пройдитесь http://forum.ru-board.com/topic.cgi?forum=5&topic=19106 . Активнее используйте "книгу" Excel F1 , а если серьёзнее, то поищите на http://forum.ru-board.com/forum.cgi?forum=93. Закругляюсь, это уже флуд пошёл

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 04:37 25-03-2007
    Oleg24

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

    Всего записей: 5 | Зарегистр. 26-03-2007 | Отправлено: 11:21 26-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Oleg24
    Не забудьте установить reference on Microsoft VBScript Regular Expressions
     
    Public Function GetNumberAfterText(ByVal CellText As String) As Double
        Dim pReg As New RegExp
        Dim pMatchs As MatchCollection
        Dim pMatch As Match
         
        pReg.Pattern = "-\d|\d"
        Set pMatchs = pReg.Execute(CellText)
        If pMatchs.Count <> 0& Then
            Set pMatch = pMatchs.Item(0&)
            GetNumberAfterText = CDbl(VBA.Mid$(CellText, pMatch.FirstIndex + 1&))
        Else
            Err.Raise 13&
        End If
    End Function

    Всего записей: 750 | Зарегистр. 14-12-2005 | Отправлено: 14:52 26-03-2007 | Исправлено: AndVGri, 14:55 26-03-2007
    Oleg24

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Дело в том что я вообще не знаю VBA. Текст во всех ячейках одинаков, а цифра разная. Все находится в одном столбце начиная с A1 и до 10000. Если можно дайте код не в процедуре или функции.

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Oleg24
    А Вы уверены, что задаёте вопрос в нужном разделе форума? Вам тогда сюда: http://forum.ru-board.com/topic.cgi?forum=5&topic=19106&start=1700#lt .
    Если у Вас одинаковый текст перед числом, допустим "текст" - 5 символов, то формула будет:
    =ЗНАЧЕН(ЗАМЕНИТЬ(A1;1;5;""))

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



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Здрайствуйте. Помогите пожалуйста написать макрос который мог би заменять ошибки ДЕЛ/0 на листе формулу ЕСЛИ, чтоб вместо ошибки отображать 0. Не хочется вручну менять формулы.

    Всего записей: 185 | Зарегистр. 22-09-2003 | Отправлено: 17:07 26-03-2007 | Исправлено: hackman, 17:08 26-03-2007
    Oleg24

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Для одной ячейки.  А мне для столбца нужно и средствами VBA.

    Всего записей: 5 | Зарегистр. 26-03-2007 | Отправлено: 17:14 26-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    hackman
     
    Public Sub AddIf()
        Const cFormulaCol As Long = 1&
        Dim i As Long, vFormula As String
        Dim vFirst As Long, vLast As Long
         
        vFirst = ActiveSheet.UsedRange.Row
        vLast = vFirst + ActiveSheet.UsedRange.Rows.Count - 1&
         
        For i = vFirst To vLast
            vFormula = Trim$(Cells(i, cFormulaCol).Formula)
            If Mid$(vFormula, 1&, 1&) = "=" Then
                vFormula = Mid$(vFormula, 2&)
                vFormula = "=IF(ISERROR(" & vFormula & "),0," & vFormula & ")"
                Cells(i, cFormulaCol).Formula = vFormula
            End If
        Next i
    End Sub
     
     
    Добавлено:
    Oleg24 см.

    Цитата:
    "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.


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



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    формула работает только в столбцеA
     
    поетому  
    я написал так Public Sub AddIf()
        Dim cFormulaCol As Integer
        Dim i As Long, vFormula As String
        Dim vFirst As Long, vLast As Long
         
        For cFormulaCol = 1 To 256
         
        vFirst = ActiveSheet.UsedRange.Row
        vLast = vFirst + ActiveSheet.UsedRange.Rows.Count - 1&
         
        For i = vFirst To vLast
            vFormula = Trim$(Cells(i, cFormulaCol).Formula)
            If Mid$(vFormula, 1&, 1&) = "=" Then
                vFormula = Mid$(vFormula, 2&)
                vFormula = "=IF(ISERROR(" & vFormula & "),0," & vFormula & ")"
                Cells(i, cFormulaCol).Formula = vFormula
            End If
        Next i
        Next cFormulaCol
    End Sub

    Всего записей: 185 | Зарегистр. 22-09-2003 | Отправлено: 18:06 26-03-2007
    filmax



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть закрытый файл с:\1.xls
    Открыт 2.xls.  
    Как в макросе прописать копирование ячейки из 1.xls в 2.xls, не открывая 1.xls?
     
    Итого: Как получить значения в VBA из закрытой рабочей книги?


    ----------
    "Лилия гнилая пахнет хуже, чем сорная трава в навозной луже"

    Всего записей: 220 | Зарегистр. 12-10-2002 | Отправлено: 18:11 26-03-2007
    AndVGri

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    filmax
    Вопрос, конечно, интересный
     
    Как вариант:
        Cells(5, 1).Formula = "='D:\Documents\[1.xls]Лист1'!A5"
        Debug.Print Cells(5, 1).Value
     
     
    Добавлено:
    hackman
    Это был только пример. Диапазон столбцов можно получить из того же UsedRange
    Начальный Activesheet.UsedRange.Column,
    конечный Activesheet.UsedRange.Columns.Count + Activesheet.UsedRange.Column - 1&

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

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    filmax
     
    strArg = "'" & strPath & "[" & strFileName & "]" & strSheetName & "'!" & _
                Range(strCellRef)(1).Address(ReferenceStyle:=xlR1C1)
    dYourValue= ExecuteExcel4Macro(strArg)

    Всего записей: 1271 | Зарегистр. 26-12-2002 | Отправлено: 21:02 26-03-2007 | Исправлено: Olive77, 21:04 26-03-2007
    kiVAR

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте. Помогите пожалуйста. нужен макрос. например:
    С1=теущее значениеС1+А1-В1
    и так для всех ячеек в калонках С, А и В
    Кто занет как ето делать помогите чайнику, плз.

    Всего записей: 10 | Зарегистр. 26-03-2007 | Отправлено: 21:29 26-03-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