Thema Datum  Von Nutzer Rating
Antwort
Rot Verarbeiten eines Arrays als Rückgabewert einer Funktion
22.12.2018 12:10:25 Binary91
NotSolved
22.12.2018 12:14:53 Binary
NotSolved
22.12.2018 12:26:28 Gast58745
NotSolved
22.12.2018 12:30:00 Gast21755
NotSolved
22.12.2018 12:49:39 Binary91
NotSolved
22.12.2018 15:03:53 Gast84359
NotSolved
23.12.2018 12:38:43 Binary91
NotSolved
22.12.2018 15:19:04 Gast30152
NotSolved
23.12.2018 15:56:55 Gast7777
*
NotSolved
24.12.2018 11:19:39 Binary91
NotSolved

Ansicht des Beitrags:
Von:
Binary91
Datum:
22.12.2018 12:10:25
Views:
998
Rating: Antwort:
  Ja
Thema:
Verarbeiten eines Arrays als Rückgabewert einer Funktion

Guten Morgen,

ich bin Neuling in der VBA-Programmierung und scheitere gerade an Fragestellung, die nach eigener Google-Recherche ein häufigeres Problem zu sein scheint.

Ich habe eine Klasse mit verschiedenen String-Arrays als private Eigenschaften.

Diese String-Arrays sollen per Property-Let-Prozedur bei der Objektinitialisierung befüllt werden, und zwar anhand von Zellverbundadressen, die dem Objekt bei Initialisierung mitgegeben werden.

Da ich mehrere dieser Arrays habe und somit mehrere Let-Prozeduren, habe ich den Code zur Befüllung des Arrays anhand eines Adressenstrings in eine externe Funktion ausgelagert.

Hier etwas Code:

'Modul "Projektinitialisierung"
'Ein neues Objekt der Klasse "Profile" erzeugen und initialisieren
  Set clsProfile = New Profile
  clsProfile.Initialize strAddrA, strAddrB, strAddrC

'Klassenmodul "Profile"
Option Explicit

Private bIsInitialized As Boolean
Private aMonthList(), aCurrencyList(), aDesignList() As String

Public Function Initialize(sTableMonthsAddr As String, sTableCurrenciesAddr As String, sTableDesignsAddr As String) As Integer
    If bIsInitialized Then
        Initialize = 1
        Exit Function
    End If
    MonthList = sTableMonthsAddr
    CurrencyList = sTableCurrenciesAddr
    DesignList = sTableDesignsAddr
End Function


Public Property Let MonthList(sAddr As String)
    If bIsInitialized = False Then
        aMonthList = mArrayStrCreateFromAddr(sAddr, 1)    'hier wird der Fehler erzeugt!
    End If
End Property

 

'Modul "Allgemeine Funktionen"

Option Explicit

Public Function mArrayStrCreateFromAddr(sAddr As String, iSheet As Integer, Optional iUBound As Integer = -1) As String()
    Dim i As Integer
    Dim rngList As Range
    Set rngList = Worksheets(iSheet).Range(sAddr)
    Dim aList() As Variant
    If iUBound >= 0 Then
        ReDim aList(iUBound) As String
    Else
        ReDim aList(rngList.Rows.Count - 1) As String
    End If
    For i = 1 To UBound(aList) + 1
        aList(i - 1) = rngList.Cells(i, 1).Value
    Next
    mArrayStrCreateFromAddr = aList
End Function

 

Scheinbar ist es allgemein nicht gut, Arrays mittels Zuweisungsoperator "=" zu kopieren, aber laut Google-Recherche sollte dies so eigentlich funktionieren.

Wenn ich alles, also jegliche String-Arrays in Variant-Arrays abändere und auch den Rückgabetyp der Funktionen auf Variant ändere, dann funktioniert alles bestens. Aber es stört mich, dass ich auf Variant zurückgreifen muss..

Gibt es eine bessere Möglichkeit? Ggf. mit einer korrekten "Array-Kopier-Schleifenfunktion"?

 

Merci und Lg

Binary


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Verarbeiten eines Arrays als Rückgabewert einer Funktion
22.12.2018 12:10:25 Binary91
NotSolved
22.12.2018 12:14:53 Binary
NotSolved
22.12.2018 12:26:28 Gast58745
NotSolved
22.12.2018 12:30:00 Gast21755
NotSolved
22.12.2018 12:49:39 Binary91
NotSolved
22.12.2018 15:03:53 Gast84359
NotSolved
23.12.2018 12:38:43 Binary91
NotSolved
22.12.2018 15:19:04 Gast30152
NotSolved
23.12.2018 15:56:55 Gast7777
*
NotSolved
24.12.2018 11:19:39 Binary91
NotSolved