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

Страницы: 1
Не работает в цикле VBA
 
Добрый день!
Друзья и коллеги, очень интересный случай...
Есть макрос, который обновляет сообщения из телеграмм.
Работает отлично на одном из компьютеров.
А на всех остальных просто не работает - цикл работает, а вот сообщения не обновляются (иногда обновляет один раз - и то нет закономерности).
Ошибок нет. Может кто сталкивался? Уже и офис и Windows переустанавливал. Даже Windows server 2016 пробовал - не работает.
Предполагаю, что что то блокирует но куда копать не могу понять.
Код
Function GetTelegramResponse(ByVal apiUrl As String) As String
    Dim WinHttpReq As Object
    Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
    WinHttpReq.Open "GET", apiUrl, False
    WinHttpReq.Send
    GetTelegramResponse = WinHttpReq.responseText
End Function

Sub ReadTelegramMessages()
    Dim telegramToken As String
    Dim apiUrl As String
    Dim response As String
    
    telegramToken = "YOUR_TELEGRAM_BOT_TOKEN"
    apiUrl = "https://api.telegram.org/bot" & telegramToken & "/getUpdates"
    
    response = GetTelegramResponse(apiUrl)
    
    ' Обрабатываем полученный ответ
    ' ...
End Sub



 
Всё что мы есть - это результат наших мыслей ©Будда
Дата в фильтре сводной таблице VBA
 
Всем добрый день!

Прошу помощи, есть макрос, который выставляет фильтр в сводной таблице. Макрос был найден на просторах форума и работает отлично.
Но, я никак не могу передать дату в виде переменной... 2 часа уже бьюсь.
Дата выставлена в формате #3/2/2023#. И что бы я не делал, не получается заменить её на переменную.
Даже если значение переменной будет такое же (qq=#3/2/2023#). Что делаю не так - ткните пжл... :cry:
Код
    Dim PT As PivotTable
    Set PT = ActiveSheet.PivotTables("сводная таблица1")
    PT.RefreshTable


    ' Clear any existing filters
    PT.PivotFields("дата").ClearAllFilters
    

    ' Apply the filter to show machines loaded on specific dates
    With PT.PivotFields("дата")
            For i = 1 To .PivotItems.Count
              With .PivotItems(i)
                If IsDate(.Value) Then
                  .Visible = .Value <= #3/2/2023#

                End If
              End With
            Next
                 
    End With
Всё что мы есть - это результат наших мыслей ©Будда
Power Query в VBA не выдаёт данные в цикле.
 

Добрый день друзья и коллеги!  

Впервые интегрирую power query в  VBA и как следствие столкнулся с проблемой, которую не могу решить уже часа три упорных тестов....

Смысл кода в том, что он идёт на сайт и забирает с него данные таблиц (по сути парсер).

Сделать без PQ не удалось, слишком много тегов - получилось криво и не надёжно.

На моё удивление PQ без проблем забрал эти данные в стабильном формате.

НО... Он не отдаёт данные, так как нет завершения макроса - а он не завершится, работает в бесконечном цикле и так и нужно (эта маленький кусок 5% от всего кода).

Вот и вопрос как его заставить отдать данные на лист экселя.... Способы в виде Application.Wait (Now + TimeValue("0:00:10")) не дали результата вообще.

Пишет "Выполнение фонового запроса..." и этот фоновый запрос завершается, только если остановить макрос.

Прошу помощи....

Код
Sub поиск_компании_в_интернете_считать()


Dim ws As Worksheet
Dim qt As QueryTable
Dim nr As Name
Dim cn As WorkbookConnection
Наименование_компании = URL_Encode(Sheets("admin_list").Range("B2"))
ИНН = Sheets("admin_list").Range("B2")
ОКПО = Sheets("admin_list").Range("B2")

Set ws = ThisWorkbook.Sheets("company_search")

'Clear all data from the worksheet
For Each cn In ThisWorkbook.Connections
    cn.Delete
Next cn
For Each nr In ws.Names
    nr.Delete
Next nr
ws.Range("A:D").ClearContents

url = "http://online.igk-group.ru/ru/reports/express_reports/ext_search?name=" & Наименование_компании & "&ogrn=&inn=&okpo=&status=2&branch=2&ru="

'Select the worksheet where you want to import the data
Set ws = ThisWorkbook.Sheets("company_search")

'Create a new query table
Set qt = ws.QueryTables.Add(Connection:="URL;" & url, Destination:=ws.Range("A1"))

'Refresh the query table to import the data
qt.Refresh 

Do
    'определённые действия с таблицей, которую сделает PQ, не важно какие, ибо информация сюда уже не доходит.
Loop While StrConv(Sheets("admin_list").Range("B2"), 2) <> "назад"

End sub
ыва
Всё что мы есть - это результат наших мыслей ©Будда
ChatGPT
 
Добрый день!

Никто не пытался ChatGPT запустить через VBA?
У него есть API, но инструкции только для питона и java.

Может есть у кого информация или идеи?

Есть инструкция тут, ну и сам сайт проекта: https://beta.openai.com/docs/guides/code/quickstart  
Всё что мы есть - это результат наших мыслей ©Будда
Кнопки в телеграмм бот
 
Добрый день!

К сожалению, не нашёл на просторах интернета ничего похожего для VBA (на питон пруд пруди...).

Вводные:
Есть телеграмм бот, который общается по API.

Что нужно:
Хочу сделать кнопки. Что бы бот отправлял пользователю не текст, а кнопку.

Что нашёл:
Нашёл тонну статей как это сделать, но всё на Питоне или java.
Но я не знаю эти языки совсем (чувствую пора изучать).
Самое адекватное, на мой взгляд, нашёл тут для питон: https://habr.com/ru/sandbox/163347/
Может как то переделать под VBA?....

Что есть:
Простейший алгоритм отправки сообщений.
Как понял, кнопки реализуются через метод sendMessage.
В нём должен быть параметр reply_markup.
А вот reply_markup уже идёт массивом с другими параметрами. Как этот массив сделать не пойму...



Код макроса для отправки:
Код
Sub отправкаобратногосообщения()

сообщениедляответа = "Ни видать тебе кнопок... Иди учи питон"


Dim TOKEN As String, ChatID As String, message As String
    Dim sURL As String, oHttp As Object, sHTML As String
    message = RussianStringToURLEncode_New(сообщениедляответа) 'Отправляемый текст в переменной
'RussianStringToURLEncode_New - отдельная функция для отправки русских букв. Можно без неё - сообщение отправлять на английском.

    
    TOKEN = "***********************" ' токен своего бота
    ChatID = Sheets("подсобка").Range("B12") 'id бота (для отправки только боту) или группы
    sURL = "https://api.telegram.org/bot" & TOKEN & "/sendMessage?chat_id=" & ChatID & "&text=" & message
    Set oHttp = CreateObject("Msxml2.XMLHTTP")
    oHttp.Open "POST", sURL, False
    oHttp.send
    Set oHttp = Nothing

End Sub


Если есть энтузиасты давайте подумаем. Этого никто не делал ещё, как я понимаю.
Всё что мы есть - это результат наших мыслей ©Будда
Microsoft XML v3.0 в v6.0
 
Добрый день!

Есть макрос:
Код
Sub отгрузкипарсинг()
    'Reference: Microsoft XML, v3.0
    ответ = Sheets("Лист1").Range("A1")
    Dim xml As New MSXML2.DOMDocument, elem As MSXML2.IXMLDOMElement
     
    xml.async = False 'отключаем асинхонный запрос, иначе данные не успевают загрузиться
    xml.LoadXML (ответ)  'загружаем ответ xml
    For Each elem In xml.DocumentElement.SelectNodes("//soap:Body/m:getUPDListResponse/m:return/m:НеподписанныйДокумент")
        Debug.Print elem.SelectSingleNode("m:Номер").Text
    Next elem
End Sub

Он работает на Microsoft XML v3.0. Но, в книге есть ещё кучу макросов на Microsoft XML v6.0.
Две библиотеки не даёт подключить естественно (хотя...).
Как то можно макрос переделать его под  Microsoft XML v6.0?
Пробовал самостоятельно - сломал макрос  :D  
Всё что мы есть - это результат наших мыслей ©Будда
Парсинг кода с web-сервиса
 
Добрый день!

Прошу подсказать...
Что делаю:
1. Есть веб-сервис 1С. На него посылаю запрос и получаю ответ через SOAP запрос.
2. Текст ответа падает в переменную "Ответ".
3. Делаю парсинг "подручными" методами.

Внутри ответа веб-сервиса идут блоки: <m:НеподписанныйДокумент> информация </m:НеподписанныйДокумент>
*1234 - это какая то информация номера документов и т.д.

Проблема в том, что таких блоков (<m:НеподписанныйДокумент> информация </m:НеподписанныйДокумент>) может быть 50 шт. и более.
Мне же нужна информация из этих блоков (сумма, номера, УИД и т.д).

Сейчас забираю данные кустарным способом. Высчитываю шапку и тд. - работает честно говоря не стабильно.

Вопрос, как парсить нормально такие вещи?)
Код
лево = InStr(Ответ, "<m:НеподписанныйДокумент>") + 25
право = InStr(лево, Ответ, "</m:НеподписанныйДокумент>")
середина = право - лево
ОКВЭД = Mid(Ответ, лево, середина)
Код
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <soap:Body>
      <m:getUPDListResponse xmlns:m="itPersona">
         <m:return xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <m:НеподписанныйДокумент>
               <m:Номер>1234 </m:Номер>
               <m:Дата>2020-09-05</m:Дата>
               <m:Сумма>50.7</m:Сумма>
               <m:УИД>1234</m:УИД>
               <m:ИдентификторЭДО>1234</m:ИдентификторЭДО>
               <m:ОбменЭДО>false</m:ОбменЭДО>
               <m:Статус>Отправлен по почте</m:Статус>
               <m:ДатаСтатуса>2020-09-30T10:48:14</m:ДатаСтатуса>
           </m:НеподписанныйДокумент>
         </m:return>
      </m:getUPDListResponse>
   </soap:Body>
</soap:Envelope>
Изменено: Павел Баскаков - 27.10.2022 10:41:56
Всё что мы есть - это результат наших мыслей ©Будда
Скачать страницу сайта на жёсткий диск VBA
 
Добрый день!

Нужна Ваша помощь.
Пытаюсь получить данные с сайта https://bo.nalog.ru/search?query=3917046900&page=1
Нужна ссылка, которая содержится в ИНН.
Итого понял, что получить эти данные можно только в сохранённой на ПК версии сайта (с папками и т.д.)...
Что пробовал делать:

1. Прочитать страницу через GetHTTPResponse не удаётся (точнее там нет всего кода страницы, всё в модулях).
Цитата
<!doctype html><html xmlns="http://www.w3.org/1999/xhtml&quot; lang="ru"><head><meta charset="utf-8"><meta content="" name="Description"><meta content="" name="Keywords"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="shortcut icon" type="image/jpg" href="favicon.ico"/><title>Ресурс БФО</title><link href="/static/css/main.67379493.css" rel="stylesheet"></head><body><div id="root" class="root"></div><div id="modal"></div><div id="side"></div><script type="text/javascript" src="/static/js/main.0cfa2b1c.js"></script></body></html>
2. Многочасовые поиски привели к wget (через powershell) - но его, как компонента нет на ПК (установить нельзя - корпоративный ПК).
3. Получилось скачать страницу с помощью Application.SendKeys "^s".
Дальше читаю страницу как текстовый файл с изменение кодировки с UTF-8. Так всё работает.
Но, как только ПК заблокировался - ожидаемо перестал Application.SendKeys работать....А так не пойдёт....
Код
link = "https://bo.nalog.ru/search?query=" & ИНН & "&page=1"
CreateObject("WScript.Shell").Run link
Application.Wait Time:=Now + TimeSerial(0, 0, 2)
Application.SendKeys "^s"
Application.Wait Time:=Now + TimeSerial(0, 0, 2)
Application.SendKeys "~"

Спасайте, уже не знаю куда рыть...
Ах да, ещё наткнулся на URLDownloadToFile - но не смог написать код... и не знаю даст ли это что то...  
Изменено: Павел Баскаков - 16.10.2022 23:29:58
Всё что мы есть - это результат наших мыслей ©Будда
Сохранить отчёт из https://bo.nalog.ru/ VBA
 
Добрый день!

Прошу помощи, нужно скачать pdf файл с сайта по ссылке.

Вроде кучу тем на эту тему, но уже десятки кодов испробовал и толку ноль....
Не помогает и URLDownloadToFile и GetHTTPResponse пробовал вытащить....
Находил код открытия через интернетЭкспловер и эмуляция "Сохранить", но нет...

Вот ссылка: https://bo.nalog.ru/download/bfo/pdf/11175198?period=2020

Спасайте, уже закипел....
Всё что мы есть - это результат наших мыслей ©Будда
Запуск нескольких книг с макросами
 
Всем привет!!!
Помогите решить проблему - гугл особо ничего не дал.
Есть 10 файлов эксель. Каждый - это макрос который работает в бесконечном цикле
(да, все 10 должны работать одновременно - не получится настроить последовательно в одном - выполняют постоянно задачи, но разные).
Вопрос, как их запустить....

Не получается сделать новый экземпляр офис... Уже ковырялся в реестрах не нашёл такого как в инструкциях с интернета.
Офис 2016.

Прошу подскажите кто делал...
Всё что мы есть - это результат наших мыслей ©Будда
Наименование макроса из ячейки при операторе call
 
Добрый день!

Возможно что-то упустил... Но, похоже на ограничение.
Прошу помочь...

Мне нужно было запустить из макроса другой макрос, что делается элементарно при помощи Call имя_макроса. (можно помоему даже без Call)
Что делать. если наименование макроса в ячейке?

Мне это нужно, так как в зависимости от вариантов первого - такой другой и должен запуститься. Это просчитывается на листе - получаем в ячейке наименование макроса.

Пример:
Код
Sub макрос1()
'действия, без разницы какие...
Call Sheets("лист1").Range ("B11") 'в ячейке написано: макрос2
'через переменную тоже не даёт...

End sub 



Sub макрос2()

'действия, без разницы какие...

End sub 











Изменено: Павел Баскаков - 15.06.2022 18:01:37
Всё что мы есть - это результат наших мыслей ©Будда
Подключится к COM объекту
 
Добрый день!

Коллеги и друзья, нужна помощь или хотя бы мысль...
Что есть: есть COM-объект на сервере, через него 1С получает необходимые данные.
Работает как я понял по принципу API: Вызывает COM объект, отправляет ему параметры и забирает ответ.


Вот я хочу сделать так же но с использованием VBA.
1Cники говорят, что вроде можно так же через VBA... то они не владеют VBA и точнее сказать ничего не могут.
Поиск по гуглу тоже ничего мне не дал...

Возможно ли это в принципе?
Натолкните как это сделать....
Всё что мы есть - это результат наших мыслей ©Будда
Цикл DO LOOP While
 
Добрый день! Друзья товарищи, уже неделю как ищу и не могу найти причину....
Есть макрос который зациклен при помощи do loop.
Код
sub test()
do
    макрос

LOOP While условие
End sub
Работает отлично но не долго....
Минут 40 на одном компе (офис 2010)
Около часа - полутора на другом (офис 365)
На третьем компе тоже как на втором....

Дальше просто зависает эксель в "не отвечает" Снимаю задачу через диспетчер что бы закрыть...
Как победить это не пойму.... Надо что бы круглосуточно работал....


Прошу помощь!
Всё что мы есть - это результат наших мыслей ©Будда
Чтение содержимого email
 
Добрый день!
Коллеги и эксель друзья, у меня есть задача/идея сделать автоматизацию некоторого отчета.
Смысл в том, что бы данные с отчета по средствам vba и телеграмм бота передавались соответственно в телеграмм.
Это я осилил - бот есть, сообщения присылает при сработке макроса.
Теперь думаю как сделать обратно - пишешь боту и в зависимости от слова срабатывает макрос.
Например пишешь боту "вчера" и в ответ приходят данные из эксель отчета о продажах за вчера (срабатывает макрос на просчет таблицы и отправляется ботом в телеграмм - это уже есть).
Вот как сделать так, что бы срабатывал макрос при запросе от бота пока не придумал.
Из вариантов сейчас нашел бота который умеет отправлять e-mail. Вот теперь думаю как найти в оутлуке нужное письмо и взять от туда текст письма. А текст как раз по моей задумке и будет триггер. Единственное наверное тогда должен макрос цикличном режиме постоянно смотреть почту.
Идея помоему интересная, но в интернете не нарыл ничего похожего...
Может есть идеи или натолкнете на решение) заранее благодарю!
Всё что мы есть - это результат наших мыслей ©Будда
Страницы: 1
Loading...