Avatar billede lklingenberg Nybegynder
06. august 2003 - 01:47 Der er 14 kommentarer og
1 løsning

Anvende array i andre subs

Hi,

Jeg er lidt træt af at oprettet det samme array i forskellige subs, men da min viden om VBA ikke rækker så langt er jeg heller ikke klar over hvordan jeg kan gøre mit array "globalt", så jeg kan bruge det i andre subs.
Avatar billede sostack Nybegynder
06. august 2003 - 06:56 #1
Hvis du under declarations erklærer arrayet for Public, og definerer arrayet under éen sub, kan du anvende den i alle subs. Eks:
Public arrayet

Private Sub testarray1()
arrayet = Array("test", "hest", "fest")
Debug.Print arrayet(0)
End Sub

Private Sub testarray2()
Debug.Print arrayet(1)
End Sub

Private Sub testarray3()
Debug.Print arrayet(2)
End Sub

//sostack
Avatar billede lklingenberg Nybegynder
06. august 2003 - 11:12 #2
Den kan jeg ikke følge...

Jeg opretter en Public Sub. Las os tage den konkrete:

Public Sub arrExc()
    Dim arrExc() As String
    Dim i As Integer
    For Each c In Range("exc")
        i = i + 1
        ReDim Preserve arrExc(i)
        arrExc(i) = c.Value
    Next
End Sub

I andre subs vil så gerne kunne anvende værdierne fra mit array-sub:

Sub test1()
    arrExc
    ActiveCell.Value = arrExc(8)
End Sub

Sub test2()
    arrExc
    ActiveCell.Value = arrExc(10)
End Sub
Avatar billede bak Forsker
06. august 2003 - 11:15 #3
Skriv sådan her, så kan du !

Public arrExc() As String

Public Sub arrExc()
    Dim i As Integer
    For Each c In Range("exc")
        i = i + 1
        ReDim Preserve arrExc(i)
        arrExc(i) = c.Value
    Next
End Sub
Avatar billede bak Forsker
06. august 2003 - 11:16 #4
Nej, det kan du ikke, sorry....
Tænker lige..
Avatar billede lklingenberg Nybegynder
06. august 2003 - 11:19 #5
-> bak
Giver en compile error (ambiguous name detected arrExc)
Avatar billede lklingenberg Nybegynder
06. august 2003 - 11:22 #6
Eller endnu bedre:

Sub complete()
  arrExc
  test1
  test2
End Sub

sub test()
Avatar billede lklingenberg Nybegynder
06. august 2003 - 11:22 #7
hov... fik trykket udført lidt for tidligt ;-)
Avatar billede bak Forsker
06. august 2003 - 11:22 #8
Jeg havde ikke lige set at du havde en sub og et array med samme navn

Public arrExcVal() As String

Public Sub arrExc()
    Dim i As Integer
    For Each c In Range("exc")
        i = i + 1
        ReDim Preserve arrExcVal(i)
        arrExcVal(i) = c.Value
    Next
End Sub

Sub test1()
    arrExc
    ActiveCell.Value = arrExcVal(8)
End Sub

Sub test2()
    arrExc
    ActiveCell.Value = arrExcVal(10)
End Sub
Avatar billede lklingenberg Nybegynder
06. august 2003 - 11:24 #9
Sub complete()
  arrExc
  test1
  test2
End Sub

sub test1()
  ActiveCell.Value = arrExc(2)
End Sub

sub test1()
  ActiveCell.Value = arrExc(3)
End Sub

Dvs. uden at skulle refere til den i hvert eneste sub, men kun lade den køre en gang og derefter de andre bagefter i en samlet sub
Avatar billede lklingenberg Nybegynder
06. august 2003 - 11:27 #10
-> bak:
det virker i begge tilfælde.
Avatar billede lklingenberg Nybegynder
06. august 2003 - 11:29 #11
Så, sostack var inde på noget af det rigtige kan jeg se (jeg fangede den bare ikke).
Er I med på en deler (så skal bak lige give et svar).
Tak for hjælpen!
/Lars
Avatar billede bak Forsker
06. august 2003 - 11:53 #12
fint, lad bare sostack få dem. hans svar er jo rigtigt...
Avatar billede lklingenberg Nybegynder
06. august 2003 - 11:57 #13
ok, men så kan du måske svare på hvordan jeg kan trække værdien fra i i arrExc med også eller på anden måde trække antallet af værdier ud af mit array.
Avatar billede bak Forsker
06. august 2003 - 12:28 #14
Jeg er ikke helt med "trække fra"
Antallet af værdier
hvis Option Base 0 (standard)
Antal = Ubound(arrExc) + 1
Avatar billede lklingenberg Nybegynder
06. august 2003 - 12:42 #15
værdien fra i i arrExc = værdien i fra sub'en arrExc. Indrømmet, sætningen kan misforstås).

Men den var go' nok ;-) Jeg havde forsøgt mig med UBound() men jeg havde som dig sat den på arrExc - den skal vel sættes på arrExcVal... Det virker i hvert fald.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester