Excel VBA函数处理分隔符

我需要帮助创build一个Excel VBA函数。

一个stringvariables“ mystring ”可以有三种不同的格式。

第一个只是一个普通的文本string。 没有什么需要这种情况下。 需要另外两个版本来处理标签href链接,以便稍后的html输出

Excel示例:

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" 

因此,我需要确定该string是否包含myLinknoLink 标记 ,并将相应的href分配给xml href属性 。 对于noLink,只需要编写<nolink>-tag并让函数添加href='#' ,我相信更友好。

如果有更好的方法来设置这些分隔符,我愿意接受build议。

另外,实际标题文本是xml标记的一部分,后来用于mystringName xml-attribute。

对于上面的例子,这些应该是由此产生的XML标签:

 <mytag mystringName="This is a headline"/> <mytag mystringName="This is also a headline" href="some/link.html" /> <mytag mystringName="This is another headline" href="#" /> 

XSL的帮助下,我可以处理不同的href属性。

我认为这可以在VBA中使用:

 If mystring = "myLink" Then xmf.writeline "<mytag mystringName=""" & mystring & """href= """ & href & """ > """ End If 

我已经在网上find了这个function:我需要写一个不同的分隔符。 "<myLink href=some/link.html>"This is also a headline也许这是一个很好的起点分裂的片断,把他们在一个数组。

 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 

希望你能帮助我得到这个function(或其他)的工作。

非常感谢。

如果我理解正确,你的string可能有1或3个部分。 我将使用单个分隔符(一个或多个字符)来分隔这些部分,并删除单引号,如下所示:

 'Using a semicolon mystring = "This is a headline" mystring = "myLink;some/link.html;This is also a headline" mystring = "noLink;#;This is another headline" 

你写的函数看起来像这样:

 Public Function GetXML(str As String) As String Dim mylinkPos As Integer, nolinkPos As Integer Dim remainderString As String, nextDelimiterPos As String Dim href As String, headline As String mylinkPos = InStr(str, "mylink;") nolinkPos = InStr(str, "nolink;") If mylinkPos = 0 And nolinkPos = 0 Then GetXML = "<mytag mystringName=""" & str & """ />" Exit Function End If remainderString = Mid(str, 8) If nolinkPos > 0 Then headline = remainderString href = "#" Else nextDelimiterPos = InStr(remainderString, ";") href = Left(remainderString, nextDelimiterPos - 1) headline = Mid(remainderString, nextDelimiterPos + 1) End If GetXML = "<mytag mystringName=""" & headline & """ href=""" & href & """ />" End Function 

当然,使用正则expression式会更加简单和优雅,您可以通过在Tools -> References添加对Microsoft VBScript Regular Expressions 5.5的引用来使用正则expression式。

为什么不写一个包装函数来处理逻辑:

 Private Function makeLink(linkText As String, Optional linkUrl As String) Dim linkUrlText As String If (Len(Trim(linkUrl)) > 0) Then linkUrlText = " href=" & """" & linkUrl & """" End If makeLink = "<mytag mystringName=""" & linkText & """" & linkUrlText & " />" End Function 

那么你可以这样称呼它:

 Sub test() Dim link1 As String link1 = makeLink("This is a headline") link2 = makeLink("This is also a headline", "some/link.html") link3 = makeLink("This is another headline", "#") End Sub