Anzeige
Archiv - Navigation
1836to1840
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

Array an Sub übergeben

Array an Sub übergeben
16.07.2021 17:48:33
Steve
Hallo Excel-Pros
vorab hier die Beispieldatei:
https://www.herber.de/bbs/user/147162.xlsb
Ich habe 2 Subs
das erste Sub "Kommentar" schreibt die Zellwerte in das Array arKom

Sub Kommentar(ByVal loTage As Long, ByRef arKom As String)
ReDim Preserve arKom(UBound(arKom) - (UBound(arKom) - loTage))
For i = 0 To loTage
arKom(i + 1) = Cells(ActiveCell.Row, ActiveCell.Column + i).Value
Next
End Sub
das zweite Sub "Aufruf" soll das Schleifenende(loTage) an das Kommentarsub übergeben, damit da dann das array definiert und gefüllt werden kann.

Sub Aufruf()
loTage = Range("C1").Value
Call Kommentar(loTage, arKom)
For i = 0 To loTage
ActiveCell.Offset(1, i).AddComment Text:=arKom(i)
Next
End Sub
leider gibt funktioniert das mit der Übergabe des Arrays nicht.
Fehlermeldung: Argumenttyp byRef unverträglich und das array arKom ist markiert.
wo liegt mein Fehler?
Danke vorab für eure Mühe

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

Betreff
Datum
Anwender
Anzeige
AW: Array an Sub übergeben
16.07.2021 18:17:11
Nepumuk
Hallo Steve,
im Prinzip so:
ByRef arKom() As String
ABER, dein Redim kann nicht funktionieren denn arKom hat eine feste Größe.
Gruß
Nepumuk
AW: Array an Sub übergeben
16.07.2021 19:23:24
Steve
Danke erstmal die () waren mir nicht bewusst.

Option Explicit
Dim loTage As Long              'für wieviel Tage (Schleifenende)
Dim arKom() As String           'Definition des Arrays
Dim i As Byte                   'Schleifenzähler
Dim KomAlt As String            'Kommentararray
Sub Kommentar(ByVal loTage As Long)
ReDim arKom(0 To loTage - 1)
For i = 0 To loTage - 1
arKom(i) = Cells(ActiveCell.Row, ActiveCell.Column + i).Value
Next
End Sub
Sub Aufruf()
loTage = Range("C1").Value
Call Kommentar(loTage)
For i = 0 To loTage - 1
ActiveCell.Offset(1, i).AddComment Text:=arKom(i)
Next
End Sub
So jetzt klappt es ;)
Danke nochmals
Anzeige
AW: Array an Sub übergeben
16.07.2021 18:19:11
Daniel
dein Fehler?
eigentlich in allem.
- das fängt schon damit dann, dass du arKom als Projektweit gültige Variable deklariert hast.
eine Projekt weit gültige Variable braucht man nicht übergeben, die ist auch so in allen Makros und Funktionen bekannt und verwendbar.
- du hast arKom schon bei der Erstdeklaration eine feste Dimensionierung angegeben, damit ist diese nicht mehr änderbar und kein ReDim mehr möglich. Redimmen kann man nur Variablen ohne feste Dimensionierung (dim arKom as Variant)
- du legst in der Sub Kommentar fest, dass die Übergabevariable eine einfache String-Variable sein soll also musst du bei Aufruf einen einfachen String übergeben und kein Array!
- beim RedimPreserve ist nur die obere Grenze veränderbar (UBound) die untere Grenze (LBound) muss so bleiben wie sie ist.
du hast da UBound mit LBound verwechselt.
probier mal die Sache in ein Makro zu packen.
Gruß Daniel
Anzeige

36 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige