vba array uit een functie gebruiken

Status
Niet open voor verdere reacties.

kiredw

Gebruiker
Lid geworden
31 mei 2012
Berichten
12
hallo,

kan iemand mij hier uitleggen hoe VBA met functies en arrays werkt? Ik werk zelf veel met PHP en ben sinds kort met VBA in combinatie van excel bezig. Nu heb ik een functie gemaakt, in die functie word een 3d array gemaakt. Tot nu toe kan ik weinig met de gemaakte array.

De bedoeling is dat de array in de functie gemaakt word en vervolgens weer gebruikt kan worden voor andere functies/macros. Ik had al het 1 en ander gelezen over Byref array. Maar de logica is bij mij nog niet gevallen.

Nu wil ik de gemaakt array in functie buiten de functie gebruiken. Normaal met PHP geef je de functie een naam en aan het einde kan je de array een return geven. Met vba kom ik in veel handleidingen tegen dat array dezelfde naam krijgt als functie.Is dat ook makkelijk?

Ik heb de document waar ik mee bezig ben er bijgevoegd, mocht iemand commentaar willen geven, graag aub. Weet nu niet of ik het goed toepas.

Bijlage(module1,2,3 zijn meer temp modules vanwege testen en dergelijke) module 4 ben ik nu mee bezig. Het lukt me niet om de Z array te gebruiken in het verwerk gedeelte van het formulier.(Private Sub verwerk_Click())
 

Bijlagen

  • deur.xlsm
    64,1 KB · Weergaven: 31
Het antwoord is "Ja" , maar waar in je voorbeeld probeer je een array te gebruiken en een sub_functie aan te roepen? Je genoemde functie bevat geen "Z" array.
 
Bedankt voor de reactie. Ik het net gelukkig voor elkaar gekregen om de functie te gebruiken. Ik weet alleen niet of ik vba goed toe pas. Ik had het nog niet helemaal in de gaten met de datatypes. Maar array moet verplicht variant zijn.
 
Bekijk bijlage deur2.xlsm

Ben al een stuk verder gekomen. Ik weet alleen nog niet hoe ik een variable kan terug geven als de array zelf ipv naam van de functie. In de functie word een functie geladen die via een loop telkens een regel aan een array toevoegd. Met PHP kan je return gebruiken. Tot nu toe nog niet gelukt om met return een array terug te geven. Is dit uberhaud wel mogelijk?

Module6 bezit de functie waar het om gaat. Vervolgens word in module 6 de functie uit module 3 gebruikt. De functie in module 6 zal uit eindelijke de definitieve array bevatten. die weer terug gebruikt word in het formulier.
 
Probeer eens:

Code:
Private Sub UserForm_Initialize()
  deursoort.List = Array("Av-40", "Av-60", "Av-80")
  geleidingprofiel.List = Array("35x40x3", "47x40x3", "66x40x3")
End Sub
en

Code:
Private Sub onderrollend_Click()
  geleidingprofiel.Visible = Not geleidingprofiel.Visible
End Sub
en

Code:
Sub setup()
    On Error Resume Next
    c00 = Application.CommandBars("Tools").FindControl("Maak deur")
    If Err.Number <> 0 Then
        With Application.CommandBars("Tools").Controls.Add(msoControlButton, 3)
            .Caption = "Deur creator by Edw"
            .Style = msoButtonIconAndCaption
            .OnAction = "startform" 'de naam van de macro die uitgevoerd moet worden
            .Tag = "Maak Deur"
        End With
    End If
End Sub
Code:
Function inizaagfile(ByRef zaaglijst As Variant) As Variant
  For i = 1 To UBound(zaaglijst)
    inizaagfile = cncmodel(z, zaaglijst(i, 2), Split("|135|45|90", "|")(InStr("/\|", zaaglijst(i, 3))), Split("|135|45|90", "|")(InStr("/\|", zaaglijst(i, 4))), zaaglijst(i, 5))
  Next
End Function

Maak niet voor iedere funktie een nieuwe module.

Je kunt net zo goed al die funkties in de userform codemodule zetten.
 
Laatst bewerkt:
Voorbeeld van bij byREF. plak dit in een module (zie ook opmerkingen SNB) en run t1

Code:
Sub t1()
Dim myarray(10) As String
    For i = 0 To 10
        myarray(i) = i
    Next i

    MsgBox (Join(myarray(), " "))

    aanpassen aanp:=myarray

    MsgBox (Join(myarray(), " "))
End Sub

Sub aanpassen(ByRef aanp() As String)
    For i = 0 To UBound(aanp)
        aanp(i) = aanp(i) & "a"
    Next i
End Sub
 
Geweldig, bedankt voor de snelle reacties en tips. Zal er direct mee aan de slag.
 
of
Code:
Sub snb()
  MsgBox reken(Array(1, 2, 3, 4, 6))(2)
  MsgBox teken(Array("aa", "bb", "cc", "dd"))(2)
End Sub

Function reken(sn)
  For j = 0 To UBound(sn)
    sn(j) = 4 * sn(j)
  Next
  reken = sn
End Function

Function teken(sn)
  st = sn
  For j = 0 To UBound(sn)
    st(j) = sn(j) & "_" & sn(UBound(sn) - j)
  Next
  teken = st
End Function
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan