22nd März 2011
Das Beispiel zeigt, wie man mit VBA auf Webseiten - in diesem Fall auf Kleinanzeigenportale - zugreifen kann und die Inhalte der Webseite auswertet.
Zunächst muss der Verweis (im VBE unter Extras - Verweise auf die Microsoft HTML Object Library gesetzt werden. Dann ist es möglich ein neues Objekt vom Typ MSHTML.HTMLDocument anzulegen. Dieses Objekt kennt die Methode "createDocumentFromUrl", der man im Wesentlichen die URL der Webseite übergibt.
Bei den meisten Portalen ist es möglich, die Suche nach Kleinanzeigen über eine URL und der Angabe des Suchbegriffs zu starten. Findix.com hat das sehr einfach gelöst und bietet die URL http://www.findix.com/suche/ an, die direkt mit dem Suchbegriff verknüpft werden kann d.h. z.B. http://www.findix.com/suche/fahrrad. Bei Quoka ist die Syntax etwas komplizierter (Übergabe des Arguments "Search1" an die cfm Funktion), aber der Suchbegriff kann auch hier einfach hinten an die URL angehängt werden.
Der Aufruf von "createDocumentFromUrl" liefert ein Objekt zurück, dass wesentliche Informationen zur Webseite enthält. Am Einfachsten kann man sich die Struktur und die Details des Objekts im Lokalfenster im Debug-Mode ansehen. In diesem Codebeispiel wird im Element "Body" die innerText-Eigenschaft ausgelesen, die den Webseiten Inhalt enthält.
Anschließend kann beispielhaft in den Ergebnissen in myResults(k).BodyResult mit einer Schleife nach
weiteren Details gesucht werden.
VBA:
-
Type SearchWebType
-
Website As String
-
HTMLSearchQuery As String
-
BodyResult As String
-
End Type
-
-
Sub Kleinanzeigen_Suche()
-
'Verweis notwendig: Microsoft HTML Object Library
-
'
-
'HTML Seiten abrufen und Seiteninhalt durchsuchen
-
'03-2011
-
'E.Bimczok http://profi-excel.de
-
'
-
'Liest beispielhaft die Webseiten der Kleinanzeigenportale
-
'Findix.com und Quoka.de ein
-
-
Dim objMSHTML As New MSHTML.HTMLDocument
-
Dim myHTMLDoc As New MSHTML.HTMLDocument
-
Dim myResults() As SearchWebType
-
Dim myWebsiteSearch As String
-
Dim subSearchString As String
-
Dim k As Long
-
Dim foundPos As Long
-
-
ReDim myResults(1 To 2)
-
-
myWebsiteSearch = "Fahrrad"
-
subSearchString = "BMX" 'nach Begriff in den Ergebnissen suchen
-
-
myResults(1).Website = "http://www.findix.com"
-
myResults(1).HTMLSearchQuery = "http://www.findix.com/suche/"
-
-
myResults(2).Website = "http://www.quoka.de"
-
myResults(2).HTMLSearchQuery = "http://www.quoka.de/searchresult.cfm?SEARCH1="
-
-
'alle definierten Webseiten abrufen
-
For k = LBound(myResults) To UBound(myResults)
-
-
'z.B. http://www.findix.com/suche/fahrrad
-
Set myHTMLDoc = objMSHTML.createDocumentFromUrl( _
-
myResults(k).HTMLSearchQuery & myWebsiteSearch, _
-
vbNullString)
-
-
'Abwarten, bis die Seite geladen ist
-
While myHTMLDoc.readyState <> "complete"
-
DoEvents
-
Wend
-
-
myResults(k).BodyResult = myHTMLDoc.body.innerText
-
-
Next k
-
-
'detaillierte Suche
-
For k = LBound(myResults) To UBound(myResults)
-
foundPos = InStr(1, myResults(k).BodyResult, subSearchString, vbTextCompare)
-
If foundPos> 0 Then
-
'wenn Begriff gefunden wurde, 20 Zeichen davor
-
'und 200 Zeichen danach anzeigen
-
MsgBox ("Webseite: " & myResults(k).Website & vbCr & _
-
Mid(myResults(k).BodyResult, foundPos - 20, 200))
-
End If
-
Next k
-
-
End Sub
Abgelegt unter VBA Makros | Keine Kommentare »
18th März 2011
VBA kennt von sich aus keine Regulären Ausdrücke. Um einen ersten Einstieg in den Umgang mit Regulären Ausdrücken zu bekommen, gibt es unten ein Beispiel, wie man die Bibliothek verfügbar macht.
Über CreateObject erzeugt man das Objekt. Die Pattern Eigenschaft legt das Pattern für die Suche fest, hierbei werden üblicherweise Zeichenklassen verwendet, wie z.B. \w (siehe unten) oder \d für alle Zahlen, d.h. 0-9.
Der Vorteil von Regulären Ausdrücken liegt in den sehr umfassenden Möglichkeiten auch komplexe Suchen bzw. Prüfungen vorzunehmen. Ein übliches Beispiel ist die Prüfung der Gültigkeit von Emailadressen.
VBA:
-
Sub VBA_Suche_Mit_RegularExpression()
-
-
'sucht mit der Hilfe von Regulären Ausdrücken
-
'03-2011
-
'E.Bimczok http://profi-excel.de
-
-
Const myText As String = "Dieser Satz kein Verb"
-
-
Dim myRegEx As Object
-
-
Set myRegEx = CreateObject("VBScript.RegExp")
-
-
'\w alle Zahlen (0-9), Buchstaben (A-z) oder "_"
-
'+ mindestens einmal aber beliebig oft
-
myRegEx.Pattern = "\w+"
-
-
Set result = myRegEx.Execute(myText)
-
-
MsgBox result(0).Value 'Dieser
-
-
'Buchstabe "S", danach die oben beschriebene Klasse \w
-
myRegEx.Pattern = "S\w+"
-
-
Set result = myRegEx.Execute(myText)
-
-
MsgBox result(0).Value 'Satz
-
-
End Sub
Abgelegt unter VBA Makros | Keine Kommentare »
7th März 2011
Mehrfaches "Suchen und Ersetzen" hat bereits in diesem Artikel viel Interesse erzeugt. Die Frage nach statistischen Informationen ließ sich aber nicht so einfach beantworten. Dazu sind einige Anpassungen am Code notwendig.
Excel bietet über den Aufruf im Menü "Suchen und Ersetzen" von sich aus bereits die Informationen, wie viele Inhalte ersetzt wurden. Leider ist es nach meiner Kenntnis nicht möglich, diese Informationen über VBA direkt Weiterlesen »
Abgelegt unter VBA Makros | Keine Kommentare »
24th Oktober 2010
Die meisten Foren oder Suchmaschinen stellen die Seiten so dar, dass z.B. die ersten 20 Ergebnisse auf der ersten Seite angezeigt werden, Ergebnisse 21-40 auf der zweiten Seite usw. Die Ergebnisseiten sind wiederum durchnummeriert und entweder durch eine Klick auf die Seitennummer oder über "next page" erreichbar.
Leider sind die Links für "next page" oder "Seite 2" häufig extrem klein, d.h man muss relativ genau mit der Maus zielen, um den Link anzuklicken. Speziell bei Notebooks kann das unterwegs zur Geduldsprobe werden, diese unergonomisch kleinen Schaltflächen zu treffen.
Abhilfe schafft das Firefox-Plug-In "SmartPager". Über die Tastenkombination "Alt+ Bild-nach-unten" kann auf die nächste Seite geblättert werden. Alternativ kann auch die Kombination "Alt Gr + Bild-nach-unten" verwendet werden, dann liegen die beiden Tasten sehr ergonomisch, um mit der rechten Hand bedient zu werden.
Insbesondere beim längeren Lesen in Foren lässt sich der berüchtigte "Maus-Arm" durch die wesentliche bessere Ergonomie vermeiden.
Abgelegt unter Firefox | Keine Kommentare »
24th Oktober 2010
Wer gerne mit der Tastatur arbeitet, kann dies sehr gut mit einem Plug-In für den Firefox unterstützen.
Aber zunächst die Anleitung, wie man über die Tastatur suchen kann: Mit Strg+k gelangt man in das Suchfenster, nach Eingabe des Suchbegriffs und Drücken der "Enter-Taste" werden die Suchergebnisse dargestellt.
Plug-In "Search Keys"
Das genannte Plug-In nummeriert nun die Suchergebnisse automatisch durch. D.h. das erste Suchergebnis hat die Nummer 1, das zweite die Nummer 2 usw. Jetzt lassen sich die Suchergebnisse über die entsprechenden Nummern auf der Tastatur öffnen. D.h. die das Zeichen 1 auf der Tastatur öffnet das erste Suchergebnis. Mit gedrückter Alt-Taste lassen sich die Suchergebnisse in einem neuen Tab öffnen.

Suchergebnisse mit Search-Keys im Firefox
Abgelegt unter Firefox | Keine Kommentare »
13th Mai 2009
Falls man in Diagrammen die Linienfarben auf schwarz stellen möchte, lässt sich das einfach mit diesem Makro unterstützen. So lassen sich auf Knopfdruck alle Diagramme innerhalb einer Excel-Datei umstellen.
Zur Funktion des Makros: Weiterlesen »
Abgelegt unter VBA Makros | Keine Kommentare »
13th Mai 2009
Falls man in Diagrammen die Linienfarben ändern möchte, lässt sich das einfach mit diesem Makro unterstützen. So lassen sich auf Knopfdruck alle Diagramme innerhalb einer Excel-Datei abhängig von der Linienart (Markierung) einfärben.
Zur Funktion des Makros: Weiterlesen »
Abgelegt unter VBA Makros | Keine Kommentare »
15th Juni 2008
Mit einer Collection ist in VBA einiges möglich. Doppelte Einträge lassen sich eliminieren, indem beim Hinzufügen des Elements zur Collection ein eindeutiger "Key" zugewiesen wird. Jeder Key darf nur einmal in Weiterlesen »
Abgelegt unter VBA Makros | 3 Kommentare »
27th Oktober 2006
Der markierte Bereich wird spaltenweise auf die Textlänge untersucht und damit die Breite der Spalten (Anzahl der Buchstaben) festgelegt. Dabei wird die Text-Eigenschaft des Range-Objektes verwendet, so dass der angezeigte Text erscheint. Weiterlesen »
Abgelegt unter VBA Makros | Keine Kommentare »
21st Oktober 2006
Über die for each -Schleife wird auf alle Objekte vom Typ "shape" im aktiven Arbeitsblatt zugegriffen. Das Shape-Objekt hat die Eigenschaft TopLeftCell, die ein Rangeobjekt zurück gibt. Über die row-Eigenschaft lässt sich dann die Weiterlesen »
Abgelegt unter VBA Makros | Keine Kommentare »