2

Excel VBA 関数の作成についてサポートが必要です。

文字列変数 " mystring " は、3 つの異なる形式を持つことができます。

1 つ目は、通常のテキスト文字列です。この場合は何も必要ありません。他の 2 つのバージョンは、後のhtml 出力のタグhref リンクを処理するために必要です。

エクセルの例:

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"

そのため、文字列に myLink タグまたは noLink タグが含まれているかどうかを識別し対応する hrefxml href-attributeに割り当てる必要があります。noLink の場合は、 を記述して<nolink>-tag、関数に を追加させる方が使いやすいとhref='#'思います。

これらの区切り文字を設定するためのより良い方法があれば、提案をお待ちしています。

また、実際の見出しテキストは xml-tag の一部であり、後で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

私はオンラインで見つけたこの関数につまずきました:区切り文字を少し違った方法で書く必要があります。 "<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

この機能(または他の機能)を機能させるのを手伝ってくれることを願っています。

どうもありがとう。

4

2 に答える 2

4

私の理解が正しければ、文字列には 1 つまたは 3 つのセクションが含まれる可能性があります。次のように、(1 つ以上の文字の) 単一の区切り文字を使用してこれらのセクションを区切り、一重引用符を削除します。

'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

もちろん、Microsoft VBScript Regular Expressions 5.5fromへの参照を追加することで使用できる正規表現を使用する方が、はるかに単純でエレガントTools -> Referencesです。

于 2012-11-19T08:44:29.127 に答える
2

ロジックを処理するラッパー関数を作成してみませんか。

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
于 2012-11-19T11:18:47.300 に答える