2016-03-29 20 views
-1

In VBA, wie konvertiere ich ein Array von einem Typ zu einem anderen? In meinem Fall möchte ich ein Array vom Typ "String" in "Variante" konvertieren, weil ich einen Funktionsparameter habe ein Array dieses Typs.VBA Array konvertieren Typ


hier ist ein Beispiel-Code,

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 

ich weiß, ich den Typ-Parameter ändern können „string“ ByRef arr() As String aber ich andere Funktionen haben, die ein Array vom Typ „Variante“ zurückkehren und ich brauche den Ausgang für die Funktion über

Antwort

2

Da Sie die highlightWordsUsingFind Sub geschrieben haben, ist der einfachste Weg, den Parameter auf Variant wie schon ich zu ändern nicht unter GSerg. Es kann eine gute Idee sein, sicherzustellen, dass der Parameter tatsächlich ein Array mit der IsArray-Funktion ist. Here sind einige andere Umwandlungsbeispiele.

Eine weitere Option ist einen neuen Variant-Array zu erstellen:

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

danke sehr, ich hatte diese idee aber ich hoffte irgendwie, dass es eine lösung ohne schleifen gab ... danke nochmal, und hoffentlich werde ich neue dinge von dir lernen –

3

die Klammern in Ihrer Erklärung entfernen.

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

Dann können Sie arr() direkt übergeben. Es wird in eine Variant/Array eingebunden, die sich auf das Original-Array bezieht (so wird kein Kopieren stattfinden).

+0

danke für info –