Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I want to use a VBScript regular expression to parse a string in VBA.
Can some kind soul get this to work? Thanks. Sub x() Dim s As String s = "First Name: Joe" Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "First Name: (\w+)" Set Matches = regEx.Execute(s) ' This statement fails - no such property Set oMatch = Matches.subMatches(0) ' I can enumerate through Matches but the enumeration doesn't include "Joe" End Sub |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
On Fri, 13 Jul 2007 17:50:34 -0700, "
wrote: I want to use a VBScript regular expression to parse a string in VBA. Can some kind soul get this to work? Thanks. Sub x() Dim s As String s = "First Name: Joe" Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "First Name: (\w+)" Set Matches = regEx.Execute(s) ' This statement fails - no such property Set oMatch = Matches.subMatches(0) ' I can enumerate through Matches but the enumeration doesn't include "Joe" End Sub Sub x() Dim regEx As Object Dim Matches As Object Dim s As String s = "First Name: Joe" Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "First Name: (\w+)" Set Matches = regEx.Execute(s) ' This statement fails - no such property ' Set oMatch = Matches.subMatches(0) Debug.Print Matches(0).submatches(0) End Sub --ron |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
That works. Thanks Ron!
|
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Ron,
How would you use it to find multiple matches: if s = "First Name: Joe, First Name: Ron" your debug.print returns Joe - how do you get to Ron as well? TIA, Bernie "Ron Rosenfeld" wrote in message ... On Fri, 13 Jul 2007 17:50:34 -0700, " wrote: I want to use a VBScript regular expression to parse a string in VBA. Can some kind soul get this to work? Thanks. Sub x() Dim s As String s = "First Name: Joe" Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "First Name: (\w+)" Set Matches = regEx.Execute(s) ' This statement fails - no such property Set oMatch = Matches.subMatches(0) ' I can enumerate through Matches but the enumeration doesn't include "Joe" End Sub Sub x() Dim regEx As Object Dim Matches As Object Dim s As String s = "First Name: Joe" Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "First Name: (\w+)" Set Matches = regEx.Execute(s) ' This statement fails - no such property ' Set oMatch = Matches.subMatches(0) Debug.Print Matches(0).submatches(0) End Sub --ron |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
How would you use it to find multiple matches: if
s = "First Name: Joe, First Name: Ron" Hi Bernie. Try setting the Global search to True. Sub x() Dim regEx As Object Dim Matches As Object Dim s As String s = "First Name: Joe, First Name: Ron" Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "First Name: (\w+)" regEx.Global = True regEx.IgnoreCase = True Set Matches = regEx.Execute(s) Debug.Print Matches(0).Submatches(0) Debug.Print Matches(1).Submatches(0) 'or Dim sName For Each sName In Matches Debug.Print sName.Submatches(0) Next sName End Sub -- Dana DeLouis "Bernie Deitrick" <deitbe @ consumer dot org wrote in message ... Ron, How would you use it to find multiple matches: if s = "First Name: Joe, First Name: Ron" your debug.print returns Joe - how do you get to Ron as well? TIA, Bernie "Ron Rosenfeld" wrote in message ... On Fri, 13 Jul 2007 17:50:34 -0700, " wrote: I want to use a VBScript regular expression to parse a string in VBA. Can some kind soul get this to work? Thanks. Sub x() Dim s As String s = "First Name: Joe" Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "First Name: (\w+)" Set Matches = regEx.Execute(s) ' This statement fails - no such property Set oMatch = Matches.subMatches(0) ' I can enumerate through Matches but the enumeration doesn't include "Joe" End Sub Sub x() Dim regEx As Object Dim Matches As Object Dim s As String s = "First Name: Joe" Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "First Name: (\w+)" Set Matches = regEx.Execute(s) ' This statement fails - no such property ' Set oMatch = Matches.subMatches(0) Debug.Print Matches(0).submatches(0) End Sub --ron |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Should there be no Names in the string, one test to use is:
If Matches.Count 0 Then ... Other articles say it's better to use "Test." I'm not sure which is faster/better in this case. Sub Demo() Dim Matches As Object Dim s As String Dim sName s = "First Name: Joe, First Name: Ron" 'or s = "Text withe no Names" With CreateObject("VBScript.RegExp") .Pattern = "First Name: (\w+)" .Global = True .ignorecase = True If .Test(s) Then Set Matches = .Execute(s) For Each sName In Matches Debug.Print sName.Submatches(0) Next sName Else 'No Names End If End With End Sub -- Dana DeLouis "Dana DeLouis" wrote in message ... How would you use it to find multiple matches: if s = "First Name: Joe, First Name: Ron" Hi Bernie. Try setting the Global search to True. Sub x() Dim regEx As Object Dim Matches As Object Dim s As String s = "First Name: Joe, First Name: Ron" Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "First Name: (\w+)" regEx.Global = True regEx.IgnoreCase = True Set Matches = regEx.Execute(s) Debug.Print Matches(0).Submatches(0) Debug.Print Matches(1).Submatches(0) 'or Dim sName For Each sName In Matches Debug.Print sName.Submatches(0) Next sName End Sub -- Dana DeLouis "Bernie Deitrick" <deitbe @ consumer dot org wrote in message ... Ron, How would you use it to find multiple matches: if s = "First Name: Joe, First Name: Ron" your debug.print returns Joe - how do you get to Ron as well? TIA, Bernie "Ron Rosenfeld" wrote in message ... On Fri, 13 Jul 2007 17:50:34 -0700, " wrote: I want to use a VBScript regular expression to parse a string in VBA. Can some kind soul get this to work? Thanks. Sub x() Dim s As String s = "First Name: Joe" Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "First Name: (\w+)" Set Matches = regEx.Execute(s) ' This statement fails - no such property Set oMatch = Matches.subMatches(0) ' I can enumerate through Matches but the enumeration doesn't include "Joe" End Sub Sub x() Dim regEx As Object Dim Matches As Object Dim s As String s = "First Name: Joe" Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "First Name: (\w+)" Set Matches = regEx.Execute(s) ' This statement fails - no such property ' Set oMatch = Matches.subMatches(0) Debug.Print Matches(0).submatches(0) End Sub --ron |
#7
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
On Fri, 13 Jul 2007 22:40:20 -0400, "Bernie Deitrick" <deitbe @ consumer dot
org wrote: Ron, How would you use it to find multiple matches: if s = "First Name: Joe, First Name: Ron" your debug.print returns Joe - how do you get to Ron as well? TIA, Bernie Bernie, Excerpted From: http://support.microsoft.com/default...02&Product=vbb • Global: Sets a Boolean value or returns a Boolean value that indicates whether a pattern must match all the occurrences in a whole search string, or whether a pattern must match just the first occurrence. In my response to the OP, I was just modifying his routine. But, ordinarily I set the Global property to True, so as to enable multiple matches. Here's the routine modified, with the changes noted: ========================================== Option Explicit Sub x() Dim regEx As Object Dim Matches As Object '------------------- Dim i As Long '-------------------- Dim s As String s = "First Name: Joe First Name: Bernie" Set regEx = CreateObject("VBScript.RegExp") '----------------------- regEx.Global = True '----------------------- regEx.Pattern = "First Name: (\w+)" Set Matches = regEx.Execute(s) '------------------------------ For i = 0 To Matches.Count - 1 Debug.Print Matches(i).submatches(0) Next i '-------------------------------- End Sub ============================================== --ron |
#8
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
On Fri, 13 Jul 2007 22:40:20 -0400, "Bernie Deitrick" <deitbe @ consumer dot
org wrote: Ron, How would you use it to find multiple matches: if s = "First Name: Joe, First Name: Ron" your debug.print returns Joe - how do you get to Ron as well? TIA, Bernie Bernie, Excerpted From: http://support.microsoft.com/default...02&Product=vbb • Global: Sets a Boolean value or returns a Boolean value that indicates whether a pattern must match all the occurrences in a whole search string, or whether a pattern must match just the first occurrence. In my response to the OP, I was just modifying his routine. But, ordinarily I set the Global property to True, so as to enable multiple matches. Here's the routine modified, with the changes noted: ========================================== Option Explicit Sub x() Dim regEx As Object Dim Matches As Object '------------------- Dim i As Long '-------------------- Dim s As String s = "First Name: Joe First Name: Bernie" Set regEx = CreateObject("VBScript.RegExp") '----------------------- regEx.Global = True '----------------------- regEx.Pattern = "First Name: (\w+)" Set Matches = regEx.Execute(s) '------------------------------ For i = 0 To Matches.Count - 1 Debug.Print Matches(i).submatches(0) Next i '-------------------------------- End Sub ============================================== --ron |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Can someone help me with this regular expression? | Excel Discussion (Misc queries) | |||
Help with regular expression | Excel Programming | |||
Regular Expression | Excel Discussion (Misc queries) | |||
Declare RegExp from Vbscript.dll | Excel Programming | |||
Regular Expression for cell address | Excel Programming |