Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1816to1820
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

Übergabe Array an Prozedur

Übergabe Array an Prozedur
26.02.2021 12:05:56
Manuel
Hallo zusammen
Ich habe ein Problem mit der Übergabe von Arrays mit einem benutzerdefinierten Datentyp an eine andere Prozedur. Die Übergabe muss ByVal erfolgen, da ich in der zweiten Prozedur eine Variante des ersten Arrays erstelen möchte.
Bei der Übergabe erscheint allerdings die Fehlermeldung: "Nur benutzerdefinierte Typen, die in öffentlichen Objektmodulen definiert sind, können in den oder aus dem Typ Variant umgewandelt werden oder an eine zur Laufzeit auflösbare Funktion weitergegeben werden."
Anbei ein kleines Pseudo-Beispiel, dass mein Problem verdeutlicht.
Type Person
Name As String
Alter As Integer
End Type
Public Gruppe(1 To 3) As Person
Sub InputPersonen()
Gruppe(1).Name = "Hans"
Gruppe(1).Alter = 64
Gruppe(3).Name = "Fritz"
Gruppe(3).Alter = 48
Gruppe(3).Name = "Martha"
Gruppe(3).Alter = 48
Variante Gruppe, 2, "Frida"
End Sub
Sub Variante(ByVal gr As Variant, Index As Integer, NeuerName As String)
gr(Index).Name = NeuerName
End Sub
Dazu habe ich diesen Beitrag gefunden.
https://www.ms-office-forum.net/forum/showthread.php?t=200614
Leider bin ich aber nicht dazu fähig, den Code bei mir zu implementieren, weil ich ja ein Array von Personen habe und nicht eine Person zu einer Collection hinzufüge.
Vielen Dank für die Hilfe
Freundliche Grüsse
Manuel Roth

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übergabe Array an Prozedur
26.02.2021 12:35:30
Nepumuk
Hallo Manuel,
so:
Option Explicit

Private Type Person
    Name As String
    Alter As Integer
End Type

Public Sub InputPersonen()
    
    Dim Gruppe(1 To 3) As Person
    
    Gruppe(1).Name = "Hans"
    Gruppe(1).Alter = 64
    
    Gruppe(3).Name = "Fritz"
    Gruppe(3).Alter = 48
    
    Gruppe(3).Name = "Martha"
    Gruppe(3).Alter = 48
    
    Variante Gruppe, 2, "Frida"
    
End Sub

Private Sub Variante(ByRef gr() As Person, Index As Integer, NeuerName As String)
    
    gr(Index).Name = NeuerName
    
End Sub

Gruß
Nepumuk

Anzeige
AW: Übergabe Array an Prozedur
26.02.2021 12:40:52
Daniel
HI
da die Variable Gruppe projektweit gültig ist, brauchst du diese Variable nicht zu übergeben.
Wenn du in der Sub mit Gruppe arbeiten willst, aber Gruppe selbst nicht verwendet werden soll, dann musst du dir eine Kopie der Variable anlegen und damit arbeiten:
...
Variante 2, "Frida"
End Sub
Sub Variante(Index As Integer, NeuerName As String)
dim gr() as Person
gr = Gruppe
gr(Index).Name = NeuerName
End Sub
geht natürlich auch mit Übergabe wenn du willst.
da byVal hier nicht funktioniert, lege dir eine Kopie an und arbeite damit:
...
Variante Gruppe, 2, "Frida"
End Sub
Sub Variante(gr() As Person, Index As Integer, NeuerName As String)
dim gr2() as Person
gr2 = gr
gr2(Index).Name = NeuerName
End Sub
Gruß Daniel

Anzeige
AW: Übergabe Array an Prozedur
27.02.2021 18:52:42
Manuel
Hallo
Habe gar nicht daran gedacht, dass ich die ByVal Referenz auch einfach nachträglich künstlich erstellen kann.
Vielen Dank.
Manuel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige