Toon posts:

[Excel / VBA / Scripttaal] Alternatief voor Excel web query?

Pagina: 1
Acties:
  • 372 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,

Dit is een vervolg op mijn eerdere posting [rml][ VBA]Excel, probleem met POST-style web query[/rml] ...

Tot voor kort kon ik via de URL http://quoteservice.cboe.com het bestand QuoteTable.dat tesamen met een parameter middels het VBA statement PostText downloaden met een POST-style web query.

Helaas is dit alles nu niet meer mogelijk omdat de site qua URL & code is gewijzigd Er zit nu een script en cookies in en daar kan Excel web query niet mee overweg.


Daarom denk ik aan een script wat de volgende zaken doet:

1. Op de URL http://www.cboe.com/delayedQuote/QuoteTableDownload.aspx wordt in het invoerveld een parameter ingevuld (Bv 'MSFT'). Deze parameter wordt ingelezen vanuit een Excel werkblad omdat dit een variabele is.

2. Vervolgens wordt de download button geactiveerd.

3. Het bestand QuoteData.dat wordt op de locatie 'C:\Temp\Ssskat22' geplaatst


Nu ben ik niet erg thuis in scrips vandaar de volgende vragen:

Is dit mogelijk via een script?
Zo ja, welke script talen/tools zijn aan te raden? (ik draai op Windows NT)
Is een script ook eenvouding vanuit VBA op te roepen? Zo ja, graag een voorbeeld.

Alvast bedankt voor jullie reakties!

- Bas

[ Voor 25% gewijzigd door Verwijderd op 01-10-2004 14:05 ]


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Zelf heb ik dit ooit een opgelost via de 'Microsoft HTML Object Library'. Deze kan je als reference selecteren in de Excel VBAProject. Van hieruit kan je dan een Internet Explorer sessie starten en de nodige acties uitvoeren:

Hieronder een stukje code uit oud projectje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private WithEvents itfIE As SHDocVw.InternetExplorer

Private sub RetrieveFile()
Dim itfDocument     As MSHTML.IHTMLDocument
Dim itfForms        As MSHTML.IHTMLElementCollection
Dim itfFormElement  As MSHTML.IHTMLFormElement
Dim itfInputElement As MSHTML.IHTMLInputElement

    Set itfIE = New InternetExplorer

    'browse to the correct page
    itfIE.navigate "http://www.cboe.com/delayedQuote/QuoteTableDownload.aspx"

    Set itfDocument = itfIE.document
    Set itfForms = itfDocument.forms             'Capture the forms on the page
    Set itfFormElement = itfForms(0)             'Select the form
    Set itfInputElement = itfFormElement.Item(0) 'Select the form element

    'rest moet je zelf maar afmaken, 't is slechts een handreiking...

end sub

Verwijderd

Topicstarter
Dank voor je reaktie & code Woudloper!

Helaas kreeg ik compileer problemen met jouw code.
- Compile error: Expected identifier
- Compile error: User-defined type not defined

Gebruik jij soms VisualBasic.net? Ik heb zelf enkel VisualBasic 6.3 als onderdeel van OfficeXP. Wel bevat mijn versie die 'Microsoft HTML Object Library'. Statements als 'InternetExplorer' en 'SHDocVw' worden helaas nog niet ondersteund in deze versie.
Zou je misschien je code aan kunnen passen?

Alvast bedankt!

- Bas

[ Voor 5% gewijzigd door Verwijderd op 01-10-2004 15:31 ]


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

@ VirtualReal: Nee, het is ooit gewoon een stukje code voor een .xla addin geweest met een aantal references. Ik vermoed dat je nog een paar extra references moet aanvinken in de VBAProject. 'SHDocVw' maakt bijvoorbeeld onderdeel uit van de reference 'Microsoft Internet Controls'. (was ik denk ik vergeten te melden). Verder staan bij mij ook nog de volgende references aangevinkt:
  • Visual Basic for Applications
  • Microsoft Excel 9.0 Object Library
  • OLE Automation
  • Microsoft Ofice 9.0 Object Library
  • Microsoft Forms 2.0 Object Library

Verwijderd

Topicstarter
Hey Woudloper,

Ik kwam er al achter ja, via http://www.microsoft.com/mind/0898/dom.asp dat die 'Microsoft Internet Controls' noodzakelijk zijn.

Nu krijg ik echter een 'syntax error' melding bij de regel:
code:
1
Private WithEvents itfIE As SHDocVw.InternetExplorer

Wat 'itfIE' betreft, moet ik deze 'As Object' declareren of als een ander gegevenstype?

Thanks!

- Bas

Verwijderd

'withevents' is enkel bruikbaar in een klassemodule. in de klassemodule zelf declareer je in een aparte sub welke events precies afgevangen moeten worden. om dit effectief te laten werken moet de klassemodule uiteraard geinstantieerd worden.

[ Voor 4% gewijzigd door Verwijderd op 01-10-2004 20:53 ]


Verwijderd

Topicstarter
Woudloper en Heretic, bedankt! Ik had nog geen ervaring met klassemodules.

Weet iemand hoe ik vervolgens op http://www.cboe.com/delayedQuote/QuoteTableDownload.aspx een variabele invul (bv 'MSFT') om het bestand QuoteData.dat vervolgens te downloaden?

- Bas

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Het hoeft niet percé in een klassemodule. In mijn .xla addin heb ik één 'normale' module waarin in een Auto_Open() sub heb die een menu aanmaakt met een aantal opties. Één van de menu opties roept een sub aan die op zijn beurt een nieuw formulier opent. In mijn geval frmGetExternalData.

De sub in het MainModule werkt als volgt:
Visual Basic:
1
2
3
4
5
6
7
Sub LoadForm()
    On Error Resume Next
    Dim x As frmGetExternalData
    Set x = New frmGetExternalData
    x.Show vbModal
    Set x = Nothing
End Sub


Op het formulier heb ik een aantal invoervelden waarop de parameters kunnen worden ingevuld en vervolgens wordt er middels de 'OK' button de sub gestart die het daadwerkelijk ophalen van de data doet (met de parameters die dus zijn ingevoerd)

Binnen de form code heb ik dus onder 'Option Explicit' het WithEvents itfIE gedeclareerd.

Wanneer je nu jouw gegevens in het tekstveld op de pagina wilt krijgen, moet je het volgende doen:
Visual Basic .NET:
1
2
itfInputElement.Value = Me.txtBoxMetDeWaarde.Value 'kan ook gewoon 
                                                   'een string zijn

Om nu het formulier te submitten moet je het volgende doen:

Visual Basic .NET:
1
2
Set itfInputElement = itfFormElement.Item(2)
itfInputElement.Click


Verder moet je dan maar even kijken hoe het dan verder gaat. De verwijzingen naar de formelementen hoeft niet precies te kloppen, maar dat moet je even uitzoeken (Bij de buren [ W&G ] weten ze hoe dat het beste kan, hier bij P&W denk ik ook wel).

Hoop dat je hier een beetje mee uit de voeten kan?

edit:
Hierbij de MSHTML Reference.
Hier ook nog een overview and tutorial

[ Voor 11% gewijzigd door Woudloper op 01-10-2004 23:47 ]

Pagina: 1