Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 След.
Запрос ajax на интернет сайт через vba, Извлечение данных из интернет страницы, в которой используются java скрипты
 
doober, Огромное спасибо! То что доктор прописал! Это как таблетка от головной боли, выпил голова не болит, но причины не знаешь). Если можно в формате этой темы, пожалуйста, поделитесь профессиональным секретом, как вы пришли к такому решению? Нужно знать JAVA или вы используете что то типа сниффера Fiddler, или и то и другое?  :)  
Запрос ajax на интернет сайт через vba, Извлечение данных из интернет страницы, в которой используются java скрипты
 
Всем привет! Пытаюсь на коленке сделать простенький парсер из Экселя под Электронный магазин Ленинградской области. К примеру, вот адрес страницы закупки https://zakupki.lenreg.ru/ProductRequestGroup/Index/111526 . Нетрудно догадаться, что последние шесть цифр - это по сути номер закупки. Далее встроенным в Эксель MS Query (Не PowerQuery, я все еще на Excel 2007) произвожу загрузку через <Получить внешние данные из Веба>. В целом большую часть информации в таком запросе удается получить, даже с учетом того, что Эксель подключается к сайту через устаревший IE. Но не везде так везет, в других магазинах без поддержки JAVA страница отказывается грузится. Но здесь пока прокатывает. Итак, выяснилось что  MS Query не цепляет два важных для меня поля: <Адрес поставки> и <Ответственное лицо>. При чем в окне предварительного просмотра перед загрузкой IE эти поля отображает, но в выгрузке они отсутствую. В итоге загрузил HTML код страницы в текстовм формете. И вот что обнаружил, информация в этих полях генерируется при загрузке страницы через  ajax запрос. Вот куски HTML кода этих полей:
Скрипт для генерирования <Адрес поставки>, где видно что в нечто похожее на переменную (a) записывается результат запроса ajax, и при некоем ответе на запрос в переменную записывается значение: либо извлеченный из какой то закрытой базы данных Адрес поставки, либо, если там пусто записывается значение  'Адрес не указан' :
Код
<script>
        $.ajax({
            cache: false,
            type: "Get",
            url: "/ProductRequestGroup/GetDeliveryAddress",
            data:  {
                 idGroup: "111526"
            },
            success: function (a) {
                if (a == null || a == "") {
                    $('#DeliveryAddress').val('Адрес не указан');
                }
                else {
                    $('#DeliveryAddress').val(a);
                }
            }
        });
    </script>
И ниже второй скрипт для генерирования поля <Ответственное лицо>. Все построено по логике описаной выше
   
Код
<script>
        $.ajax({
            cache: false,
            type: "Get",
            url: "/ProductRequestGroup/GetResponcibleUser",
            data:  {
                 idGroup: "111526"
            },
            success: function (a) {
                if (a == null || a == "" || a.Data == null || a.Data == "") {
                    $('#ResponcibleUser').val('Ответственное лицо не указано');
                }
                else {
                    $('#ResponcibleUser').val(a.Data);
                }
            }
        });
    </script>
В переменную (a)  записывается ответ на запрос ajax с выгрузкой результата - 'Конкретное ФИО' либо 'Ответственное лицо не указано'. Видно также, что для индексации запрос ajax использует все тот же шестизначный номер <idGroup: "111526">, что указан в гиперссылке - последние 6 цифр. Собственно стоит задача сделать макрос на формирование  запроса и получением результата текстовая строка с записью в переменную, например для адреса доставки - DeliveryAddress, для ФИО - ResponcibleUser. Пытался найти какое нибудь похожее решение в интернете, нашел вот такой пример тыц . Но ничего там не понял, кроме того что используется Get. Прошу помощи уважаемые форумчане!
Извлечение гиперссылки с недопустимыми символами
 
БМВ, спасибо, теперь логика понятна. Сейчас уже пробую.
Извлечение гиперссылки с недопустимыми символами
 
Цитата
написал:
Казалось бы, все давно придумано, но поиск все равно еще "не рулит"
Ну вот никак на вашу статью гугл не давал ссылку в результатах поиска. Всё статьи были о стандартном способе через .Address. Огромное спасибо за материал, как раз описан алгоритм кода если есть символ #. Уже изучаю
Изменено: Excelman - 05.10.2023 16:39:02
Извлечение гиперссылки с недопустимыми символами
 
Разбираюсь с вариантом
Цитата
написал:
MsgBox HL.Address & IIF(HL.SubAddress=""."", "#" & HL.SubAddress )
Тут что то с синтаксисом в части условия iif. Если я верно понял, то здесь проверяется содержит ли часть субадреса символ "." , и если да, то выполняется кусок кода присоединяющий символ "#" и правую часть интернет адреса из гиперссылки.  Но, во-первых, двойные кавычки vbe не пропускает и перестает ругаться,  если оставить одинарные. Однако в таком виде обработка условия всегда возвращает ложь, и код не возвращает субадрес. Конечно, вместо точки ставил символ "#", но не срабатывает, всегда ложь. Помогите люди добрые, как здесь прописать условие проверки на содержание символа "#".
Изменено: Excelman - 04.10.2023 18:50:58
Извлечение гиперссылки с недопустимыми символами
 
ZVI, спасибо за вариант, но гиперссылке "вшита" в текстовое значение и при применении вашего варианта возвращается просто текстовое значение ячейки.
Извлечение гиперссылки с недопустимыми символами
 
БМВ,  вариант интересный! Читал мануал по MS про субадресс, пришел к выводу что он возвращает адрес на диапазон на листе эксель, про https  там ничего не говорилось. Ваш способ немного смущает тем что символ # будет дорисовываться искусственно, даже в том случае если его в гиперссылке нет. На листе не все гиперссылки имеют неиспользуемые символы. Однако ж можно наверное условия какие нибудь прикрутить. Спасибо в любом случае, дали хорошее направление для поиска!
Извлечение гиперссылки с недопустимыми символами
 
Всем привет! Столкнулся с такой проблемой. На листе есть https гиперссылки, в адресе которых включен символ #. Так вот, при попытке извлечь адрес в текстовую строку с помощью vba извлекается только часть до символа #, все остальное отсекается. Например в ячейке A1 содержится значение с привязанной гиперссылкой: https://internet.site/#/567875. Создаю процедуру
Скрытый текст

по итогам свойство .Address извлекает только https://internet.site/ остальное не видит. Пробовал через Replace(HL.Address, "#" ,"") не помогает,т.к. .Address упирается в символ # и не пускает для обработки дальше. Нагуглил что символ # не редкость и нужен для навигации по странице, однако получается, что не всю кодировку url понимает .Address. Подскажите пожалуйста, как извлечь всю строку с учётом всех символов в ссылке?
Заливка цветом строк по частичному совпадению текста через УФ
 
Кстати, нет. УФ по формуле
Код
=ПОИСК("Солн";G3;1)
выделяет только ячейку к привязанному диапазону. Чтобы выделял строку в границах привязанного диапазона нужен $
Код
=ПОИСК("Солн";$G3;1)
Заливка цветом строк по частичному совпадению текста через УФ
 
Hugo, огромное спасибо! Работает! Я догадывался что нужно как то использовать функцию Поиск, но как её здесь прикрутить ко всему дипазону было не понятно. Скажу больше, я и сейчас мало что понял, кроме того что проверка выполнения условия по маске происходит только в ячейке G3, причем без абсолютной привязки столбца через $, а заливка работает по всему диапазону. Магия :)  
Изменено: Excelman - 10.09.2023 15:39:10
Заливка цветом строк по частичному совпадению текста через УФ
 
Здравствуйте товарищи! Есть задача с помощью УФ выделять цветом строки в таблице с условием частичного совпадения текста. Примеры, которые находил работают исключительно с точным совпадением текста. Для меня же требуется, чтобы под условие подподали текстовые значения с маской
"*Солн*" по столбцу G. Однако при попытке изменить формулу условного форматирования  

=$G3="Скид: 0 - ООО ""Солнышко"""

в такой вид =$G3="*Солн*"

заливка не работает. Помогите кто знает, как прикрутить маску в условное форматриование.

Изменено: Excelman - 10.09.2023 15:11:40
Совместная работа функций "Ячейка" и "Адрес"
 
gling, огромное спасибо! Вариант рабочий!
Совместная работа функций "Ячейка" и "Адрес"
 

Всем привет! На Листе1 в строке 3 забита формула поиска номера столбца через функцию ПОИСКПОЗ на соответствие по текстовым заголовкам столбцов на Листе 2. Найденые номера столбцов используются как аргументы в функции «Адрес».

Стоит задача на Листе 1 формулой через функции «Ячейка» и «Адрес» вернуть значение соответствующей ячейки из Листа 2.

Не могу добиться от функции «Ячейка» «значение» корректной работы ссылки полученной через функцию «Адрес». Прошу помощи. Использование функций Ячейка» и «Адрес» не принципиальны, просто это мой вариант попытки решить задачу.

Заранее спасибо. Пример прикладываю

Настройка вертикального скрола в UserForm через Свойство ScrollBars, Отключение скролла у встроенных кнопок в пользовательской форме
 
БМВ, sokol92, спасибо за ценную наводку! По результатам отпишусь обязательно!
Настройка вертикального скрола в UserForm через Свойство ScrollBars, Отключение скролла у встроенных кнопок в пользовательской форме
 
Всем привет! Создал пользовательскую форму (UserForm) в VBA. Форма Нужна для работы в Word. Понимаю, что форум по Excell, но общие приёмы, которые используется в VBA Excell подходят и для VBA Word. Суть проблемы. Форма содержит большое количество объектов TextBox расположенных вертикально в стобец. Объектов много и на форме не помещаются. Помогла ветка форума из архива с помощью Свойства ScrollBars форму можно скролить и разместить нужное количество объектов. Все хорошо, одно "НО". В форме есть группа кнопок по нижней границе и они скроляться со всеми объектами формы. Коврялся в свойствам этих кнопок хотел отключить их от общего скролла, но не нашел. Задача стоит, чтобы кнопки всегда находились поверх формы и нескролились.Подскажите люди добрые как поставить запрет на скролл моим кнопкам?  
Поиск соответствия всех значений, используя столбец, содержащий дубликаты.
 
Бахтиёр, Спасибо огромное!!!
Поиск соответствия всех значений, используя столбец, содержащий дубликаты.
 
Kuzmich, спасибо, за наводку, но нужно решение через формулу, не макросом.  Вариант от Бахтиёр - то что нужно!
Изменено: vikttur - 16.09.2021 11:20:13
Поиск соответствия всех значений, используя столбец, содержащий дубликаты.
 
Юрий М, согласен. Могу тему иначе сформулировать, если это не нарушит правила.
Поиск соответствия всех значений, используя столбец, содержащий дубликаты.
 
СУПЕР! Извините может уже наглею, но чтобы вишенка на торте - чтоб работало и на 2003 - можно чем то заменить СЧЁТЕСЛИМН?
Изменено: vikttur - 15.09.2021 20:40:44
Поиск соответствия всех значений, используя столбец, содержащий дубликаты.
 
Интересно, изучаю. Спасибо!

Цитата
Бахтиёр написал: там функция ФИЛЬТР() не сработает
ДА, верно. мой эксель не распознал, но судя по всему результат именно тот который мне нужен, так как на листе отразился резальтат отработанной вашей формулы. Можно как то ваш вариант переиначить на старых версиях экселя?
Изменено: vikttur - 15.09.2021 20:40:21
Поиск соответствия всех значений, используя столбец, содержащий дубликаты.
 
Цитата
Юрий М написал: Именно ВПР?
Извините, Юрий. Нет, конечно. Задачи именно ВПР не стоит. Знаю, что ВПР как то можно заменить черезз ИНДЕКС и ПОИСК ПОЗИЦИИ. ВПР привел потому как более менее понятно как это работает.

Бахтиёр, Вообще на работе у меня 2007, дома старый 2003. Попробую ваш вариант спасибо!
Изменено: vikttur - 15.09.2021 20:39:54
Поиск соответствия всех значений, используя столбец, содержащий дубликаты.
 
Спасибо за вариант, но я расчитыва получить именно формулу, не макрос.
Изменено: vikttur - 15.09.2021 20:39:18
Поиск соответствия всех значений, используя столбец, содержащий дубликаты.
 
Здравствуйте уважаемые обитатели форума. Помогите решить задачу. Файл с примером прилагается.

По столбцу «A» идут наименования товаров, в Столбце «B» содержаться соответствующие уникальные номера товаров. Условно данные по столбцам «A» и «B» являются базой данных, эталоном.   В столбец «D» вносятся наименования товаров, а в столбце «Е» формула должна находить соответствие по базе данных и возвращать уникальный код (из столбца «B»). Самое очевидное решение использовать ВПР. Но ВПР ищет только первое вхождение значения-дубликата ячейки игнорируя последующие. Решением могло бы быть использование ВПР с конкатенацией значений по столбцам «A» и «B»,  «D» и «E». Но в том-то и дело, по столбцу «E» значение заранее не известно, его нужно найти по базе данных. Другими словами, помогите создать универсальную формулу, результатом которой будет возвращение соответствующего значения из столбца «B» и в случае, если будут встречаться дубликаты (в примере яблоки, бананы, киви), то возвращать значение уникального кода первого дубликата, второго, третьего и т.д. в том порядке как они размещены в эталонной базе. Предполагается, что по столбцу «D» количество дубликатов будет равно количеству дубликатов базы данных (столбец «A») либо меньше, что должно предотвратить возникновение ошибки в случае переполнения дублирующих значений по столбцу «D».

Заранее спасибо всем откликнувшимся!

Изменено: vikttur - 15.09.2021 20:39:05
Импорт данных из Word в Excel макросом
 
Здравствуйте. Есть задача импортировать данные из word файла (.doc) на активный лист текущей рабочей книги. Вообще думал что реализовать автоматизацию можно через Query запрос, но оказывается в этом режиме Еxcel не умеет распознавать форматированный текст и "засасывает" целиком все данные, в том числе и служебные данные xml и как итог - на лист вываливается "каша" из символов. Прихожу к выводу (возможно ошибочному) что форматированный текст word импортировать в excel можно только используя буфер обмена. Нарыл здесь образец макроса, который запускает приложение Word. Методом тыка, т.к. слабо представляю как работает этот код  заменил строку
Код
Set objWrdDoc = objWrdApp.Documents.Open("C:\Doc1.doc")
на эту
Код
Set objWrdDoc = objWrdApp.Dialogs(80).Show
Добившись тем самым вызов диалогового окна открытия файла. В сети встречал варианты где минуя операции выделения (Ctrl+A) и копирования данные сразу переносятся с документа Word на лист Excel типа Range("A1").Value = WordDocument.Range. У меня нечего не получилось. Почему то при запуске процедуры управление передается в приложение Word и макрос далее не может вернуться в Excel и вставить данные. Пришлось делать еще один макрос для запуска процедуры импорта. Тогда управление (фокус) c Excel не уходит и данные успешно импортируются. В итоге родилось вот это
Код
Sub Zapusk_Word_iz_Excel()
    Dim objWrdApp As Object
    Dim objWrdDoc As Object
    On Error Resume Next
    Set objWrdApp = GetObject(, "Word.Application")
        If objWrdApp Is Nothing Then
            Set objWrdApp = CreateObject("Word.Application")
            Set objWrdDoc = objWrdApp.Dialogs(80).Show
            ' здесь в случае Отмены нужно что-то типа If objWrdDoc is Nothing then Exit Sub
            objWrdApp.Visible = True
        End If

    Set objWrdDoc = objWrdApp.Selection.WholeStory
    Set objWrdDoc = objWrdApp.Selection.Copy
    Set objWrdApp = Nothing
End Sub

Sub Vstavka()
Zapusk_Word_iz_Excel
    If Application.ClipboardFormats(1) = -1 Then
        MsgBox "Буфер обмена пуст"
        Exit Sub
    Else
        Range("A5").Activate
        ActiveSheet.Paste
    End If
    
End Sub
Что в итоге? Хотелось бы реализовать код в одном макросе и минуя операции выделения-копирования в word'e. Также хотелось бы добавить реакцию на нажатие кнопки "Отмена" в диалоге открытия файла - то есть word не должен запускаться как сейчас. Прошу помощи
Изменено: Excelman - 22.03.2019 14:16:43
Как задать перебор ячеек циклом по столбцу внутри заданного диапазона
 
Можно конечно, но в дальнейшем Resultat будет использоваться много раз. И поэтому мне будут понятнее обращаться к одной переменной

Sanja,Спасибо. Для меня странно, но работает. Тогда не понятно, почему перебор в диапазоне Resultat происходит без .Cells?
Вот так For Each iKod In Resultat работает
Изменено: Excelman - 15.03.2019 10:49:30
Как задать перебор ячеек циклом по столбцу внутри заданного диапазона
 
Всем привет. Прошу помощи. Сделал простейший макрос перебора ячеек в заданном диапазоне.
Код
Sub ResultatDiapzn2()
Dim Resultat As Range
Dim iKod As Range
    
Set Resultat = Sheets("Resultat").Range("A4", Sheets("Resultat").Cells(Rows.Count, 3).End(xlUp))
    For Each iKod In Resultat.Columns(1)
        MsgBox iKod
        'MsgBox iKod.Address
    Next iKod
End Sub
Если задать перебор так For Each iKod In Resultat, то перебираются все  ячейки диапазона. Но мне нужен перебор только в первом столбце в  заданном диапазоне, поэтому задаю перебор For Each iKod In Resultat.Columns(1). И тут компилятор выдает ошибку по строке MsgBox iKod. Для наглядности я поменял вывод на
MsgBox iKod.Address. Обнаружилось что переменная iKod почему-то приняло значение целиком всего диапазона Resultat.Columns(1) и стало быть быть перебора не происходит. Подскажите что надо поправить чтобы перебор ячеек был внутри диапазона Resultat.Columns(1).
Заранее спасибо
Переменная в макросе Excell при импорте внешних данных через запрос (Microsoft Query) к базе данных MS Access., Изменение макросомиз под Excell запроса Microsoft Query
 
Sanja,
Цитата
Sanja написал:
С кавычками разберитесь
не поверил свои глазам но факт есть факт. Сравнивал коды ПОСИМВОЛЬНО в том числе и пробелы вариант от TheBestOfTheBest, и мой. Все один в один. И только, когда я полностью скопировал строку из его кода , "WHERE (All_dog2.kod_cl=" & vX & ")") и вставил в свой то все заработало. Это что, повлияла раскладка клавиатуры. Символ (") в русской и английской раскладке это не тождественно?

ОТДЕЛЬНОЕ ОГРОМНОЕ ПЕРСОНАЛЬНОЕ СПАСИБО  TheBestOfTheBest. Сильно выручили. С ВАШЕЙ помощью и мой первоначальный код теперь заработал. :)  
Изменено: Excelman - 24.05.2018 09:39:05
Переменная в макросе Excell при импорте внешних данных через запрос (Microsoft Query) к базе данных MS Access., Изменение макросомиз под Excell запроса Microsoft Query
 
TheBestOfTheBest, Ничего не пойму, но работает.
Цитата
TheBestOfTheBest написал:
Значить в vX записана какая-то фигня, которую Query не может определить.
В К8 просто 4-х значный код, только цифры. При пошаговом выполнении (F8) навожу курсор на Set vX = Range("K8") все определяется. Сейчас там 1904.

Я не пойму , что Вы изменили кроме строки vX = Range("K8").Text? При беглом сравнении все то же самое. Однако в моем коде замена vX = Range("K8").Text не помогает
Изменено: Excelman - 24.05.2018 09:13:12
Переменная в макросе Excell при импорте внешних данных через запрос (Microsoft Query) к базе данных MS Access., Изменение макросомиз под Excell запроса Microsoft Query
 
TheBestOfTheBest,увы тоже не помогло, пишет - Run Time error ‘1004’ синтаксическая ошибка . Причем пробвал убирать все пробелы и наоборот, то есть и так " & vX & ",
и так "&vX&"
Переменная в макросе Excell при импорте внешних данных через запрос (Microsoft Query) к базе данных MS Access., Изменение макросомиз под Excell запроса Microsoft Query
 
Sanja,  да просто тупо
Код
 , "WHERE (All_dog2.kod_cl=vХ)")
Изменено: Excelman - 24.05.2018 08:51:45
Страницы: 1 2 3 4 5 След.
Наверх