Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Array an Function übergeben

Forumthread: VBA: Array an Function übergeben

VBA: Array an Function übergeben
11.10.2004 10:10:07
Matthias
Ich schreibe eine Funktion textsplit (analog zu Split in 2000).

Function textsplit(text, delimiter)
Dim textarr()
textsplit = textarr
End Function

Das funktioniert soweit auch.
Jetzt schimpft allerdings VBA bei der Übergabe über ungültigen Datentyp.
So zum Beispiel hier:
Dim StatArray
StatArray = textsplit(text, vbTab)
If UBound(StatArray) = 6 Then
^^^^^^
Mir ist unklar was ich ändern müsste.
Matthias
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Array an Function übergeben
ungar
Hallo Matthias,
du musst sowohl das "StatArray" als auch die Funktion als Datentyp "Variant" deklarieren. Damit klappt es

Sub TestTextSplit()
Dim StatArray As Variant
StatArray = textsplit(text, vbTab)
MsgBox UBound(StatArray)
End Sub


Function textsplit(text, delimiter) As Variant
Dim textarr(1 To 6)
textsplit = textarr
End Function

Anzeige
AW: VBA: Array an Function übergeben
Dan
Hallo Matthias, hier ein Beispiel. Man muss den Variant Type benutzen, weil es kann alles "tragen" :-). Dann benutzt man die VarType Funktion um feststellen zu koennen, was fuer eine Sub-Typ sich in der Variant Variable befindet. Gruss Dan, CZ.


Option Explicit
Private Function TextSplit(ByVal i_strText As StringByVal i_strDelimiter As StringAs Variant
    
    TextSplit = VBA.Split(i_strText, i_strDelimiter)
    
End Function
Private Sub Test()
    Dim arr As Variant
    
    
    arr = TextSplit("a,b,c,d,e,f", ",")
    
    ' Split : Returns a zero-based, one-dimensional array containing a specified number of substrings.
    If (VBA.VarType(arr) = vbString + vbArray) Then
        MsgBox "UBound(arr) = " & UBound(arr)
    Else
        MsgBox "Kein Array."
    End If
    
    ' ----------------------------------------------
    
    arr = TextSplit("", "")
    
    If (VBA.VarType(arr) = vbString + vbArray) Then
        MsgBox "UBound(arr) = " & UBound(arr)
    Else
        MsgBox "Kein Array."
    End If
    
    ' ----------------------------------------------
    
    arr = 150
    
    If (VBA.VarType(arr) = vbString + vbArray) Then
        MsgBox "UBound(arr) = " & UBound(arr)
    Else
        MsgBox "Kein Array."
    End If
    
'    Remarks
'
'    The VarType function never returns the value for vbArray by itself.
'    It is always added to some other value to indicate an array of a particular type.
'    The constant vbVariant is only returned in conjunction with vbArray to indicate that
'    the argument to the VarType function is an array of type Variant.
'    For example, the value returned for an array of integers is calculated as vbInteger + vbArray,
'    or 8194. If an object has a default property, VarType (object) returns the type of the
'    Object 's default property.
End Sub


Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA: Array an Funktion übergeben


Schritt-für-Schritt-Anleitung

Um ein Array in VBA an eine Funktion zu übergeben, kannst du die folgenden Schritte befolgen:

  1. Deklariere die Funktion: Stelle sicher, dass die Funktion den Datentyp Variant zurückgibt. Das ist wichtig, da du so ein Array verschiedener Typen übergeben kannst.

    Function textsplit(text As String, delimiter As String) As Variant
       Dim textarr() As String
       ' Hier wird das Array befüllt (z.B. mit Split)
       textarr = VBA.Split(text, delimiter)
       textsplit = textarr
    End Function
  2. Deklariere das Array als Variant: In dem Sub, wo du die Funktion aufrufst, deklariere das Array ebenfalls als Variant.

    Sub TestTextSplit()
       Dim StatArray As Variant
       StatArray = textsplit("a,b,c,d,e,f", ",")
       MsgBox UBound(StatArray) ' Gibt die obere Grenze des Arrays zurück
    End Sub
  3. Verwende das Array: Du kannst nun mit dem zurückgegebenen Array arbeiten, z.B. die Grenzen abfragen oder die Werte anzeigen.


Häufige Fehler und Lösungen

Fehler: Ungültiger Datentyp
Wenn du bei der Übergabe des Arrays einen Fehler erhältst, stelle sicher, dass du die Datentypen korrekt deklariert hast. Sowohl das Array als auch die Funktion sollten als Variant deklariert werden.

Lösung:

Dim StatArray As Variant
StatArray = textsplit("test", " ")

Fehler: UBound gibt einen Fehler zurück
Wenn du versuchst, UBound auf ein leeres Array anzuwenden, kann ein Fehler auftreten.

Lösung:
Überprüfe, ob das Array leer ist, bevor du UBound verwendest.


Alternative Methoden

Wenn du ein Array in VBA übergeben möchtest, gibt es auch alternative Ansätze:

  1. Verwendung von ByRef: Du kannst Arrays auch als Referenz übergeben, allerdings ist dies nicht der Standardansatz bei der Übergabe an Funktionen.

  2. Nutzung von Excel-Funktionen: Du kannst die Excel-Funktion Split verwenden, um String-Arrays direkt in VBA zu erzeugen.

    Dim arr As Variant
    arr = Split("eins,zwei,drei", ",")
    MsgBox arr(0) ' Gibt "eins" zurück

Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung von Arrays in VBA:

  1. Textsplit-Funktion: Hier wird die textsplit Funktion verwendet, um einen String in ein Array zu teilen.

    Function textsplit(text As String, delimiter As String) As Variant
       textsplit = Split(text, delimiter)
    End Function
  2. Aufruf der Funktion:

    Sub Test()
       Dim result As Variant
       result = textsplit("Hallo, Welt, VBA", ", ")
       MsgBox result(1) ' Gibt "Welt" zurück
    End Sub

Tipps für Profis

  • Verwende Variant für Flexibilität: Mit dem Variant-Datentyp kannst du verschiedene Array-Typen in einer Funktion verarbeiten.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um unerwartete Fehler beim Arbeiten mit Arrays zu vermeiden.
  • Dokumentiere deine Funktionen: Füge Kommentare hinzu, um die Funktionsweise deiner Array-Parameter zu erklären.

FAQ: Häufige Fragen

1. Wie gebe ich ein mehrdimensionales Array an eine Funktion weiter?
Du kannst ein mehrdimensionales Array ähnlich wie ein eindimensionales Array übergeben, indem du es als Parameter in der Funktion angibst.

2. Was ist der Unterschied zwischen ByVal und ByRef?
ByVal übergibt eine Kopie des Wertes, während ByRef eine Referenz auf das Originalobjekt übergibt. Bei Arrays ist ByRef der Standard.

3. Wie kann ich den Typ eines Arrays in VBA überprüfen?
Verwende die VarType-Funktion, um den Datentyp eines Arrays zu bestimmen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige