I need help with the creation of an Excel VBA-function.
A string variable “mystring” can have three different formats.
The first is just a normal text string. Nothing needed for this case.
The other two versions are needed to handle tags and href links for a later html output.
Excel Example:
mystring = "This is a headline"
mystring = "<myLink href='some/link.html'</myLink> This is also a headline"
mystring = "<noLink href='#'</noLink> This is another headline"
So, I need to identify if the string contains a myLink or noLink tag and assign the according href to an xml href-attribute.
For noLink it’s more userfriendly to just write the <nolink>-tag and let the function add the href='#', I believe.
I am open to suggestions if there’s a better way to set up those delimiters.
Also, the actually headline text is part of the xml-tag and later used for the mystringName xml-attribute.
For the above examples these should be the resulting xml tags:
<mytag mystringName="This is a headline"/>
<mytag mystringName="This is also a headline" href="some/link.html" />
<mytag mystringName="This is another headline" href="#" />
With the help of XSL I can then deal with the different href attributes.
How I think this could be used inside VBA:
If mystring = "myLink" Then
xmf.writeline "<mytag mystringName=""" & mystring & """href= """ & href & """ > """
End If
I have stumpled over this function I found online:
I would need to write the delimiter a bit differently.
"<myLink href=some/link.html>"This is also a headline
Maybe this is a good starting point to split the pieces and put them in an array.
Public Function GetStringFromQuotation(ByRef sText, sDelimiter As String)
'Store the position of the 1st and 2nd delimiter in the String
Dim iPositionOfFirstDelimiter As Integer, iPositionOfSecondDelimiter As Integer
'Store the length of the delimiter
Dim iLenDelimiter As Integer
'Deliver nothing if the function doesn't get a single usable parameter
'otherwise you'd get an error later on
If Len(sText) = 0 And Len(sDelimiter) = 0 Then
GetStringFromQuotation = ""
Exit Function
End If
iLenDelimiter = Len(sDelimiter)
'Find 1st occurence of delimiter
iPositionOfFirstDelimiter = InStr(sText, sDelimiter)
'Find the 2nd one, starting right behind the first one
iPositionOfSecondDelimiter = InStr(iPositionOfFirstDelimiter + iLenDelimiter, _
sText, sDelimiter)
'If there are 2 occurences
If iPositionOfFirstDelimiter > 0 And iPositionOfSecondDelimiter > 0 Then
'Take the part of the string that's right between them
GetStringFromQuotation = Mid(sText, iPositionOfFirstDelimiter + iLenDelimiter, _
iPositionOfSecondDelimiter - iPositionOfFirstDelimiter - iLenDelimiter)
Else
GetStringFromQuotation = ""
End If
End Function
Hope you can help me to get this function (or some other) to work.
Thanks a lot.
If I understand correctly, your string can potentially have 1 or 3 sections. I would use a single delimiter (of one or more characters) to separate these sections, and drop the single-quotes, as follows:
The function you write can then look like this:
Of course, it would be much simpler and more elegant to use regular expressions, which you can use by adding a reference to
Microsoft VBScript Regular Expressions 5.5fromTools -> References.