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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 201 202 203 204 205 206 207 208 209 210 211 212 213

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



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

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

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Предыдущие ветки топика: Часть 1, Часть 2
 
Информация общего характера:
  • Список соответствия имен функций в английской и русской версиях 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
     
    Перечень основных ColorIndex'ов из MSDN
     

    Смежные темы:
    Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
    Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
    Программы » Word FAQ | Excel FAQ | Access FAQ
    Прикладное программирование » Word VBA | Access VBA  
    Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
    Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
    Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
    Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007

  • Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:16 11-01-2010 | Исправлено: ALeXkRU, 16:42 03-08-2021
    VicKos

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

    Цитата:
    неужели никто не знает как реализовать это(

    Наверное, можно как то и в Excel VBA реализовать, но я в этом не силен.
    Как вариант - Punto Switcher (переключатель раскладки клавиатуры), там регистр выделенного текста инвертируется клавишами Alt + Break (строчные в ПРОПИСНЫЕ и наоборот).

    Всего записей: 44 | Зарегистр. 28-07-2010 | Отправлено: 20:14 11-01-2011
    Dmitriy05



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ferias
    Проверил твой код на работе (XP SP3/Excel 2003 SP3) и должен признаться в немного неверной информации:
     
    Когда выделяю и копирую участок

    Код:
     
    ActiveSheet.Range("A2:D3").Select  
    Selection.Copy
     

     
    Бегающие по периметру полоски присутствуют  
     
    А если копировать используя код в соообщении #2 полоски есть, но уже потолще и более заметнее.
     
    Кажеться, мне проще привыкнуть к такому обрамлению чем пыттаься его подогнать.
    Поэтому позволю себе закрыть данный вопрос.
    Еще раз спасибо.
     
    vk171281
    Не поможет - этим мы отменим режим копирования.

    Всего записей: 2514 | Зарегистр. 03-08-2005 | Отправлено: 20:42 11-01-2011
    vk171281

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

    Цитата:
    vk171281  
    Не поможет - этим мы отменим режим копирования.

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

    Всего записей: 2 | Зарегистр. 11-01-2011 | Отправлено: 23:01 11-01-2011
    MYSHKAR

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ,очень нужна помощь с задачками.помогите пожалуйста
     
    1.Даны  Целочисленные м, n и матрица (м, n). Вычислите количество строк, у которых есть нулевые элементы.
    2.Даны Целое число n и квадратная матрица (n, n). Подсчитайте среднее число четных элементов, которые помещены
    1) выше чем диагональ  
    2) ниже чем диагональ  
    3) на диагонали  
    Создайте на форме управление listBox, который позволяет пользователю выбирать один или более элементов задачи. (Расширенное свойство Multiselected=2 набора). Ваша программа должна выполнить только выбранные пункты.

    Всего записей: 3 | Зарегистр. 11-01-2011 | Отправлено: 23:16 11-01-2011
    lihoru

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите пожалуйста!  
     
    У меня есть большой документ EXCEL, в котором много листов. Мне нужно автоматически разбить его на несколько маленьких документов EXCEL. В каждом документе должны оказаться определенные листы. Как это сделать?

    Всего записей: 1 | Зарегистр. 12-01-2011 | Отправлено: 13:14 12-01-2011
    ZlydenGL



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

    Код:
    For Each WS In Thisworkbook.WOrksheets
         Set NewWB = Workbooks.add
         WS.Copy After:=NewWB.Worksheets(1)
         NewWB.SaveAs Thisworkbook.Path & "\" & ws.name & Thisworkbook.Name
         NewWB.Close
    Next WS

    Код писал навскидку и без проверки, но суть ИМХО ясна Главная его проблема - "портится" содержимое буфера обмена, и вообще им (буфером) в процессе работы этого скрипта пользоваться нельзя ВООБЩЕ. Ну или не рекомендуется как минимум
     
    Добавлено:
    MYSHKAR, явная лабораторка?  
     
    Первый пункт явно совершенно необязательно использовать VBA, можно обойтись просто формулами - добавляем еще один столбец, который проверяет через CountIF() наличие нулевых элементов и выводит 1 или 0, а потом тупо суммируем этот столбец
     
    Под второе уже нужен VBA (хотя тоже можно формулами обойтись, но изврат). Надо просто помнить, что если I - это горизонтальная координата ячейки матрицы, а J - вертикальная, то координаты ячеек горизонтали всегда будут задаваться формулой Cells(K,K), где K варьируется от 1 до меньшей из размерностей, "верх" матрицы задается формулой Cells(I,J), где I всегда БОЛЬШЕ J, а "низ" соответственно где I МЕНЬШЕ J.

    ----------
    Переработал: втыкая аккумулятор в шуруповерт пытаешься передёрнуть затвор

    Всего записей: 4264 | Зарегистр. 22-06-2002 | Отправлено: 14:27 12-01-2011
    Dmitriy05



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

    Всего записей: 2514 | Зарегистр. 03-08-2005 | Отправлено: 20:41 12-01-2011
    MYSHKAR

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ZlydenGL,спасибо щас попробую!

    Всего записей: 3 | Зарегистр. 11-01-2011 | Отправлено: 23:45 12-01-2011
    Ole Solo



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Столкнулся с проблемой и не могу понять как ее решить.
    Помогите пожалуйста
     
    Есть скрипт, который по циклу обращается к функции, обрабатывает инфу(получает координаты) и вставляет в ячейки. Все отлично работает если инфы не более 10 строк, как только более 10 строк, вываливается ошибка
    Runtime error 5 invalid procedure or argument
     
    Ругается на строку в функции GeoCode

    Код:
     
    cpoint = Mid(sHTML, lTopicstart + 13, lTopicend - lTopicstart - 13)
     

     
    Ниже привожу код.
     

    Код:
     
    Public Function GeoCode(sLocationData As String) As String
     
    Dim oHttp As Object
    Dim sURL As String, sHTML As String
    Dim status As String, lat As String, lon As String
    Dim cpoint As String
    Dim lTopicstart As Long, lTopicend As Long
     
    sURL = "http://maps.google.com/maps/geo?q=" & sLocationData & "&output=xml&oe=utf8&sensor=false"
     
    '// Create an XMLHTTP object and add some error trapping
    On Error Resume Next
    Set oHttp = CreateObject("MSXML2.ServerXMLHTTP")
    If Err.Number <> 0 Then
    Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
    MsgBox "Error 0 has occured while creating a MSXML.XMLHTTPRequest object"
    End If
    On Error GoTo 0
    If oHttp Is Nothing Then
    MsgBox "For some reason I wasn’t able to make a MSXML2.XMLHTTP object"
    Exit Function
    End If
     
    '//Open the URL in browser object
    oHttp.Open "GET", sURL, False
    oHttp.Send
    sHTML = oHttp.ResponseText
    Set oHttp = Nothing
     
    '// coordinates
    lTopicstart = InStr(1, sHTML, "<coordinates>", vbTextCompare)
    lTopicend = InStr(1, sHTML, "</coordinates>", vbTextCompare)
    cpoint = Mid(sHTML, lTopicstart + 13, lTopicend - lTopicstart - 13)
     
    GeoCode = cpoint
     
    Exit Function
    End Function
     
     
    Sub geocodeAllRows()
        Dim r As Integer
        For r = FirstDataRowTo LastDataRow()
            Cells(r, "A").Value = GeoCode(Cells(r, "H").Value & ", " & Cells(r, "G").Value & " " & Cells(r, "F").Value & ", " & Cells(r, "D").Value)
        Next r
    End Sub
     

    Всего записей: 338 | Зарегистр. 20-01-2003 | Отправлено: 13:44 14-01-2011
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ole Solo
    Похоже что в Mid пытаются использовать отрицательное число и/или Mid пробует работать за пределами длины стринга. Проверь в дебаге в момент ошибки чему равны переменные, вычисляемые значения и как это все соотносится с длиной стринга.

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 21:03 14-01-2011 | Исправлено: dneprcomp, 21:08 14-01-2011
    Ole Solo



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    во время ошибки
    lTopicstart = 0
    lTopicend = 0
     
    неужели не успевает вычислить?
    попробывал поставить паузу во время вычислений 250 миллисекунд, вроде работает нормально. но возможно есть более цивилизованое решение?

    Всего записей: 338 | Зарегистр. 20-01-2003 | Отправлено: 23:26 14-01-2011
    dneprcomp



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

    Цитата:
    неужели не успевает вычислить?  

    Дело не в скорости вычисления. Или sHTML пустая, или в стринге отсутствуют искомые теги.

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 00:53 15-01-2011
    Ole Solo



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

    Всего записей: 338 | Зарегистр. 20-01-2003 | Отправлено: 14:16 15-01-2011
    Zhoporez666

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

    Нужна программка или лист Excel с
    формулами для следующей задачи.
    Даны данные:
    дата
    время начала следственного
    действия
    время окончания следственного
    действия
    вид следственного действия
    ФИО злодея
    ФИО сотрудника
    ФИО защитника
    Задача:
    выявление всех пересечений.
    например, чтобы не получалось,
    что один сотрудник проводит
    разные действия в одно и тоже
    время или защитник одновременно
    присутствует при проведении СД у
    разных сотрудников, и т.д.
    Пример листа Excel здесь http://
    ifolder.ru/21321948

    Всего записей: 43 | Зарегистр. 28-03-2006 | Отправлено: 13:52 18-01-2011
    MYSHKAR

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Люди,помогите!!!горю!напишите код к даной проге.
    Для каждой из матриц А(5,5) и В(6,6)измените местоположение элементов на главной и побочной диагонали
    Заранее спасибо!

    Всего записей: 3 | Зарегистр. 11-01-2011 | Отправлено: 21:22 19-01-2011
    lypky



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Салют джентльмены. Тут устроился на новую работу, и в ближайшие пол года мне наверное придется часто парсить различные логи. Придется учить VBA. Хотя надпись в шапке: "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" - отчасти отражала мое отношение к этому вопросу еще месяц назад.
     
    Суть такая. Ручками я более или менее научился кое что делать в сортировке. Но вот VBA пока ставит в тупик. К примеру:  
    мне нужно отсортировать значения: получится что-то вроде:

    Цитата:
     
    =====>Start working on range Range: [10.87.86.254 - 10.87.86.254]
    =====>Start working on range Range: [10.87.92.254 - 10.87.92.254]
    =====>Start working on range Range: [10.87.95.254 - 10.87.95.254]
    -->Result Collected IPs in range: array(['10.65.207.190', '10.65.207.190'], java.lang.String)
    -->Result Collected IPs in range: array(['10.65.207.62', '10.65.207.62'], java.lang.String)
    -->Result Collected IPs in range: array(['10.65.32.254', '10.65.32.254'], java.lang.String)
     

    нужно понять на какой строке начинает текст "-->Result" и удалить все что выше него.  
     
    Записанный макрос сделал это удаление как то так:

    Код:
    ActiveWindow.SmallScroll Down:=300
        Rows("1:320").Select
        Range("A320").Activate
        Selection.Delete Shift:=xlUp

     
    Какие есть варианты?
    Спасибо всем альтруистам за помощь.

    Всего записей: 699 | Зарегистр. 19-10-2006 | Отправлено: 08:04 21-01-2011
    Kolonit

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Господа, помогите дельным советом, сам я в VBA почти чайник
    В общем составил я вот что:
     

    Код:
    Sub &#207;&#238;&#232;&#241;&#234;_&#226;_&#196;&#232;&#224;&#239;&#224;&#231;&#238;&#237;&#229;()
        Dim i, j, t As Integer
        For i = 4 To 5000
          If Mid(Cells(i, 2), 1, 1) <> "!" Then
              j = 5
              If Cells(i, 2).Value Like "*&#224;)*" Then
                t = i
                Cells(t, j) = Trim(Mid(Cells(i, 2), 3, Len(Cells(i, 2))))
              End If
              If Cells(i, 2).Value Like "*&#225;)*" Then
                Cells(t, j + 1) = Trim(Cells(i, 2))
              End If
              If Cells(i, 2).Value Like "*&#226;)*" Then
                Cells(t, j + 2) = Trim(Cells(i, 2))
              End If
              If Cells(i, 2).Value Like "*&#227;)*" Then
                Cells(t, j + 3) = Trim(Cells(i, 2))
              End If
              If Cells(i, 2).Value Like "*&#228;)*" Then
                Cells(t, j + 4) = Trim(Cells(i, 2))
              End If
              If Cells(i, 2).Value Like "*&#229;)*" Then
                Cells(t, j + 5) = Trim(Cells(i, 2))
              End If
              If Cells(i, 2).Value Like "*&#230;)*" Then
                Cells(t, j + 6) = Trim(Cells(i, 2))
              End If
            End If
          Next
    End Sub

     
    когда в операторе цикла указываю от 4 до 1000 - работает норм, а если, допустим, от 4 до 7500 начинает ругаться, не могу понять почему. Подскажите пож кто в курсе
     
     
     
     
    Добавлено:
    Кривовато код вставился
     
     
    а как здесь принтскрин вставить можно?

    Всего записей: 5 | Зарегистр. 21-03-2008 | Отправлено: 15:22 22-01-2011
    SAS888

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

    Цитата:
    Какие есть варианты?

    Например,так:

    Код:
    Sub Main()
        On Error Resume Next: Rows("1:" & [A:A].Find("-->Result").Row - 1).Delete
    End Sub

    Всего записей: 398 | Зарегистр. 31-10-2007 | Отправлено: 17:24 22-01-2011
    Dmitriy05



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Kolonit
    Выложи Excel-файл.

    Всего записей: 2514 | Зарегистр. 03-08-2005 | Отправлено: 17:25 22-01-2011
    Kolonit

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

    Всего записей: 5 | Зарегистр. 21-03-2008 | Отправлено: 18:48 22-01-2011
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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 201 202 203 204 205 206 207 208 209 210 211 212 213

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Excel VBA (часть 3)


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru