Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Excel VBA (часть 3)

Автор: Silenty
Дата сообщения: 25.07.2010 17:18
Помогите, пожалуйста с авторизацией. есть сайт, с которого импортируются данные в excel. на сайте авторизация. сессия на сайте держится не более часа. когда надо обновить данные, excel естественно выдает ошибку.

как можно сделать, что бы excel автоматически проходил регистрацию, входил по логину и паролю, и дальше получал все необходимые мне данные?
Автор: lorents
Дата сообщения: 25.07.2010 17:28
Добрый день!
Подскажите, пожалуйста, можно ли реализовать следующую задачу через VBA, если да, то как:
у меня есть таблица в Excel, и там есть столбец, где указываются дата со временем (например 25.07.2010 21:00). Как можно сделать, чтобы при наступлении этого времени, у меня появлялось сообщение об этом?

И как можно свернуть таблицу Excel в системный трей?
Автор: ZlydenGL
Дата сообщения: 25.07.2010 17:59
Silenty, что мешает раз в 40-50 минут делать "холостое" обращение к сайту через Application.Wait?

lorents, тебе тоже Application.Wait в помощь, а в системный трей его можно сворачивать например при помощи TaskSwithXP
Автор: lorents
Дата сообщения: 25.07.2010 18:24
ZlydenGL
понятно. сейчас гляну.

может Кто здесь знает, ищу одну программу. Простите за
нужно база данных, но с функцией напоминания, т.е. чтобы там был столбец, где я указываю дату со временем (например 25.07.2010 21:00) и при наступлении этого времени, у меня появлялось сообщение об этом?
Автор: Silenty
Дата сообщения: 25.07.2010 19:24
ZlydenGL
в не зависимости от частоты обращений оно выкидывает
Автор: defdefdef
Дата сообщения: 25.07.2010 19:27
lorents
Не понял, надо чтоб в екселе это было?
Автор: lorents
Дата сообщения: 25.07.2010 19:59

Цитата:
Не понял, надо чтоб в екселе это было?

мне или отдельная программа напоминалка нужна, или чтобы это в екселе было
Автор: ZlydenGL
Дата сообщения: 25.07.2010 20:10
Silenty, тогда Microsoft Internet Controls и переменная InternetExplorer тебе в помощь - при помощи этой штуки пройти операцию логина несложно (если не NTLM авторизация конечно).
Автор: Silenty
Дата сообщения: 26.07.2010 00:50
ZlydenGL
сорри, но я в этом полный ноль. можешь помочь?
Автор: ZlydenGL
Дата сообщения: 26.07.2010 08:52
Silenty
В Tools-References подключаешь Microsoft Internet Controls (или вручную указываешь библиотечку SHDocVw.dll), после этого пишешь:

Код: ' Определяем и создаем переменную, ссылающуюся на процесс Internet Explorer'а
Dim IE As InternetExplorer
Set IE = New InternetExplorer
' Открываем нужную ссылку и ждем, пока она прогрузится
IE.Navigate "http://адрес_ссылки"
While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
' Заполняем нужные поля для входа
IE.Document.Forms(0).Login = "Login"
IE.Document.Forms(0).Pass = "Password"
IE.Document.Forms(0).Submit
' Опять ждем конца обработки
While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
' Переходим на страничку с нужными данными
IE.Navigate "http://адрес_ссылки"
While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
' Читаем данные нужной таблицы
With IE.Document.all.tags("table").Item(0)
For I = 0 To .all.tags("tr").Length - 1
For J = 0 To .all.tags("tr").Item(I).all.tags("td").Length - 1
Cells(I,J) = .all.tags("tr").Item(I).all.tags("td").Item(J).InnerText
Next J
Next I
End With
IE.Close
Set IE = Nothing
Автор: Drazhar
Дата сообщения: 26.07.2010 09:48
lorents
Использовать outlook нельзя? То есть из экселя создать задание в аутлук и при наступлении времени оно сработает
Автор: lorents
Дата сообщения: 26.07.2010 13:51
Drazhar
можно, а можно поподробнее, как это сделать?
Автор: Drazhar
Дата сообщения: 26.07.2010 16:07
lorents

Код: Sub AddToOutlook()

'!! Reference to Outlook object library required !!

Dim olAppointment As Outlook.AppointmentItem
Dim olApp As Outlook.Application
Dim lngRow As Long, shtSource As Worksheet


'Get reference to MS Outlook
On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then
Set olApp = CreateObject("Outlook.Application")
End If

On Error GoTo 0

Set shtSource = ActiveSheet


Set olAppointment = olApp.CreateItem(olAppointmentItem)

With olAppointment
.Subject = shtSource.Cells(1, 1)
.Location = shtSource.Cells(1, 2)
'.Start = DateValue(shtSource.Cells(1, 3))

.Start = Now
.End = DateAdd("h", 1, .Start)
.Duration = 30
.Save
End With


End Sub
Автор: lorents
Дата сообщения: 26.07.2010 17:44
Drazhar
круто, спасибо, если бы еще понимать, как это работает, я просто в этом деле полный нуль?
Скажите, куда заносить код, и в какой столбец писать дату и время?
Автор: Drazhar
Дата сообщения: 26.07.2010 18:35
lorents
гм.
задача усложняется.
делаем так.
.Subject = "Тема задачи"
.Location ="место где происходит задача"
.Start = Cdate("Дата/время задачи")
пока этого будет достаточно
то есть остается

Код: Sub AddToOutlook()

'!! Reference to Outlook object library required !!

Dim olAppointment As Outlook.AppointmentItem
Dim olApp As Outlook.Application
Dim lngRow As Long, shtSource As Worksheet


'Get reference to MS Outlook
On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then
Set olApp = CreateObject("Outlook.Application")
End If

On Error GoTo 0

Set shtSource = ActiveSheet


Set olAppointment = olApp.CreateItem(olAppointmentItem)
.Subject = "Тема задачи"
.Location ="место где происходит задача"
.Start = Cdate("Дата/время задачи")
With olAppointment

.Save
End With


End Sub
Автор: lorents
Дата сообщения: 26.07.2010 18:58
Drazhar
я не понял, а как Ваш код берет дату и время и столбца в Excel?
Большое спасибо, за Вашу помощь.
Автор: Drazhar
Дата сообщения: 26.07.2010 19:13
lorents
Никак. если вы хотите брать их из эксель, то используйте конструкции вида
.Subject = Sheets("Имя листа").Cells(2, 1) где 2 и 1 -координаты ячейки. Попробуйте сделать что-нибудь сами. Если что-то не будет получаться, то вам помогут.
Автор: lorents
Дата сообщения: 26.07.2010 19:26
Drazhar
Спасибо, пойду разбираться.
Автор: lorents
Дата сообщения: 26.07.2010 21:26
Drazhar
А можно сделать наоборот, т.е. не Excel передает информацию Outlook, а Outlook берет информацию из таблицы Excel?
Автор: Drazhar
Дата сообщения: 26.07.2010 22:09
lorents
Можно. Нужно что-то типа За точность синтаксиса не ручаюсь - дома экселя не стоит.
sub AddToOutlook()

'!! Reference to Excel object library required !!

Dim olAppointment As Outlook.AppointmentItem
Dim olApp As Excel.Application
Dim lngRow As Long, shtSource


'Get reference to MS excel
On Error Resume Next
Set olApp = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
Set olApp = CreateObject("Excel.Application")
End If

On Error GoTo 0
set wb=olApp.openworkbook("C:\1.xls")
set shtSource=wb.sheets(1)


Set olAppointment = application.CreateItem(olAppointmentItem)
.
With olAppointment
Subject = shtSource.cells(1,1)
.Location ="место где происходит задача"
.Start = Cdate("Дата/время задачи")
.Save
End With


End Sub
Автор: Silenty
Дата сообщения: 26.07.2010 23:24
ZlydenGL
Огромное СПАСИБО!!!! небольшая переделка + гугл и все получилось!

Добавлено:
Еще один вопросик!

Код: ' Определяем и создаем переменную, ссылающуюся на процесс Internet Explorer'а
Dim IE As InternetExplorer
Set IE = New InternetExplorer
' Открываем нужную ссылку и ждем, пока она прогрузится
IE.Navigate "http://адрес_ссылки"
While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
' Заполняем нужные поля для входа
IE.Document.Forms.loginForm.elements("login[name]").Value = "Логин"
IE.Document.Forms.loginForm.elements("login[pass]").Value = "Пароль"
IE.Document.Forms(0).Submit
' Опять ждем конца обработки
While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
' Переходим на страничку с нужными данными
IE.Navigate "http://адрес_ссылки"
While IE.Busy Or IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Wend
' Читаем данные нужной таблицы
With IE.Document.all.tags("table").Item(0)
For I = 0 To .all.tags("tr").Length - 1
For J = 0 To .all.tags("tr").Item(I).all.tags("td").Length - 1
Cells(I,J) = .all.tags("tr").Item(I).all.tags("td").Item(J).InnerText
Next J
Next I
End With

IE.Close
Set IE = Nothing
SendKeys "^%{F5}", True
Автор: ZlydenGL
Дата сообщения: 27.07.2010 07:02
Silenty, что-то я запутался. Эта комбинация клавиш должна вызываться в Excel или в Internet Explorer? Судя по твоему коду - она запускается уже после после того, как ты отключаешься от компоненты IE. В чем тогда ее сакральный смысл?

В общем случае твою задачу можно сделать так - предположим, что если пользователь на сайте авторизован, то общее число форм ввода на сайте уменьшается на единицу (минус форма авторизации, остается форма поиска + форма обратной связи к примеру). Тогда схема будет такая:

Код: If IE.Document.All.tags("form").Length = 3 Then ' на странице присутствует 3 формы - значит пользователь не авторизован
...
Else ' Пользователь авторизован, запускаем обычный процесс выгрузки
...
End If
Автор: lorents
Дата сообщения: 27.07.2010 10:17
Drazhar Спасибо.
У меня появилось пару вопросов, не могли бы Вы мне объяснить:
1. выше представленный код я должен вставить в Outlook?
2. по идея я должен получить вот такое окно?
[more] [/more]
3. Эта тема?

Код: .Location ="место где происходит задача"
Автор: madmax79
Дата сообщения: 27.07.2010 11:05
Есть вопрос

Добавляю картинку в Excel из 1С через OLE, таким макаром
Excel.ActiveSheet.Pictures.Insert("С:\пипец.jpg").Select();

картинки добавляются, всё ок, но при сохранении они в файл не пихаютья, тоесть при открытии на другом компе они не отображаються (я так понимаю он ссылки на объекты просто сохраняет), а как сохранить именно с картинками, а не линками.
Автор: Drazhar
Дата сообщения: 27.07.2010 12:02
lorents
см. ЛС
Автор: Silenty
Дата сообщения: 28.07.2010 00:15
ZlydenGL
Спасибо, у меня все получилось!
Автор: lorents
Дата сообщения: 28.07.2010 15:30
Добрый День!
Подскажите, пожалуйста, как можно просканировать все ячейки одного столбца, и вставить все не пустые ячейки в другой столбец?
Спасибо за внимание!
Автор: Drazhar
Дата сообщения: 28.07.2010 15:52
sourcerow=1'откуда
resrow=2'куда
j=1
for i=1 to 65535
if cells(i,sourcerow).value<>"" then
cells(j,resrow).value=cells(i,sourcerow).value
j=j+1
end if
next i

Ну или как вариант Специальная вставка- Пропускать пустые ячейки


Добавлено:
madmax79
Странно. У меня нормально сохраняет.
Автор: lorents
Дата сообщения: 28.07.2010 16:54
Drazhar
все получилось, спасибо!
Автор: Gyura
Дата сообщения: 28.07.2010 22:43
Напишите, пожалуйста,
как перевести результат, полученный функцией из VBA в эксель (функция типа y=x^2+x+...) учитывая что количество элементов заранее неизвестно? Значит, нужно как-то двухмерный массив перевести в Sheets("Sheet1").Cells(i,j), "x" в одну колонку, а ему соответствующий "y" в другую.
Заранее спасибо

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127

Предыдущая тема: VS 2010


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.