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

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



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте подскажите пожалуйста. Можно ли создать макрос или надстройку для перевода текста с одного языка на дугой в excel?
    Нашел на просторах интернета два макроса. Вот только один не переводит как только нажимаю транслит тот надписи исчезают. А второй как я понял больше не работает из за изменений в получении апи ключа у гоогла.  
    Function Translate$(ByVal TextToBeTranslated$, ByVal resultLanguageCode$, _
                        Optional ByVal sourceLanguageCode$ = "")
        ' переводит текст TextToBeTranslated$ с языка sourceLanguageCode$
        ' на язык resultLanguageCode$, используя сервис переводов Google Translate
        Application.Volatile True
        Set ADOStream = CreateObject("ADODB.Stream")
        With ADOStream
            .Charset = "utf-8": .Mode = 3: .Type = 2: .Open
            .WriteText TextToBeTranslated: .Flush: .Position = 0
            .Type = 1: .Read 3: ByteArrayToEncode = .Read(): .Close
        End With
     
        For i = 0 To UBound(ByteArrayToEncode)
            iAsc = ByteArrayToEncode(i)
            Select Case iAsc    ' переводим текст в кодировку, понятную Google
                Case 32: sTemp$ = "+"    'space
                Case 48 To 57, 65 To 90, 97 To 122: sTemp$ = Chr(ByteArrayToEncode(i))
                Case Else: sTemp$ = "%" & Hex(iAsc)     'Chr(iAsc)
            End Select
            txt$ = txt$ & sTemp$
        Next
     
        ' формируем ссылку, по которой Google выдаст нам файл с переводом
        URL$ = "http://translate.google.com.ua/translate_a/t?client=json&text=" & _
               txt$ & "&hl=" & resultLanguageCode$ & "&sl=" & sourceLanguageCode$
     
        Set XMLHTTP = CreateObject("Microsoft.XMLHTTP")    ' скачиваем файл
        XMLHTTP.Open "GET", Replace(URL$, "\", "/"), "False": XMLHTTP.send
     
        If XMLHTTP.statustext = "OK" Then
            LocalPath$ = Environ("TMP") & "\google.txt"
            With ADOStream    ' перекодировка файла
                .Type = 1: .Open: .Write XMLHTTP.responseBody
                .SaveToFile LocalPath$, 2
                .Close: .Type = 2: .Charset = "utf-8": .Open:
                .LoadFromFile LocalPath$    ' загружаем данные из файла
                Translate$ = .ReadText   ' считываем текст файла в переменную Translate$
            End With
     
            On Error Resume Next    ' вырезаем нужный текст из ответа
            Translate$ = Split(Translate$, """trans"":""")(1)
            Translate$ = Split(Translate$, """,""orig")(0)
            Translate$ = Replace(Translate$, "quot;", Chr(39))
            If Translate$ = " null, " Then Translate$ = "Не переведено"
        End If
        Set XMLHTTP = Nothing: Set ADOStream = Nothing
    End Function
     
    Sub Translate()
    Dim cell1 as Range, cell2 As Range
    Dim i as Long, Langs As Long
     
    Langs = 3 'количество языков перевода, включая русский
     
        For Each cell1 In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants)
            For Each cell2 In Worksheets("Словарь").Cells.SpecialCells(xlCellTypeConstants)
                If cell1.Value = cell2.Value Then
                    i = cell2.Column
                    If i = Langs Then i = 1 Else i = i + 1
                    cell1.Value = Worksheets("Словарь").Cells(cell2.Row, i).Value
                    GoTo 1
                End If
            Next cell2
    1:   Next cell1
     
    End Sub

    Всего записей: 226 | Зарегистр. 18-03-2009 | Отправлено: 19:21 02-06-2015 | Исправлено: LIL_JAN, 22:20 02-06-2015
    cabron666



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте,
    Есть таблица с данными типа:
    Products
    I3 5005U
    AMD Sempron
    Products
    RAM G.Skill
     
    Нужно найти повторяющие продукты и проигнорировать слово "Products" нашел код, который удаляет дупликаты, но нужно внести некоторые изменения
    -Вместо того, чтобы удалять, ножно показать в окне повторяющиее значение
    -При нажатии на кнопку, возможно ли поставить курсор в место, где имеется повторяющиее значение
    Спасибо
     

    Код:
    Sub repetidos()
    'Opcional
    'Application.ScreenUpdating = False
    Range("A2").Select
    Do While Not IsEmpty(ActiveCell)
        x = WorksheetFunction.CountIf(Range("A:A"), ActiveCell)
        If x > 1 Then
            ActiveCell.EntireRow.Delete
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Loop
    Range("A1").Select
    'Opcional
    'Application.ScreenUpdating = True
    End Sub


    ----------
    Жизнь - это рояль, клавиша белая, клавиша черная, крышка...

    Всего записей: 1342 | Зарегистр. 03-02-2002 | Отправлено: 14:54 05-06-2015
    Fsp050

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста, можно ли себе так облегчить задачу. В экселе есть функция мопред.
    которая вычисляет  определитель матрицы. У меня матрица равно 0.  
    вот тут в экселе это видно.
    http://rusfolder.com/43773513
    тут как бы высчитано для нескольких матриц.
    Вопрос , можно ли на vba написать скрипт, который будет удалять переменные пока не получит . что определитель матрицы  равен единице. Например есть 20 переменных и лишь после удаления 5-ой определитель матрицы стал равен больше нуля или меньше.Но только удаленную переменную или переменные потом снова восстановить и пометить её желтым цветом.

    Всего записей: 361 | Зарегистр. 02-04-2011 | Отправлено: 18:56 05-06-2015
    Alexey87

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые, форумчане!
    Помогите, пожалуйста, решить следующую задачку:
    есть файл, в нем более 70 000 строк данных
    нужно удалить данные вида "программ высшего образования" и последующие строки, соответствующие номеру записи из столбца А
    в результате данной операции должны остаться все строки с данными, соответствующими записям 2 и 3 из фрагмента файла

    Всего записей: 657 | Зарегистр. 27-01-2008 | Отправлено: 13:55 11-06-2015
    Winand



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Alexey87 а фильтром вы тут не справитесь?.) Хотя, честно говоря, не до конца понял, что значит "удалить данные вида ... и последующие строки".

    Всего записей: 57 | Зарегистр. 20-01-2008 | Отправлено: 20:23 11-06-2015
    RIP



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спецы, помогите, плиз, правильно решить следующую задачку в Microsoft Excel:
     
    1.  
    сравнить таблицу "D" и таблицу "A"
    одинаковые элементы таблиц удалить
    в результате останутся элементы в таблице "A"
    сохранить её как таблицу "E"
     
    2.
    сравнить таблицу "E" и таблицу "B"
    одинаковые элементы таблиц сохранить как таблицу "F"
    несовпадающие элементы таблиц сохранить как таблицу "G"
     
    3.
    сравнить таблицу "E" и таблицу "C"
    несовпадающие элементы таблиц удалить
    одинаковые элементы таблиц сохранить как таблицу "H"
     
    http://rghost.ru/7FLfHMLrZ
     
    Заранее благодарю!!!

    Всего записей: 1642 | Зарегистр. 06-03-2002 | Отправлено: 22:29 11-06-2015
    Alexey87

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

    Цитата:
    удалить данные вида ... и последующие строки

    означает, следующее:
    каждая запись - 1,2,3,4 (и таких более 20000) - занимает более одной ячейки (например, 1 - с А3 по А5, 2 - с А6 по А10 и т.д.)
    так вот и нужно, чтобы при удалении данных вида "программ высшего образования" и удалялись строки соответствующего диапозона
    для фрагмента из файла должны остаться данные диапозона А6:АС15

    Всего записей: 657 | Зарегистр. 27-01-2008 | Отправлено: 10:37 12-06-2015
    DmitriC



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

    Всего записей: 706 | Зарегистр. 15-12-2005 | Отправлено: 08:28 22-07-2015 | Исправлено: DmitriC, 10:13 22-07-2015
    DJMC



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Сказали что можно это сделать через VBA поиск в столбце не по одном значению, а по группе?  
    к примеру есть столбец где идут цифры:  
    1  
    2  
    3  
    3  
    1  
    2  
    3  
    1  
    2  
    3  
    3  
    2  
    1  
     
    и могу ли я сделать выборку не по одной тройке, а чтобы он искал комбинацию из двух троек подряд?
     
    кто может взяться за это? скину тогда файл.

    Всего записей: 12254 | Зарегистр. 26-09-2005 | Отправлено: 17:04 31-07-2015
    idiMAN

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DJMC
    Если формат именно такой, то используй при поиске для двух троек следующую строку
    Код:
    3^p3

    В данном случае ^p - знак абзаца

    Всего записей: 466 | Зарегистр. 05-05-2003 | Отправлено: 20:18 31-07-2015
    akellaks



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день помогите кто чем может
    Мне нужно из сетевого сайта вытащить несколько таблиц для анализа(периодичность 2 раза в месяц)
    средствами excel у меня не получилось через Данные - из интернета и дальше вбиваем сайт с которого нужно получить данные
    все получает отлично, но проблема, мне нужно чтоб эти таблица автоматически обновлялись, и все бы ничего еслиб не авторизация на сайте, потому что требуется ввести логин и пароль и при обновлении талиц он не может обновится так как не сохраняет логина и пароля
    как то можно сделать так чтоб логин и пароль автоматически вводились?? или чтоб их гденибудь прописать и все таблицы обновлялись
     
     
    и еще такой вопрос можно ли в Microsoft outlook 2010 как то сделать так чтоб в письмо автоматически вставлялось приветствие и ФИО человека которому пишу? как это было сделано в the bat

    Всего записей: 66 | Зарегистр. 20-07-2008 | Отправлено: 13:57 09-09-2015
    idiMAN

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akellaks
    Если на данном сайте позволяет используемый тип авторизации, то логин и пароль можно прописать внутрь ссылки

    Всего записей: 466 | Зарегистр. 05-05-2003 | Отправлено: 14:20 09-09-2015
    akellaks



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

    Всего записей: 66 | Зарегистр. 20-07-2008 | Отправлено: 15:49 09-09-2015
    idiMAN

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

    Всего записей: 466 | Зарегистр. 05-05-2003 | Отправлено: 16:04 09-09-2015
    akellaks



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    idiMAN
    http://сетевая ip:8080/x4/index.php?ac=oniTei4I2Dg151u237&obj=CorpStat&natid=43 это ссылка на таблицу
    на остальные страницы меняется только цифра в конце
    http://сетевая ip:8080/x4/index.php здесь авторизация

    Всего записей: 66 | Зарегистр. 20-07-2008 | Отправлено: 16:25 09-09-2015 | Исправлено: akellaks, 09:54 10-09-2015
    idiMAN

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

    Всего записей: 466 | Зарегистр. 05-05-2003 | Отправлено: 18:45 09-09-2015
    akellaks



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

    Всего записей: 66 | Зарегистр. 20-07-2008 | Отправлено: 19:55 09-09-2015
    akellaks



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Мне нужно вытащить таблицу с сайта в данном файле указана страница профиль, это для примера, пароль там установлен временный
    скрип работает и просто авторизируется на сайте, но проблема что через получить данные из интернета, эта авторизация не передается
    и если сам ввел логин и пароль то все работает отлично, а авторизация от макроса не передается
    можете подсказать как можно авторизацию передать в получить данные из интернета
     
    или где можно взять скрипт на получение данных из таблицы на сайте с авторизацией
     
    сайт в данном скрипте чисто для примера, таблиц там нет
    у меня сайт внутрисетевой с таблицами на разных страницах
     
    пожалуйста можете дать совет или подсказку
    вот что у меня получилось
    https://yadi.sk/d/kYdz4HBuiyj26

    Всего записей: 66 | Зарегистр. 20-07-2008 | Отправлено: 06:58 10-09-2015
    idiMAN

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akellaks
    Как вариант, можно попробовать выкачать нужную таблицу с помощью wget или curl (они позволяют задать логин и пароль), а затем уже цеплять её как обычную локальную таблицу.
     
    А по поводу авторизации, можно попробовать так:
    http://195.162.32.8:8080/x4/index.php?username=твой_логин&password=твой_пароль
    Только слова "username" и "password" в твоём случае могут быть другими.  
     
    Вообще посмотри что передаётся между твоим компьютером и данным сайтом с помощью fidler или хотя бы нажав "F12" и далее "Сеть" в IE11 или "Ctrl+Shift+I" -> "Network" в Google Chrome

    Всего записей: 466 | Зарегистр. 05-05-2003 | Отправлено: 07:41 10-09-2015
    Alex_Piggy

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброе время, akellaks
    Залогинились, а теперь ищете таблицу и пробуете вставить через Clipboard. Что-то вроде такого (если URL - в переменной MyURL2, а таблица имеет id TABLEID)

    Код:
     
     MyBrowser.Navigate MyURL2
     Do: DoEvents :Loop Until MyBrowser.readyState = READYSTATE_COMPLETE
     Set HTMLDoc = MyBrowser.document
     Set oTable = HTMLDoc.all.Item("TABLEID")
     Set Clip = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") ' Или "Set Clip = New DataObject"
     Clip.SetText "<html>" & oTable.outerHTML & "</html>"
     Clip.PutInClipboard
     ActiveSheet.Range("A1").Select
     ActiveSheet.PasteSpecial
     

    Таблицу без id можно искать по getElementsByTagName("table"). Возьмет первую из таблиц -  
    Set oTable = HTMLDoc.getElementsByTagName("table")(0)

    Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 08:23 10-09-2015
    Открыть новую тему     Написать ответ в эту тему

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