Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1112to1116
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Problem mit Regulärem Ausdr. (vbscript.regexp)

Problem mit Regulärem Ausdr. (vbscript.regexp)
Rüdiger
Hallo liebeVBA-Internet und RegEx-Experten,
ich möchte aus Internetseiten, die ich über VBA aktiviere (Adressen - und anderes - sind in Excelsheet gegeben) die Mailadresse ermitteln.
ransi hatte mir den folgenden Hinweis gegeben:
Code leicht angepasst:
Sub OuterSuch(ByVal oWebS As Object, strInAd As String)
Dim Antw As Long
Dim Quelltext As String
oWebS.Navigate strInAd
On Error GoTo errorhandler:
'   Do While oWeb.Busy
'      DoEvents
'   Loop
Quelltext = oWebS.Document.documentelement.outerhtml
If Not oWebS Is Nothing Then
oWebS.Quit
Set oWebS = Nothing
End If
Antw = MsgBox(Quelltext, vbOKOnly, "Inhalt der Seite" & strInAd)
MsgBox Join(Email_Filter(Quelltext), vbCrLf)
strMailAdr = Join(Email_Filter(Quelltext), " ")
Antw = MsgBox("Mailadressen: " & strMailAdr, vbOKOnly)
ex1.Cells(i, 15).Value = strMailAdr
Exit Sub
errorhandler:
If Err.Number = 70 Then
Antw = MsgBox("Zugriff auf die Seite " & strInAd & " verweigert", vbOKCancel, " _
Laufzeitfehler")
Err.Clear
End If
End Sub
Public Function Email_Filter(strB As String) As Variant
Dim varTmp() As Variant
Dim Regex As Object
Dim m
Dim Treffer
Dim lngIndex As Long
Set Regex = CreateObject("Vbscript.regexp")
With Regex
.Pattern = "\b(\w[-.\w]*@\w[-.\w]*\.[a-zA-Z]{2,6})\b"
.IgnoreCase = False
.Global = True
Set Treffer = .Execute(strB)
'   If Treffer.Count > 0 Then
ReDim varTmp(Treffer.Count - 1)
For Each m In Treffer
varTmp(lngIndex) = m.Value
lngIndex = lngIndex + 1
Next
'   End If
End With
Email_Filter = varTmp
Set Regex = Nothing
End Function

Das funktioniert problemlos, wenn auf der Seite eine Mailadresse vorhanden ist, also ein String, auf den der Pattern zutrifft.
Aber wenn kein solcher String gefunden wird, gibt es die Meldung
Index außerhalb des gültigen Bereiches
auf der Zeile
ReDim varTmp(Treffer.Count - 1)
Jetzt habe ich - oben auskommentiert - versucht Treffer.count abzufragen auf > 0.
Nur ist zu dem Zeitpunkt Treffer.Count noch nicht belegt.
Wie kann ich diesen Fall abfangen, dass auf der fraglichen Seite keine Mailadresse gefunden wird?
Vielen Dank für Eure Hilfe!
Grüße aus dem Frankenland
Rüdiger
AW: Problem mit Regulärem Ausdr. (vbscript.regexp)
29.10.2009 17:03:22
ransi
HAllo
ALso Treffer.count aubzufragen ist ist schon richtig.
Was sagt diese MSGBOX ?
Option Explicit
Public Sub aufruf()
MsgBox Join(Email_Filter("abcefg"), vbCrLf)
End Sub
ransi
AW: Problem mit Regulärem Ausdr. (vbscript.regexp)
30.10.2009 09:26:13
Rüdiger
Hallo ransi,
damit wollte ich mir den ganzen Inhalt von outerhtml anzeigen lassen. Aber MsgBox zeigt nicht alles, warum manchmal mehr, manchmal weniger kommt, weiß ich nicht. Wollte so prüfen ob die Mailadresse richtig gefunden wird. Aber Mailadressen werden ja richtig ermittelt, kann also raus.
Danke und Gruß
Rüdiger
AW: Problem mit Regulärem Ausdr. (vbscript.regexp)
29.10.2009 17:05:51
Anton
Hallo Rüdiger,
Auszug aus OH zu RegExp:
Test-Methode
--------------------------------------------------------------------------------
Beschreibung
Führt eine Suche mit regulärem Ausdruck auf eine angegebene Zeichenfolge aus und gibt einen booleschen Wert zurück, der angibt, ob ein Muster gefunden wurde.
Syntax
Objekt.Test(Zeichenfolge)
Die Syntax der Execute-Methode enthält folgende Teile:
Teil Beschreibung
Objekt Erforderlich. Stets der Name eines RegExp-Objekts.
Zeichenfolge Erforderlich. Die Textzeichenfolge, auf der der reguläre Ausdruck ausgeführt wird.
Hinweise
Das eigentliche Muster für die Suche mit regulärem Ausdruck wird mithilfe der Pattern-Eigenschaft des RegExp-Objekts festgelegt. Die RegExp.Global-Eigenschaft hat keine Auswirkungen auf die Test-Methode.
Die Test-Methode gibt True zurück, wenn ein Muster gefunden wurde, andernfalls False.
Der folgende Code veranschaulicht die Verwendung der Test-Methode:
Function RegAusdrTest(Suchmuster, Zeichenfolge)
Dim regAusdr, Rueckgabewert			' Variablen erstellen.
Set regAusdr = New RegExp			' Erstellt einen regulären Ausdruck.
regAusdr.Pattern = Suchmuster			' Legt das Suchmuster fest.
regAusdr.IgnoreCase = False			' Legt Groß-/Kleinschreibung fest.
Rueckgabewert = regAusdr.Test(Zeichenfolge)	' Führt den Suchtest aus.
If Rueckgabewert Then
RegAusdrTest = "Es wurden eine oder mehrere Entsprechungen gefunden."
Else
RegAusdrTest = "Es wurden keine Entsprechung gefunden."
End If
End Function
MsgBox(RegAusdrTest ("is.", "IS1 is2 IS3 is4"))
mfg Anton
Anzeige
AW: Problem mit Regulärem Ausdr. (vbscript.regexp)
30.10.2009 09:17:07
Rüdiger
Hallo Anton,
Du zitierst die Dokumentation von RegExp. Genau das suche ich noch. Kannst du mir einen Link auf eine gute Doku geben?
Danke für deine Hinweise. Diesen Code werde ich gleich einbauen und testen
Gruß
Rüdiger
gute Doku
30.10.2009 14:17:10
Anton
Hallo Rüdiger,
such auf deinem Rechner nach der Datei VBSCRIP5.CHM.
Bei mir liegt sie unter C:\Programme\Microsoft Office\Office10\1031\VBSCRIP5.CHM.
mfg Anton
AW: Problem mit Regulärem Ausdr. (vbscript.regexp)
30.10.2009 12:08:16
Rüdiger
Hallo Anton,
ich habe deinen Tipp eingebaut.
Es läuft!! Danke noch mal!
Grüße
Rüdiger
versuche es mal so.
29.10.2009 17:11:01
Tino
Hallo,

Public Sub Email_Filter(ByRef MailFilter() As String, strB As String)
   
   Dim varTmp() As Variant
   Dim Regex As Object
   Dim m As Object, Treffer As Object
   Dim lngIndex As Long
   Set Regex = CreateObject("Vbscript.regexp")
   With Regex
      .Pattern = "\b(\w[-.\w]*@\w[-.\w]*\.[a-zA-Z]{2,6})\b"
      .IgnoreCase = False
       .Global = True
   Set Treffer = .Execute(strB)

   
   For Each m In Treffer
      Redim strMailFilter(lngIndex)
      strMailFilter(lngIndex) = m.Value
      lngIndex = lngIndex + 1
   Next

   
   End With

   Set Regex = Nothing
   
End Sub

Sub Beispiel()
Dim strMailFilter() As String

Email_Filter strMailFilter, "Dein Text"

If IsArray(strMailFilter) Then
 MsgBox "gefunden"
Else
 MsgBox "nix gefunden!"
End If

End Sub
Gruß Tino
Anzeige
AW: versuche es mal so.
30.10.2009 09:39:32
Rüdiger
Hallo Tino,
Danke für den Hinweis.
Mit ISArray kann ich ja abfragen, ob tatsächlich mindestens ein Wert ermittelt wurden. Und das Ergebnis ist hier nichts anderes als einfach ein Array.
Danke und Gruß
Rüdiger
AW: versuche es mal so.
30.10.2009 16:28:08
Tino
Hallo,
dieses Array kannst Du mit Lbound und Ubound im True-Part auslesen.
Beispiel:
Public Sub Email_Filter(ByRef sMailFilter() As String, strB As String)
Dim varTmp() As Variant
Dim Regex As Object
Dim m As Object, Treffer As Object
Dim lngIndex As Long
Set Regex = CreateObject("Vbscript.regexp")
With Regex
.Pattern = "\b(\w[-.\w]*@\w[-.\w]*\.[a-zA-Z]{2,6})\b"
.IgnoreCase = False
.Global = True
Set Treffer = .Execute(strB)
For Each m In Treffer
ReDim Preserve sMailFilter(lngIndex)
sMailFilter(lngIndex) = m.Value
lngIndex = lngIndex + 1
Next
End With
Set Regex = Nothing
End Sub
Sub Beispiel()
Dim strMailFilter() As String
Dim A As Long
Email_Filter strMailFilter(), "mustermann@proviter.de"
If IsArray(strMailFilter) Then
For A = LBound(strMailFilter) To UBound(strMailFilter)
Debug.Print strMailFilter(A)
Next A
Else
MsgBox "nix gefunden!"
End If
End Sub

Gruß Tino
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige