Discussion:
VBA- Array's an Unterprozeduren übergeben
(zu alt für eine Antwort)
Jimmyt
2006-08-06 16:32:32 UTC
Permalink
Hi,

2 Fragen:

1.) Ist es möglich, Array's bspw. als string-Variablen Unterprozeduren und
Funktionen zu übergeben?
Beispiel:
sub Hauptprozedur()
.....
dim Array() as string
....
redim Array(6,8) as string
....
call Unterprozedur(Array())
...
end sub
oder mit Funktion
sub Hauptprozedur()
.....
dim Array() as string
....
redim Array(6,8) as string
....
Array()= Unterprozedur(Array())
...
end sub
So wie ich es hier andeute stelle ich es mir vor. Leider klappt es so aber
nicht!
Meine Frage an euch: Geht's irgendwie anders?

2.) Wie erstelle ich Variablen, die auch nach Beendigung der Prozedur
Bestand haben? Geht es mit static, oder mit public? Kleines Beispiel wäre
nett.

Gruß
Herbert Taferner
2006-08-06 18:30:13 UTC
Permalink
Hallo Jimmyt,
^^^^^^

hier ein plumpes Beispiel zu nachvollziehen
im Einzelschrittmodus

schreib in die Zellen A1 bis A10 irgendwelche Werte
und führe die Sub Werte_holen aus

'Code in ein Modul
'------------------------
Option Explicit

Public arrWert(9) As Variant

Sub Werte_holen()
Dim x As Long
For x = LBound(arrWert) To UBound(arrWert)
arrWert(x) = Range("A" & x + 1).Value
Next x
MsgBox "das Array wurde gefüllt"
Werte_schreiben
MsgBox "die Werte aus dem Array wurden geschrieben"
End Sub

Sub Werte_schreiben()
Dim i As Long
For i = LBound(arrWert) To UBound(arrWert)
Range("B" & i + 1).Value = arrWert(i)
Next i
End Sub
'---------------------

mfg Herbert
unknown
2006-08-07 09:44:28 UTC
Permalink
Hallo Jimmy,
hierfür hast du mehrere Möglichkeiten:
1.
Du deklarierst dein Array als globale Variable im Codemodul:

Dim arrArray(1, 1) As Date

Sub ArrayFuellen()
Dim intI As Integer, intJ As Integer
For intI = 0 To 1
For intJ = 0 To 1
arrArray(intI, intJ) = Now
Next
Next
End Sub

2.
Du schreibst die Werte in ein Tabellenblatt und liest sie von dort
wieder aus.

Schreiben:
Dim arrArray(1, 1) As Date

Sub ArrayInsTabellenblattSchreiben()
ActiveSheet.Range("A1:B2").Value = arrArray()
End Sub

Lesen:
Dim arrArray(1, 1) As Date

Sub AusTabellenblattLesen()
Dim intI As Integer, intJ As Integer
For intI = 0 To 1
For intJ = 0 To 1
arrArray(intI, intJ) = _
ActiveSheet.Cells(intI + 1, intJ + 1).Value
Next
Next
End Sub

MfG Frank
_________________________________________________
Frank Arendt-Theilen, Microsoft MVP für Excel, Hameln
Microsoft Excel - Die ExpertenTipps: tinyurl.com/cmned
Website: xl-faq.de
Helmut Weber
2006-08-07 15:00:34 UTC
Permalink
Hallo Jimmy,

meinst Du sowas:

Sub Macro9()
Dim StrArr() As String
StrArr = Split("1,2,3,4,5,6", ",")
' zero based Array mit Werten füllen
MsgBox FirstInArray(StrArr)
End Sub

Function FirstInArray(a() As String) As String
FirstInArray = a(0)
End Function

Nur im Prinzip. Global definieren geht natürlich auch.
Kommt halt drauf an.
Und wenn's kein Zero-based Array ist,
sondern eines von x bis y dann:

FirstInArray = a(x)
oder wenn man gar nichts weiß,
FirstInArray = a(LBound(a))
--
Gruß

Helmut Weber, MVP WordVBA

"red.sys" & chr$(64) & "t-online.de"
Win XP, Office 2003 (US-Versions)
Loading...