Всем доброго вечера. Заранее хочу поблагодарить всех ко откликнется. Цель следующая. Есть файл ексель в которой работают менеджеры. Есть сайт компании..в его недрах лежит текстовый файл. Как сделать так что бы при открытии менеджером файла ексель, открывалась пользовательская форма и информация из текстового файла переносилась в 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
Игорь, Если можно небольшое уточнение.... Сейчас много облачных хранилищ (яндекс-диск...майл-диск и так далее....) Есть возможность положить текстовый файл туда, что бы данные вставлялись в сообщение именно с этого места? У меня просто доступа к сайту компании нет, а просить каждый раз программиста выложить новый текстовый файл или удалить его совсем не очень удобно....а так бы я получил некую гибкость в своей работе.. Заранее СПАСИБО...
Есть возможность положить текстовый файл туда, что бы данные вставлялись в сообщение именно с этого места?
Да, такая возможность есть Только код будет заметно сложнее (раз в 10), и вряд ли кто захочет вам этот макрос писать (я делал такое для яндекс-диска, там сложно) С вашего сайта брать текст / файл, или с других мест (не облачных хранилищ) - проще будет Не обязательно ведь файл выкладывать, можно в любом месте на любом сайте кусок текста публиковать.
Игорь, я Вас понял....спасибо еще раз...думаю попробую найти общий язык с программистом который ведет наш сайт и договорюсь получить доступ что бы в любое время я смог управлять этой папкой..Искренне благодарю Вас Игорь..Удачи Вам.
Игорь, Вынужденно продолжаю тему. Вставил макрос в програму на работе. Настроил..все вроде работает на ура.... Но столкнулся с одним моментом. Если нет интернета в момент когда открываешь файл макрос все равно выводит сообщение с текстом из файла 01.txt (хотя на сайте его уже может и не быть) Как такое может быть?.....насколько я понял макрос сначала сохраняет текстовый файл во временную директорию и уже оттуда берет данные для вывода сообщения. Получается что при отсутствии интернета файл не скачиваеться а просто подхватывается из временной папки?...скаченный до этого ?...разве временная папка не очищается?...или я что то не так понимаю?...я могу конечно поставить проверку на наличие интернета и при его отсутствии просто не запускать макрос но я просто хочу понять что к чему и правильно ли я понимаю работу макроса..