Profi-Excel.de

Die Seite für den professionellen Umgang mit Excel und VBA

Archiv für die 'VBA Makros' Kategorie

Kleinanzeigen Suche

22. 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:
  1. Type SearchWebType
  2.   Website As String
  3.   HTMLSearchQuery As String
  4.   BodyResult As String
  5. End Type
  6.  
  7. Sub Kleinanzeigen_Suche()
  8. 'Verweis notwendig: Microsoft HTML Object Library
  9. '
  10. 'HTML Seiten abrufen und Seiteninhalt durchsuchen
  11. '03-2011
  12. 'E.Bimczok http://profi-excel.de
  13. '
  14. 'Liest beispielhaft die Webseiten der Kleinanzeigenportale
  15. 'Findix.com und Quoka.de ein
  16.  
  17. Dim objMSHTML As New MSHTML.HTMLDocument
  18. Dim myHTMLDoc As New MSHTML.HTMLDocument
  19. Dim myResults() As SearchWebType
  20. Dim myWebsiteSearch As String
  21. Dim subSearchString As String
  22. Dim k As Long
  23. Dim foundPos As Long
  24.  
  25. ReDim myResults(1 To 2)
  26.  
  27. myWebsiteSearch = "Fahrrad"
  28. subSearchString = "BMX" 'nach Begriff in den Ergebnissen suchen
  29.  
  30. myResults(1).Website = "http://www.findix.com"
  31. myResults(1).HTMLSearchQuery = "http://www.findix.com/suche/"
  32.  
  33. myResults(2).Website = "http://www.quoka.de"
  34. myResults(2).HTMLSearchQuery = "http://www.quoka.de/searchresult.cfm?SEARCH1="
  35.  
  36. 'alle definierten Webseiten abrufen
  37. For k = LBound(myResults) To UBound(myResults)
  38.  
  39.   'z.B. http://www.findix.com/suche/fahrrad
  40.   Set myHTMLDoc = objMSHTML.createDocumentFromUrl( _
  41.      myResults(k).HTMLSearchQuery & myWebsiteSearch, _
  42.      vbNullString)
  43.  
  44.   'Abwarten, bis die Seite geladen ist
  45.   While myHTMLDoc.readyState <> "complete"
  46.     DoEvents
  47.   Wend
  48.  
  49.   myResults(k).BodyResult = myHTMLDoc.body.innerText
  50.  
  51. Next k
  52.  
  53. 'detaillierte Suche
  54. For k = LBound(myResults) To UBound(myResults)
  55.   foundPos = InStr(1, myResults(k).BodyResult, subSearchString, vbTextCompare)
  56.   If foundPos> 0 Then
  57.     'wenn Begriff gefunden wurde, 20 Zeichen davor
  58.     'und 200 Zeichen danach anzeigen
  59.     MsgBox ("Webseite: " & myResults(k).Website & vbCr & _
  60.     Mid(myResults(k).BodyResult, foundPos - 20, 200))
  61.   End If
  62. Next k
  63.  
  64. End Sub

Abgelegt unter VBA Makros | Keine Kommentare »

Suche mit Regular Expressions in VBA

18. 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:
  1. Sub VBA_Suche_Mit_RegularExpression()
  2.  
  3. 'sucht mit der Hilfe von Regulären Ausdrücken
  4. '03-2011
  5. 'E.Bimczok http://profi-excel.de
  6.  
  7. Const myText As String = "Dieser Satz kein Verb"
  8.  
  9. Dim myRegEx As Object
  10.  
  11. Set myRegEx = CreateObject("VBScript.RegExp")
  12.  
  13. '\w alle Zahlen (0-9), Buchstaben (A-z) oder "_"
  14. '+ mindestens einmal aber beliebig oft
  15. myRegEx.Pattern = "\w+"
  16.  
  17. Set result = myRegEx.Execute(myText)
  18.  
  19. MsgBox result(0).Value 'Dieser
  20.  
  21. 'Buchstabe "S", danach die oben beschriebene Klasse \w
  22. myRegEx.Pattern = "S\w+"
  23.  
  24. Set result = myRegEx.Execute(myText)
  25.  
  26. MsgBox result(0).Value 'Satz
  27.  
  28. End Sub

Abgelegt unter VBA Makros | Keine Kommentare »

Mehrfach Suchen und Ersetzen mit Statistik

7. 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 »

Excel Diagramm Linien auf schwarz-weiss stellen

13. 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 »

Diagramm Linien einfärben

13. 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 »

Doppelte Einträge entfernen und Übereinstimmungen suchen

15. 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 »

Excel Tabelle in Textform konvertieren

27. 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 »

Zeilennummer von Objekten bestimmen

21. 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 »

Makros einbinden

23. September 2006

 Grundsätzlich gibt es drei Möglichkeiten, Makros in Excel einzubinden

  1. Makros in einer Arbeitsmappe speichern: Das Makro ist nur für diese Datei verfügbar.
  2. Makros in der Makroarbeitsmappe "Personal.xls" speichern: Das Makro ist nur für diesen Computer, aber für alle Dateien verfügbar.
  3. Makros als Add-In speichern: Das Makro ist nur für diesen Computer, aber für alle Dateien verfügbar. Das Add-In lässt sich - wie eine Datei - einfach weitergeben

A.) Wenn Sie ein Makro nur in einer bestimmten Datei verwenden wollen, können Sie das Makro in dieser Datei Weiterlesen »

Abgelegt unter VBA Makros | 10 Kommentare »

Mehrfach Suchen und Ersetzen

21. September 2006

In den beiden Arrays können die korresponierenden Begriffe eingetragen werden. Momentan werden die Buchstaben a Weiterlesen »

Abgelegt unter VBA Makros | 19 Kommentare »