Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1464to1468
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

"Typen unverträglich" bei Übergabe Array an Funkt.

"Typen unverträglich" bei Übergabe Array an Funkt.
03.01.2016 17:45:40
Kay
Hallo ihr Lieben,
ich quäle mich seit über einer Stunde mit folgendem Problem herum, ohne dass mir ein Licht aufgehen würde. Es ist vermutlich ganz einfach, aber ich komme einfach nicht vom Fleck:
Wenn ich aus Routine1 heraus Routine2 aufrufe und an diese das Array Feld übergebe, erhalte ich "Typen unverträglich".
Ich verstehe nicht, warum, denn: Feld ist in Routine1 als String definiert, und der Parameter in Routine2 ist ebenfalls als String definiert.
ByVal habe ich übrigens nur verwendet, weil es mit ByRef nicht ging ("Argumenttyp ByRef unverträglich").
Vielleicht hat von Euch jemand eine Idee, hier der Code:
(Danke schon mal im Voraus!)
Public Sub Routine1()
Dim Feld(2) As String
Feld(1) = "hallo"
Feld(2) = "Welt"
Feld = Routine2(Feld)
End Sub
Public Function Routine2(ByVal Feld As String) As String
Feld(1) = Feld(1) & "x"
Feld(2) = Feld(2) & "y"
Routine2 = Feld
End Function

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: "Typen unverträglich" bei Übergabe Array an Funkt.
03.01.2016 17:53:49
Daniel
HI
so wie du das schreibst, erwartet die Funktion Routine2 eine einfache String-Variable.
in der Prozedur Routine1 übergibst du aber ein eindimensionales Array.
du musst hier mit Variant-Variabelen arbeiten, damit das funktioniert:
Public Sub Routine1()
Dim Feld As Variant
ReDim Feld(2) As String
Feld(1) = "hallo"
Feld(2) = "Welt"
Feld = Routine2(Feld)
End Sub
Public Function Routine2(ByVal Feld As Variant) As Variant
Feld(1) = Feld(1) & "x"
Feld(2) = Feld(2) & "y"
Routine2 = Feld
End Function

Anzeige
AW: "Typen unverträglich" bei Übergabe Array an Funkt.
03.01.2016 17:55:29
Sepp
Hallo Kay,
ohne den Sinn dahinter zu ergründen.
Public Sub Routine1()
Dim Feld(1) As String, varResult As Variant

Feld(0) = "hallo"
Feld(1) = "Welt"

varResult = Routine2(Feld)
End Sub

Public Function Routine2(ByVal Feld As Variant) As Variant
Dim lngI As Long

For lngI = LBound(Feld) To UBound(Feld)
  Feld(lngI) = Feld(lngI) & CStr(lngI)
Next

Routine2 = Feld
End Function

Gruß Sepp

Anzeige
AW: "Typen unverträglich" bei Übergabe Array an Funkt.
03.01.2016 19:11:18
Kay
Hallo!
Beide Varianten funktionieren wunderbar. Herzlichen Dank dafür!
Einfach aus Interesse an der Sache: Ist es doch irgendwie möglich, den Parameter in der Funktion Routine2 als String-ARRAY zu deklarieren, um an diese Funktion dann ein String-Array zu übergeben - oder geht das schlicht und einfach nicht?
Wenn ich hinter 'Feld' ein Klammernpaar schreibe, wird die Zeile Rot, was wohl auf eine unzulässige Syntax hinweist.
Public Function Routine2(ByVal Feld() As String) As String
(FALSCH)
Nochmals danke,
Kay

"Typen unverträglich" bei Übergabe Array an Funkt.
03.01.2016 19:31:19
Nepumuk
Hallo,
so geht das:
Option Explicit

Public Sub Routine1()
    Dim Feld() As String
    Redim Feld(1 To 2) As String
    Feld(1) = "hallo"
    Feld(2) = "Welt"
    
    Feld = Routine2(Feld)
    Debug.Print Feld(1), Feld(2)
End Sub

Public Function Routine2(ByRef Feld() As String) As String()
    Feld(1) = Feld(1) & "x"
    Feld(2) = Feld(2) & "y"
    Routine2 = Feld
End Function

Gruß
Nepumuk

Anzeige
AW: "Typen unverträglich" bei Übergabe Array an Funkt.
03.01.2016 19:49:45
Kay
So funktioniert es in der Tat! Respekt! Und vielen Dank!
Die zwei Unterschiede zu meiner (nicht funktionierenden) Version sind also:
1)
Dim Feld() As String
Redim Feld(1 To 2) As String
statt:
Dim Feld(2) As String
2)
Jeweils hinter dem Parameter und ganz am Ende der Funktionsdefinition ein leeres Klammernpaar.
Da wär ich in 100 Jahren nicht von selbst draufgekommen! ;-)
Danke!

AW: "Typen unverträglich" bei Übergabe Array an Funkt.
03.01.2016 21:24:12
Luschi
Hallo Kay,
zu 1) Dim Feld(2) As String
ist kein Fehler, sondern nur eine kleine Ungenauigkeit. Denn mit dieser Schreibweise gib es
3 Speicher-Adressen für das Array, da der interne Index von 0 bis 2 läuft und es somit
Feld(0), Feld(1) und Feld(2) gibt.
Da Nepumuk das Array 'Feld' als Referenz (byRef) übergibt, klappt das auch so:

Public Sub Routine1()
Dim Feld(2) As String
'ReDim Feld(0 To 2) As String
Feld(1) = "hallo"
Feld(2) = "Welt"
Call Routine2(Feld)
Debug.Print Feld(1), Feld(2)
End Sub
Public Function Routine2(ByRef Feld() As String) As String()
Feld(1) = Feld(1) & "x"
Feld(2) = Feld(2) & "y"
''Routine2 = Feld
End Function
Gruß von Luschi
aus klein-Paris
Anzeige

16 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige