Hallo Norbert,
Post by Norbert Massinghat 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