2016-03-29 13 views
-1

VBAでは、配列をあるタイプから別のタイプに変換するにはどうすればよいですか?私の場合、 "String"型の配列を "variant"型に変換する必要があります。その型の配列ここVBA変換配列タイプ


Sub test_highlighfind() 

    Dim Rng As Range: Set Rng = ThisDocument.Range.Paragraphs(6).Range 

    Dim arr() As String: arr = Split(Rng.Text) 

    Call highlightWordsUsingFind(arr, ThisDocument, 7) 

End Sub 

Sub highlightWordsUsingFind(ByRef arr() As Variant, ByRef doc As Document, _ 
          Optional ByVal HighlightColor As Integer = 6) 

    Dim i As Long, SearchRange As Range 

    Set SearchRange = doc.Range 

    With SearchRange.Find 
     .Format = True 
     .MatchCase = False 
     .MatchWholeWord = True 
     .MatchWildcards = False 
     .MatchSoundsLike = False 
     .MatchAllWordForms = False 
     .Forward = True 
     .Wrap = wdFindContinue 
     .ClearFormatting 

     For i = LBound(arr) To UBound(arr) 
      .Text = arr(i) 
      .Execute 'Execute// Runs the find operation. Returns True if the find operation is successful 
      SearchRange.HighlightColorIndex = HighlightColor 
     Next 
    End With 
End Sub 

、コード例である私は、「文字列」ByRef arr() As Stringにパラメータタイプを変更することができます知っているが、私は、「変異体」タイプの配列を返す他の機能を持っています上記の関数への出力が必要です

答えて

2

highlightWordsUsingFindサブを書いたので、最も簡単な方法は、私のようにパラメータをVariantに変更することですGSergによって指定される。パラメータが実際にIsArray関数を持つ配列であることを確認することをお勧めします。 Hereは他の変換例です。あなたの宣言の中括弧を削除

Function StringToVariantArray(ByRef arr() As String) As Variant() 
    Dim index As Integer 
    Dim result() As Variant 
    Redim result(LBound(arr) To UBound(arr)) 
    For index = LBound(arr) To UBound(arr) 
     result(index) = arr(index) 
    Next 
    StringToVariantArray = result 
End Function 

Sub test_highlighfind() 
    Dim Rng As Range 
    Dim varr() As Variant 

    Set Rng = ThisDocument.Range.Paragraphs(6).Range 
    varr = StringToVariantArray(Split(Rng.Text)) 

    Call highlightWordsUsingFind(varr, ThisDocument, 7) 
End Sub  
+0

ありがとうございました。私はこのアイデアを持っていましたが、私はちょっとループがなくても解決策があることを願っていました。再び感謝して、うまくいけばあなたから新しいことを学びます。 –

3

別のオプションは、新たなVariant配列を作成することです。

Sub highlightWordsUsingFind(ByRef arr As Variant, ...) 

次に、arr()を直接渡すことができます。オリジナルの配列を参照するVariant/Arrayにラップされます(コピーは行われません)。

+0

感謝の気持ち –

関連する問題