Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Excel VBA函数处理分隔符_String_Excel_Vba_Delimiter - Fatal编程技术网

String Excel VBA函数处理分隔符

String Excel VBA函数处理分隔符,string,excel,vba,delimiter,String,Excel,Vba,Delimiter,我需要有关创建Excel VBA函数的帮助 字符串变量“mystring”可以有三种不同的格式 第一个是普通的文本字符串。这个案子不需要什么。 其他两个版本需要处理标记和href链接,以便在以后的html输出中使用 Excel示例: 在XSL的帮助下,我可以处理不同的href属性 我认为这可以在VBA中使用: If mystring = "myLink" Then xmf.writeline "<mytag mystringName=""" & mystring & """

我需要有关创建Excel VBA函数的帮助

字符串变量“mystring”可以有三种不同的格式

第一个是普通的文本字符串。这个案子不需要什么。 其他两个版本需要处理标记href链接,以便在以后的html输出中使用

Excel示例:

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

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

If mystring = "myLink" Then
xmf.writeline "<mytag mystringName=""" & mystring & """href= """ & href & """ > """
End If
希望您能帮助我使这个函数(或其他函数)工作


非常感谢。

如果我理解正确,您的字符串可能有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"
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
然后,您编写的函数可以如下所示:

公共函数GetXML(str作为字符串)作为字符串
将mylinkPos设置为整数,将nolinkPos设置为整数
Dim remainderString作为字符串,nextDelimiterPos作为字符串
Dim href作为字符串,标题作为字符串
mylinkPos=InStr(str,“mylink;”)
nolinkPos=InStr(str,“nolink;”)
如果mylinkPos=0和nolinkPos=0,则
GetXML=“”
退出功能
如果结束
remainderString=Mid(str,8)
如果nolinkPos>0,则
headline=remainderString
href=“#”
其他的
nextDelimiterPos=InStr(余数字符串,“;”)
href=Left(remainerString,nextDelimiterPos-1)
headline=Mid(剩余字符串,下一个delimiterpos+1)
如果结束
GetXML=“”
端函数

当然,使用正则表达式会更简单、更优雅,您可以通过从
Tools->References
添加对
MicrosoftVBScript正则表达式5.5
的引用来使用正则表达式,为什么不编写一个包装函数来处理逻辑:

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

这是一个比我的更好的解决方案。
'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
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