Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1156to1160
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 ParmaArray übergeben

Array an ParmaArray übergeben
Schattenkirchner
Hallo Spezialisten,
ich habe eine Prozedur mit einem ParamArray:
Sub TEST (ParamArray Number())
End Sub
Der Aufruf
TEST 1, 6, 9, 55, 1000
funktioniert einwandfrei, sofern sich die Anzahl der Numbers in grenzen hält. Wenn ich aber ca. 250 Argumente eintippen muss, wirds schon müssig. Ich könnte das ganze natürlich über eine Schleife lösen, dann wäre aber mein ParamArray überflüssig.
Meine Frage:
Kann ich ein bestehendes Array (bestArray) an meine Prozedur übergeben?
Der Aufruf wäre:
TEST bestArray
Hat jemand von euch eine Idee?
Danke im Voraus,
Stefan

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

Betreff
Benutzer
Anzeige
AW: Array an ParmaArray übergeben
30.05.2010 18:01:45
fcs
Hallo Stefan,
du kannst die Daten eines vorhandenen Arrays an eine als Variant deklarierte Variable übergeben.
Innerhalb eines VBA-Projekts kannst du auch mit als Public deklarierten Variablen arbeiten, wenn diese in verschiedenen Prozeduren verwendet/bearbeitet werden sollen.
Gruß
Franz
Beispiel:
Sub aatest()
Dim bestArray
bestArray = Array(1, 2, 3, 4) 'testdaten
Call TEST(varArray:=bestArray)
End Sub
Sub TEST(varArray As Variant)
Dim iI As Long, dblSum As Double
If IsArray(varArray) Then
For iI = LBound(varArray) To UBound(varArray)
dblSum = dblSum + varArray(iI)
Next
MsgBox "Summe-Arraywerte: " & dblSum
Else
MsgBox "Daten müssen als Array an Prozedur übergeben werden!"
End If
End Sub

Anzeige
AW: Array an ParmaArray übergeben
30.05.2010 18:10:59
Daniel
Hi
naja, ganz so einfach gehts nicht.
wenn du "Call Text (1,2,3,4)" verwendest, dann ist Number eine eindimensonale Feldvariable mit 4 Integer-Werten, die du mit Number(x) abfragen kannst.
übergibts du hingeben mit "Call Text (bestArr)" direkt eine Array-Variable, dann ist Number auch wieder eine Feldvariable, die aber nur einen "Wert" enthält und in diesem Fall ist dieser "Wert" selbst wieder eine Feldvariable.
dh um in diesem Fall auf die einzelnen Werte zuzugreifen, musst du das so schreiben: Number(0)(x)
im Endeffekt läuft es darauf hinaus, daß du, je nach nach übergabeart, speziell programmieren must bzw über die funktionen "Ubound(Number)" bzw "Vartype(Number(0))" feststellen musst, welcher Fall vorliegt um dann mit IF bzw SELECT CASE die entscheidenden Programmzeilen entsprechend differenziert auszuführen:
am einfachsten wird wohl sein du machst das so:
dim arr
if vartype(Number(0))>8000 then
arr=Number(0)
else
arr = Number
End if

um dann im Folgenden nur noch mit arr weiterszuarbeiten.
Gruß, Daniel
Anzeige
AW: Array an ParmaArray übergeben
30.05.2010 19:21:19
Schattenkirchner
Danke an fcs und Daniel für die Info's
Ich werde den Vorschlag von Daniel umsetzen und den übergebenen Wert abfangen, prüfen ob es sich um ein Array handelt und entsprechend auslesen
prüfe ersten eintrag
30.05.2010 21:45:11
Tino
Hallo,
da ParamArray vom Typ Variant ist, kannst Du den ersten Eintrag Prüfen
ob dieser eine Array ist und entsprechend verarbeiten.
Sub TEST(ParamArray varNumber() As Variant)
Dim MeAr, A As Long
If IsArray(varNumber(0)) Then
MeAr = varNumber(0)
Else
MeAr = varNumber
End If
For A = LBound(MeAr) To UBound(MeAr)
MsgBox MeAr(A)
Next A
End Sub
Gruß Tino
Anzeige
oder noch erweitert
30.05.2010 22:16:57
Tino
Hallo,
wenn Du normale Werte und Array übergeben willst, kann man dies noch erweitern.
Hier ein Beispiel:
Sub TEST(ParamArray varNumber() As Variant)
Dim MeAr, A As Long, B As Long
For B = LBound(varNumber) To UBound(varNumber)
If IsArray(varNumber(B)) Then
MeAr = varNumber(B)
Else
MeAr = Array(varNumber(B))
End If
For A = LBound(MeAr) To UBound(MeAr)
MsgBox MeAr(A)
Next A
Next B
End Sub
Sub TestBeispiel()
Dim MeAr(), A As Long, B As Long
TEST 5 'nur ein eintrag
For A = 1 To 15 Step 5
ReDim Preserve MeAr(B)
MeAr(B) = A
B = B + 1
Next A
TEST MeAr, 100, 300, 500
End Sub
Gruß Tino
Anzeige
Man merkt, dass du dich intensiv damit...
31.05.2010 14:54:35
Luc:-?
…beschäftigt hast, Tino,
und deshalb die „Tücken“ von ParamArray kennst… ;-)
Gruß Luc :-?

36 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige