2016-03-29 174 views
-1

在VBA中,如何將數組從一種類型轉換爲另一種?在我的情況下,我想將類型「字符串」的數組轉換爲類型「變體」,因爲我有一個需要的函數參數該類型的數組。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是其他一些轉換示例。

另一種選擇是創建一個新的Variant數組:

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

在聲明中刪除括號。

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

然後您可以直接通過arr()。它將被包裝到一個Variant/Array,它將引用原始數組(因此不會進行復制)。

+0

感謝您的信息 –