Страницы: 1
RSS
Получение данных из сайта и вывод их в сообщении
 
Всем доброго вечера.
Заранее хочу поблагодарить всех ко откликнется.
Цель следующая. Есть файл ексель в которой работают менеджеры. Есть сайт компании..в его недрах лежит текстовый файл.
Как сделать так что бы при открытии менеджером файла ексель, открывалась пользовательская форма и информация из текстового файла переносилась в Label1 (или в текстбокс)  ну или или просто при открытии что бы выводилось бы сообщение с данными из текстового файла..Планирую потом сделать проверку на наличие файла и если он есть на сайте запускать макрос а если нет то пропускать эту процедуру....Если в кратце....открываем файл...макрос идет на сайт и если текстовый файл в наличии то выводим сообщение с данными из текстового файла а если нет просто открываем ексель и менеджер спокойно работает..
Возможно не совсем внятно объяснил за что заранее прошу прощения.
Вот полный путь к текстовому файлу: http://www.smp-bobr.ru/program/01.txt
 
Добавьте этот код в модуль ЭтаКнига:
Код
Private Sub Workbook_Open()
    On Error Resume Next
    With CreateObject("MSXML2.XMLHTTP")    ' скачиваем файл
        .Open "GET", "http://www.smp-bobr.ru/program/01.txt", False
        .send: arr = .ResponseBody
        With CreateObject("ADODB.Stream")
            Filename$ = Environ("tmp") & "\response.txt"
            .Charset = "windows-1251": .Type = 1        ' adTypeBinary
            .Open: .Write arr
            .SaveToFile Filename$, 2
            .Type = 2        'adTypeText
            .LoadFromFile Filename$
            txt = .ReadText
            .Close
        End With
    End With
    If Len(txt) Then
        MsgBox txt, vbCritical    ' выводим сообщение
    Else
        ' не найден файл на сайте, или он пустой
        ' ничего не делаем
    End If
End Sub
Изменено: Игорь - 19.11.2016 22:18:33 (исправил макрос, чтобы кодировку вашего текстового файла он понимал)
 
Игорь, ,благодарю что откликнулись....я видел про то что на сайте отображаются ???? но через вэб-запрос вставлялось все нормально....странно..
А на какую кодировку лучше поменять ? Может проще будет брать данные из екселевского а не текстового файла?...по этому же пути лежит екселевский файл с таким же именем (01.xls) информация находиться на Лист1 в ячейке А1......может тогда не нужно будет играть с кодировкой?
 
 Игорь, приделал ваш макрос в свой файл...все работает...спасибо..только не понял как работает в вашем коде проверка на наличие файла....поскольку доступа к сайту я не имею я искусственно изменил в макросе имя файла на 02.txt и теперь при открытии текстовый файл найден быть не должен...но у меня все равно выводиться сообщение но с данными сайта, а макрос должен был проигнорировать вывод сообщения (если я правильно все понял). Что я недопонял?
 
Так будет правильно:
Код
Private Sub Workbook_Open()
    On Error Resume Next
    With CreateObject("MSXML2.XMLHTTP")    ' скачиваем файл
        .Open "GET", "http://www.smp-bobr.ru/program/01.txt", False
        .send: arr = .ResponseBody
        With CreateObject("ADODB.Stream")
            Filename$ = Environ("tmp") & "\response.txt"
            .Charset = "windows-1251": .Type = 1
            .Open: .Write arr
            .SaveToFile Filename$, 2
            .Type = 2: .LoadFromFile Filename$
            txt = .ReadText: .Close
        End With
        If .Status >= 300 Then txt = ""    ' убеждаемся, что код ответа сервера 2xx
    End With
    If Len(txt) > 0 And InStr(1, txt, "<") = 0 Then    ' убеждаемся, что в ответе нет HTML
        MsgBox txt, vbExclamation    ' выводим сообщение
    End If
End Sub
 
Игорь,Доброе утро и удачного дня.
Спасибо огромное....все работает...здоровья Вам и вашим близким.
p.s Отдельное спасибо разработчикам этого сайта...
 
Игорь, Если можно небольшое уточнение....
Сейчас много облачных хранилищ (яндекс-диск...майл-диск и так далее....)
Есть возможность положить текстовый файл туда, что бы данные вставлялись в сообщение именно с этого места?
У меня просто доступа к сайту компании нет, а  просить каждый раз программиста выложить новый текстовый файл
или удалить его совсем не очень удобно....а так бы я получил некую гибкость в своей работе..
Заранее СПАСИБО...
 
Цитата
Есть возможность положить текстовый файл туда, что бы данные вставлялись в сообщение именно с этого места?
Да, такая возможность есть
Только код будет заметно сложнее (раз в 10), и вряд ли кто захочет вам этот макрос писать (я делал такое для яндекс-диска, там сложно)
С вашего сайта брать текст / файл, или с других мест (не облачных хранилищ) - проще будет
Не обязательно ведь файл выкладывать, можно в любом месте на любом сайте кусок текста публиковать.
 
Игорь, я Вас понял....спасибо еще раз...думаю попробую найти общий язык с программистом который ведет наш сайт и договорюсь получить доступ
что бы в любое время я смог управлять этой папкой..Искренне благодарю Вас Игорь..Удачи Вам.
 
Игорь, Вынужденно продолжаю тему.
Вставил макрос в програму на работе. Настроил..все вроде работает на ура....
Но столкнулся с одним моментом. Если нет интернета в момент когда открываешь файл макрос все равно выводит сообщение с текстом из файла 01.txt (хотя на сайте его уже может и не быть)
Как такое может быть?.....насколько я понял макрос сначала сохраняет текстовый файл во временную директорию и уже оттуда берет данные для вывода сообщения.
Получается что при отсутствии интернета файл не скачиваеться а просто подхватывается из временной папки?...скаченный до этого ?...разве временная папка не очищается?...или я что то не так понимаю?...я могу конечно поставить проверку на наличие интернета и при его отсутствии просто не запускать макрос но я просто хочу понять что к чему и правильно ли я понимаю работу макроса..
 
после строки
Код
Filename$ = Environ("tmp") & "\response.txt"
добавьте строку
Код
KILL Filename$
 
Игорь, Добрый день. Увы не помогло.
Все равно при отсутствии интернет соединения выводит сообщение с текстом из файла 01.txt
 
замените
Код
"http://www.smp-bobr.ru/program/01.txt"
на
Код
"http://www.smp-bobr.ru/program/01.txt?rnd="  & rnd(now)
 
Игорь, Увы и это не дало результата....:((
Это злосчастное сообщение все равно выскакивает при отключенном интернете...
Страницы: 1
Читают тему
Наверх