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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)

Модерирует : ShIvADeSt

ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

   

ShIvADeSt



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

 
 
Обсуждаем вопросы только по Excel VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Excel, не относящиеся к программированию, задаем в теме Excel FAQ

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях Excel
  • Описание Microsoft Excel File Format (eng.)
     
    Рекомендации:
    Если у Вас есть проблема, не решаемая стандартными средствами 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.
  • Приемы, хитрости, трюки и нюансы работы в Microsoft Excel - сайт "Планета Excel", целиком посвященный Excel и всему, что с ним связано.
  • Microsoft Excel: Таблицы и VBA. Справочник. Вопросы и Ответы. Советы. Примеры.  
     
    Родственные топики:
  • Вопросы по работе с MS Excel - Excel FAQ - часть 1, часть 2, часть 3
  • Технические проблемы с MS Office 2003 или Office XP.
  • Word VBA все вопросы по Word VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы:
    Форма-заставка
    Как запустить макрос при изменении положения курсора или значения ячейки
  • Пример 1
  • Пример 2
  • Пример 3 (проверка области)
  • Пример 4
  • Пример 5
    Зацикливание в функции Change или SelectionChange
     
    Ранжирование без пробелов (макрос включает функции сортировки массива и удаления дубликатов, работает и в Excel 2007)
  • под Office 97
     
    Добавление в главное меню своего пункта, ассоциированного с макросом
    Создание ярлыка на рабочем столе
    Снятие защиты листа при забытом пароле
    Смена раскладки клавиатуры
    Скролл формы колесом прокрутки мыши
    Оптимизация кода по быстродействию использованием массивов
    Найти "чужое" окно и нажать в нем кнопку (вписать текст в текстовое поле)
    Работа с UNICODE-символами в VBA: запись, чтение из ячейки, перевод в ASС и обратно
    Как программно подключить дополнительные библиотеки (например, "Microsoft Scripting Runtime" или "Microsoft ActiveX Data Objects 2.8 Library) через References

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:58 23-04-2007 | Исправлено: JekG, 22:32 10-01-2010
    VitFONAREV

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

    Всего записей: 4 | Зарегистр. 06-11-2008 | Отправлено: 18:12 06-11-2008
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    VitFONAREV
    Попрбуй  
    http://vbnet.mvps.org/index.html?code/fileapi/filesearchinfo.htm
    http://vbnet.mvps.org/index.html?code/shell/propertypage.htm
    http://discussion.autodesk.com/forums/thread.jspa?threadID=577959&tstart=0

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 21:14 06-11-2008
    Solenaja



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите модифицировать, а то что-то не получается

    Код:
    Sub searching2()
    Dim FirstRow&, LastRow&
    FirstRow = ActiveWorkbook.ActiveSheet.UsedRange.Row
    LastRow = FirstRow + ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count - 1
    r = 1 'Номер строки, с которой начнется запись вычленных строк в другом листе.
    'Finish = LastRow() 'Если опустить параметры, то функция посчитает непустые строки в   первом столбце на активном листе, активной рабочей книги.
    For i = FirstRow To LastRow
       If Left(Cells(i, 1), 3) = "Упр" Then 'Находим строку, начинающуюся с "Упр"
       If Left(Cells(i + 1, 1), 2) = "Не" Then 'Находим   строку, начинающуюся с "Не"
          'Добавляем вычлененные строки на лист "ИмяЛиста"
           Sheets("Лист2").Cells(r, 1) = Cells(i, 1)
           ' с - № колонки в которую делается запись
           Sheets("Лист2").Cells(r + 1, 1) = Cells(i + 1, 1)
           r = r + 2
          End If
       End If
    Next i
    End Sub

     
    В данном случае находим в столбце ячеку начинающ с "Упр" и следующую за ней ниже начинающуюся с "Не" и записываем на Лист2
     
    Нужно модифицировать: находим ячеку в столбце начинающуюся с "Упр" и следующую за ней начинающуюся с "Не", а также все следущие ниже ячейки пока не найдем ячейку начинающуюся с "Бух" и всё что идёт ниже её (т.е. "Бух" и ниже отсекается), до опять найденных ячеек с "Упр" и "Не" ..., и записываем на Лист2
     
    заранее спасибо!!!

    ----------
    Могу помочь, но только своими знаниями и ...

    Всего записей: 4246 | Зарегистр. 02-09-2001 | Отправлено: 12:21 07-11-2008 | Исправлено: Solenaja, 12:22 07-11-2008
    nick7inc



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

    Цитата:
    а разве можно формулой выделить конкретное число(числа) из диапозона, подподающие под условия?  

    Что-то я вас не понял.... Условное форматирование распространяется на ячейку целиком, то есть нельзя покрасить в ячейке одну цифру из нескольких, можно только все.

    Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 17:34 07-11-2008
    CEMEH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вопрос
     
    private sub label1_clic
    открыть файл(путь до файла) приложением, которое используется по умолчанию для файлов этого типа
    end sub

    Всего записей: 237 | Зарегистр. 17-09-2006 | Отправлено: 12:16 08-11-2008
    dex_2005



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    кто подскажет как вытаскивать название диаграммы??? для дальнейшего ее использования  в программе?

    Всего записей: 49 | Зарегистр. 07-03-2008 | Отправлено: 10:35 09-11-2008
    freimanis

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

    Цитата:
    кто подскажет как вытаскивать название диаграммы???

    ActiveChart.ChartTitle.Characters.Text
     
    Добавлено:

    Цитата:
    вопрос  
     
    private sub label1_clic  
    открыть файл(путь до файла) приложением, которое используется по умолчанию для файлов этого типа  
    end sub

    Тынц

    Всего записей: 35 | Зарегистр. 09-10-2007 | Отправлено: 15:32 09-11-2008
    VitFONAREV

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

    Всего записей: 4 | Зарегистр. 06-11-2008 | Отправлено: 13:28 10-11-2008
    Tivalta

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите решить задачу на VBA  
    Есть 30 combobox  в них внесены значения(8, В, о/б) нужно подсчитать значения только 8, но не как-8+8+8+8+8........, а как 1+1+1+1+1 (8-количество отработанных дней)

    Всего записей: 2 | Зарегистр. 10-11-2008 | Отправлено: 23:33 10-11-2008
    YuGo

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

    Цитата:
    YuGo
    if Range(sAddress).value like "*" & sText & "*" then
        ...
    end if

     
    Olivet77 ты супер, а на конкретном примере возможно? Диапозон ячеек А1:А10 содержит определенный текст, если в них соответственно встречается фрагмент текста L21, то содержимое соответствующих ячеек B1:B10 накапливать (суммировать) в ячейке C1.
    THANKS!!!

    Всего записей: 110 | Зарегистр. 06-09-2003 | Отправлено: 00:24 11-11-2008
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Tivalta
    Вообще-то я не помогаю делать домашние задания. Это ведь не мне надо учиться и оценки получать...  
    Ну, в виде исключения. Насколько я понял задачу:  
     

    Код:
    Private Sub CommandButton1_Click()  
     
        Dim cCont As Control  
        Dim X As Integer  
     
        X = 0  
     
        For Each cCont In Me.Controls  
           If TypeName(cCont) = "ComboBox" Then  
              If cCont.Text = "8" Then  
                 X = X + 1  
              End If  
           End If  
        Next cCont  
     
    End Sub

    http://www.ozgrid.com/VBA/control-loop.htm

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 03:54 11-11-2008 | Исправлено: dneprcomp, 03:54 11-11-2008
    nopoxz

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

    Всего записей: 38 | Зарегистр. 02-07-2008 | Отправлено: 11:01 12-11-2008
    dex_2005



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

    Код:
    1: If Sheets("Лист1").Range("A" & j) <> "" Then
    j = j + 1
    GoTo 1
    Else
    s = 0
    s = j -2
    ActiveCell.Value = "=AVERAGE(Архив!R[-1]C:R[s]C)"
     

    что здесь неправильно??? требуется подсчитать СРЗНАЧ столбца (от С2 до С s), значение s смотреть выше

    Всего записей: 49 | Зарегистр. 07-03-2008 | Отправлено: 13:08 12-11-2008
    VitFONAREV

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ подскажите пожалуста. Может кто в курсе.  
    программа использует библиотекy AutoCAD/ObjectDBX Common 17.0 Type Library
    VBA AUTOCAD работает в VBA EXCEL выдает ошибку типа- Не нейден указанный модуль.  Библиотеки везде подключены. Очень еужно запустить ее по Excel
     
     
    Sub NAMFIDWG()
    Dim fan As String
    Dim avt As String
     
    fan = "c:\111.dwg"
    Dim MainDoc As AXDBLib.AxDbDocument
    Set MainDoc = New AXDBLib.AxDbDocument
    MainDoc.Open (fan)
     
    avt = MainDoc.SummaryInfo.LastSavedBy
    MsgBox (avt)
     
    Set MainDoc = Nothing
     
    End Sub

    Всего записей: 4 | Зарегистр. 06-11-2008 | Отправлено: 14:18 12-11-2008
    YuriySamorodov

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

    Всего записей: 19 | Зарегистр. 28-01-2007 | Отправлено: 22:48 12-11-2008
    q1wed



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

    Цитата:
    не смог выделить функции, которые отвечают за удаление

    сюда

    Всего записей: 208 | Зарегистр. 02-03-2007 | Отправлено: 07:17 13-11-2008
    SERGE_BLIZNUK

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    YuriySamorodov
    удалить строку R целиком:
      Rows(r).Delete
    или
      Cells(r, xxxx).EntireRow.Delete
     
    ну вот, ПРИМЕРНО так:
    Код:
     
        lastrow = Cells(ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count, COL).End(xlUp).Row  
         ' где col - номер нужного столбца  
        Application.ScreenUpdating = False  
        For r = LastRow To 2 Step -1  
              If Cells(r, 1) = Cells(r-1, 1) Then
                      Cells(r, 1).EntireRow.Delete
              end if
        Next r  
        Application.ScreenUpdating = True

     
    p.s. код непроверен! написал так, от фонаря...

    Всего записей: 2014 | Зарегистр. 12-09-2002 | Отправлено: 09:37 13-11-2008
    Solenaja



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

    ----------
    Могу помочь, но только своими знаниями и ...

    Всего записей: 4246 | Зарегистр. 02-09-2001 | Отправлено: 15:12 13-11-2008
    SAS888

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Solenaja
    Если у Вас на листе 1 структура строго соблюдается, т.е.  за строками, начинающимися с "Упр" и следующий "Не" обязательно будет присутствовать строка, начинающаяся с "Бух", то макрос очень простой:

    Код:
    Sub Main()
     
        Dim i As Long, j As Long
        Sheets(1).Activate
        With Sheets(2)
            .Cells.ClearContents
            For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
                If Left(Cells(i, "A"), 3) = "Упр" Then If Left(Cells(i + 1, "A"), 2) = "Не" Then a = i
                If Left(Cells(i, "A"), 3) = "Бух" Then _
                    Rows(a & ":" & i).Copy .Cells(.Cells(Rows.Count, "A").End(xlUp).Row + 2, "A")
            Next
        End With
     
    End Sub

    А если не так, то что в каком случае делать? Уточните.

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 09:18 14-11-2008
    Solenaja



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    SAS888
    в том то и дело, что Бух не обязательно идёт за Упр и Не
    структура примерно такая Подробнее...
     
    если другими словами перефразировать задачу
    нужно удалить Бух и Не, а все остальное оставить в таком же порядке, скопировать на новый лист, пустые строки от Бух и Не - удалить, т.е. данные в столбце в ячейках должны идти друг за другом

    ----------
    Могу помочь, но только своими знаниями и ...

    Всего записей: 4246 | Зарегистр. 02-09-2001 | Отправлено: 11:47 14-11-2008 | Исправлено: Solenaja, 11:49 14-11-2008
       

    Страницы: 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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 2)
    ShIvADeSt (11-01-2010 10:17): http://forum.ru-board.com/topic.cgi?forum=33&topic=10903


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru