Как написать такой макрос для Excel?
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Как написать такой макрос для Excel? Expand / Collapse
Автор
Сообщение
14.07.2007 3:49
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 12.08.2007 19:33
Сообщ.: 4, Visits: 44
Помогите пожалуйста с написанием макроса, т.к. в VB особенно не разбираюсь.

Макрос должен по нажатию на кнопку брать значения из выделенных яечеек в Excel, добавлять их (по очереди) к заданной в коде URL строке, к примеру www.ttt.by/nnnnnn&34=" ..... " , искать в полученной странице определенную строку (заданную в коде) и запоминать значение определенного параметра из найденной строки. Далее в зависимости от значения (всего их 3-5 к примеру) закрашивать ячейку в определенный цвет. Цвет будет задаваться в зависимости от значения.

Неплохо было бы встроить ещё эту кнопку в панель.

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

Заранее спасибо!
Сообщ. #914731
16.07.2007 9:53
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 21.03.2008 5:12
Сообщ.: 386, Visits: 4 197
?
готовый вариант, думаю, никто не предложит.
разложите задачу на составляющие и решайте по этапам.

Мои пять копеек:
Открыть страничку можно сл.образом:
в ячейку А1 внести "drugoi" (без кавычек)
в макрос:

sURL = "Explorer http://" & Cells(1, 1) & ".livejournal.com/"
Shell sURL, vbNormalFocus

Сообщ. #914743
16.07.2007 17:01
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 16.04.2008 11:44
Сообщ.: 366, Visits: 2 473
Думаю, 5 копеек, которые предложил Masalov Вам не пригодятся. Очевидно, что средствами VBA, Нормально, эта задача не решается. Основная трудность состоит в получении доступа к удаленному контенту страницы. Для решения этой проблемы настоятельно рекомендую изучить win api
Для начала:
http://www.codenet.ru/progr/vbasic/FTP.php
затем:
http://msdn2.microsoft.com/en-us/library/ms918375.aspx

Это практически готовое решение.

С уважением,
Сообщ. #914761
16.07.2007 23:21
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 12.08.2007 19:33
Сообщ.: 4, Visits: 44
Всем спасибо! Видимо сам я тут не справлюсь.
Сообщ. #914768
17.07.2007 15:22
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 19.08.2008 15:27
Сообщ.: 112, Visits: 681
Вот таким макаром можно сформировать строку с запросом из  ячеек.

Из объектной модели эксплорера можно вытащить все, либо распарсить HTML, либо по коллекциям элементов лазить.

Если поискать в google на 'CreateObject("InternetExplorer.Application")'

вылезет море подобных примеров. что дальше требуется я не совсем въехал поскольку непонятно, что за определенная строка в определенной странице итп.

Нужно быть поконкретнее и дать адреса или сампл с исходными данными выложить.


Sub doCells()
    Dim urlStr As String
    urlStr = "www.ttt.by"
    Dim c As Range
    For Each c In Selection.Cells
     urlStr = urlStr & "nn = " & c.Value
    Next c
    Dim objie As Object
    Set objie = CreateObject("InternetExplorer.Application")
   
    With objie
        .Visible = True
        .Navigate urlStr
        Do While .Busy: DoEvents: Loop
        Do While .ReadyState <> 4:  Loop
    End With
   
End Sub

Сообщ. #914781
19.07.2007 6:52
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 12.08.2007 19:33
Сообщ.: 4, Visits: 44
rank1 (17.07.2007)
Вот таким макаром можно сформировать строку с запросом из ячеек.

Из объектной модели эксплорера можно вытащить все, либо распарсить HTML, либо по коллекциям элементов лазить.

Если поискать в google на 'CreateObject("InternetExplorer.Application")'

вылезет море подобных примеров. что дальше требуется я не совсем въехал поскольку непонятно, что за определенная строка в определенной странице итп.

Нужно быть поконкретнее и дать адреса или сампл с исходными данными выложить.


Sub doCells()
Dim urlStr As String
urlStr = "www.ttt.by"
Dim c As Range
For Each c In Selection.Cells
urlStr = urlStr & "nn = " & c.Value
Next c
Dim objie As Object
Set objie = CreateObject("InternetExplorer.Application")

With objie
.Visible = True
.Navigate urlStr
Do While .Busy: DoEvents: Loop
Do While .ReadyState <> 4: Loop
End With

End Sub



Таким методом макрос вызовет IE и откроет URL в нём. А мне нужно, чтобы процесс произходил в "backgroung".

Про строку, конкретно не могу сказать т.к. она будет меняться. В ообщем проблема у меня в том, как в URL странице найти мне нужные данные и запомнить их, записать в файл, хоть как.

Данные будут выглядеть, к примеру, так:
----------------------------------------------
var id_note="";
var idLabel="";
var id="";

idLabel = "Status:";
id = "Information Received";
-----------------------------------------------

Вот мне и надо, что бы в зависимости от значения "ID" ячейка закрашивалась в заданный цвет.

Information Received -> Желтый
Transferred -> Зеленый
Missed -> Красный
Сообщ. #914811
19.07.2007 10:04
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 19.08.2008 15:27
Сообщ.: 112, Visits: 681
http://vbaexpress.com/kb/getarticle.php?kb_id=799

Вот примерчик получающий файл через XMLHTTP.

А в чем проблема-то с бэкграундом? Установить свойство visible у Эксплорера и тогда он не будет видимым. А поиск выполнить распарсив HTMl с помощью Microsoft regular Expression component. У Эксплорера есть свойство document (а у него InnerHTML) по объектной модели документа лазить перебирая коллекции тегов. Если у тега имя есть - можно его найти методом  GetElementByID.

Можно на форму плюхнуть Explorer component и через него делать.

Можно скачать веб страницу и искать в ней используя регулярные выражения. Если в одной странице много всяких значений, то приджется искать их и засовывать в хеш scripting.dictionary, а потом как-то выполнять сопоставление и в нужный цвет ячейки красить. Вот пример поиска c помощью RegExp:

Sub useRegExp()
    Dim s
    s = "var id_note="""";" & vbCrLf & _
        "var idLabel="""";" & vbCrLf & _
        "var id="""";" & vbCrLf & _
        "" & vbCrLf & _
        "idLabel = ""Status:"";" & vbCrLf & _
        "id = ""Information Received"";"
    MsgBox s
   
    Dim re As New RegExp
    re.MultiLine = True
    re.IgnoreCase = True
    re.Pattern = "id.*=.*\x22(Information Received)\x22\;"
    Dim mm As MatchCollection
    Dim mt As Match
    Set mm = re.Execute(s)
    If mm.Count > 0 Then
     Set mt = mm(0)
     MsgBox mt.SubMatches(0)
    End If
End Sub

Сообщ. #914812
19.07.2007 10:53
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 31.07.2007 9:43
Сообщ.: 1, Visits: 8
Попробуйте Данные -> Импорт внешних данных -> Создать веб запрос.

Далее вводите адрес, выбираете нужную таблицу. и ОК.

Поковыряйтесь в настройках и можете авто настройки установки.

Сообщ. #914814