Discussion:
Web-Seiten per VBA-Code abfragen
(zu alt für eine Antwort)
Norbert Massing
2006-01-09 23:43:02 UTC
Permalink
Hallo,

hat jemand einen fertigen Code, mit dem ich in VBA den Inhalt einer
WEB-Seite in einen String-einlesen kann, den ich im Anschluss analysieren
möchte. Die analysierten Inhalte sollen in eine Tabelle geschrieben werden.

Danke

Beispiel-Seite: www.lotto.de
Thomas Ramel
2006-01-10 06:04:51 UTC
Permalink
Grüezi Norbert

Norbert Massing schrieb am 10.01.2006
Post by Norbert Massing
hat jemand einen fertigen Code, mit dem ich in VBA den Inhalt einer
WEB-Seite in einen String-einlesen kann, den ich im Anschluss analysieren
möchte. Die analysierten Inhalte sollen in eine Tabelle geschrieben werden.
Hmmm, weshalb willst/musst Du dies per VBA tun?

Du könntest eine Web-Abfrage über:
--> Menü: 'Daten'
--> Externe Daten
--> Neue Webabfrage

auf die betreffende WebSite erstellen und die Werte so gleich in ein
Tabellenblatt importieren.

Per VBA kannst Du dann ganze einfach diese Abfrage aktualisieren und hast
alle neuen Daten im Tabellenblatt.

Die von dir als Beispiel angegebenen Seite konnte ich zwar unter xl2000
nicht importieren, da sie Frames enthält, Du könntest es aber trotdem mal
versuchen.


Mit freundlichen Grüssen
Thomas Ramel (@Laptop)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Christian Friedrich
2006-01-10 11:30:02 UTC
Permalink
Hallo Norbert,

die folgende VBA-Prozedur für eine Webabfrage ist aus meinem Buch "VBA mit
Excel" entnommen...

Sub Webabfrage_erstellen()
Dim qtQueryTable As QueryTable
Set qtQueryTable = _
ActiveSheet.QueryTables.Add(Connection:= _

"URL;http://www.sportego.de/german/sport/olympische_spiele/winter2002/slc2002_19.php" _
, Destination:=Range("A1"))
With qtQueryTable
.Name = "Medaillenspiegel"
.FieldNames = True
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "8"
.Refresh BackgroundQuery:=False
End With
End Sub
--
Mit freundlichen Grüßen

Christian Friedrich
Workstream.de
http://www.workstream.de/ | http://www.e-workstream.com/

Mitglied von Microsoft CLIP (Community Leader/Influencer Program)
Post by Norbert Massing
Hallo,
hat jemand einen fertigen Code, mit dem ich in VBA den Inhalt einer
WEB-Seite in einen String-einlesen kann, den ich im Anschluss analysieren
möchte. Die analysierten Inhalte sollen in eine Tabelle geschrieben werden.
Danke
Beispiel-Seite: www.lotto.de
Michael Schwimmer
2006-01-10 13:29:09 UTC
Permalink
Hallo Norbert,
Post by Norbert Massing
hat jemand einen fertigen Code, mit dem ich in VBA den Inhalt einer
WEB-Seite in einen String-einlesen kann, den ich im Anschluss
analysieren möchte. Die analysierten Inhalte sollen in eine Tabelle
geschrieben werden.
neben den zwei Möglichkeiten, die dir von Thomas und Christian angeboten
wurden, kann man auch die Windows-API benutzen:

Private Sub cmbUrl_Click()
MsgBox Mid$(URL_Lesen("http://michael-schwimmer.de"), 1, 500)
End Sub


Option Explicit
Private Const INTERNET_FLAG_RELOAD = &H80000000
Private Const INTERNET_OPEN_TYPE_DIRECT = 1
Private Const INTERNET_OPEN_TYPE_PROXY = 3
Private Const strMeinAgent = "MeineApplikation"
Private Declare Function InternetOpen _
Lib "wininet" Alias "InternetOpenA" ( _
ByVal sAgent As String, _
ByVal lAccessType As Long, _
ByVal sProxyName As String, _
ByVal sProxyBypass As String, _
ByVal lFlags As Long) As Long
Private Declare Function InternetCloseHandle _
Lib "wininet" ( _
ByVal hInet As Long _
) As Integer
Private Declare Function InternetReadFile _
Lib "wininet" ( _
ByVal hFile As Long, _
ByVal sBuffer As String, _
ByVal lNumBytesToRead As Long, _
lNumberOfBytesRead As Long _
) As Integer
Private Declare Function InternetOpenUrl _
Lib "wininet" Alias "InternetOpenUrlA" ( _
ByVal hInternetSession As Long, _
ByVal lpszUrl As String, _
ByVal lpszHeaders As String, _
ByVal dwHeadersLength As Long, _
ByVal dwFlags As Long, _
ByVal dwContext As Long _
) As Long

Public Function URL_Lesen(strURL As String, Optional proxy As String)
Dim lngInetConnection As Long
Dim lngInetFile As Long
Dim strInetDummy As String
Dim lngInetBytesCount As Long
Dim lngInetBytesWant As Long
Dim Quelldaten As String
'Verbindung ins Inet herstellen
If proxy = "" Then
'Direkt, ohne proxy
lngInetConnection = InternetOpen(strMeinAgent, _
INTERNET_OPEN_TYPE_DIRECT, vbNullString, vbNullString, 0)
Else
'Über proxy
lngInetConnection = InternetOpen(strMeinAgent, _
INTERNET_OPEN_TYPE_PROXY, proxy, vbNullString, 0)
End If
'Handle zur URL holen
lngInetFile = InternetOpenUrl(lngInetConnection, strURL, _
vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)
If lngInetFile <> 0 Then 'Zugriff auf URL möglich
Do
lngInetBytesWant = lngInetBytesWant + 100000
'Buffer erzeugen
strInetDummy = String(lngInetBytesWant, 0)
'Daten holen
InternetReadFile lngInetFile, strInetDummy, _
lngInetBytesWant, lngInetBytesCount
'Wenn Buffer zu klein, dann Buffer größer machen
'und erneut lesen
If lngInetBytesWant <= lngInetBytesCount Then
'Handle schließen
InternetCloseHandle lngInetFile
'Handle zur URL holen
lngInetFile = InternetOpenUrl(lngInetConnection, strURL, _
vbNullString, ByVal 0&, INTERNET_FLAG_RELOAD, ByVal 0&)
End If
Loop While lngInetBytesWant <= lngInetBytesCount
InternetCloseHandle lngInetFile
Quelldaten = Left$(strInetDummy, lngInetBytesCount)
End If
'Verbindung schließen
InternetCloseHandle lngInetConnection
URL_Lesen = Quelldaten
End Function

Auf meiner Homepage findest du eine Mappe zum Downloaden.

Eine andere Möglichkeit wäre, via OLE den Internet-Explorer zu benutzen.

Sub test1()
Dim IE As Object
Dim strURL As String
Set IE = CreateObject("InternetExplorer.Application")

With IE
' .Visible = True
.Navigate "http://michael-schwimmer.de"
strURL = .Document.body.innertext
.Quit
End With
End Sub


MfG
Michael
--
Michael Schwimmer http://michael-schwimmer.de
Excel VBA ISBN 3-8273-2183-2
Excel Programmierung - Das Handbuch ISBN 3-8606-3548-4
Loading...