Private Function MinFunktion (byval tal1 as integer, byval2 as integer) as long bla bla bla MinFunktion = tal1+tal2 End function
Du kalder en sub ved
Private Sub MinSub (byval tal1 as integer, byval2 as integer) bla bla bla End Sub
Du skriver
Private minfunk(ind1,ind2) Du mangler ordet "Function" i den linie!!! Det gør rbj_fp også...
Forskellen på en sub og en function er altså, at en funktion returenrer EN (og kun en) værdi i sit navn, det gør en sub ikke. Skal du ikke bruge en værdi returneret i funktionsnavnet, så lad være med at bruge en function, brug en sub!
Du kan overføre variable til en sub eller en function ved at smide dem ind i hovedet - jeg bruger ovenfor ByVal, som betyder, at de ændringer du evt. foretager på de parametre du sender med (tal1 og tal2) KUN foretages indenfor den enkelte sub/function, og ikke slår igennem i resten af programmet. Det er ofte en fordel.
Altså kan du kalde en function fra en anden function på følgende måde
Dim tal1 as integer Dim tal2 as integer Dim resultat as integer
Private function kvadrat (byval tal as integer) as integer kvadrat = tal1^2 End function
Private function kvadratsum (byval tal1 as integer, byval tal2 as integer) as integer sum = kvadrat(tal1) + kvadrat(tal2) end function
'HER KALDER DU SÅ KVADRATSUM; DER KALDER KVADRAT resultat = kvadratsum(2,4)
Og hvis jeg skriver din kode om så den virker, bliver den til følgende:
Private function minfunk(ind1,ind2) as integer Dim rk as integer dim kol As Integer rk = 6 * ind1 kol = 6 * ind2 minsub(rk,kol) '<HER KALDER DU DIN SUB minfunk= 2 End funktion
Public Sub minsub(rk, kol As Integer) Dim i As Integer For i = 1 To kol Worksheets("Ark1").Cells(i, 1).Copy Sheets("Ark2").Activate ActiveSheet.Cells(rk, i).Select ActiveSheet.Paste Next i End Sub
Altså uden paranteser. Paranteser bruges til funktioner, ikke subs
Din kode skal se sådan ud:
Private function minfunk(ind1,ind2) as integer Dim rk as integer dim kol As Integer rk = 6 * ind1 kol = 6 * ind2 minsub rk, kol '<HER KALDER DU DIN SUB minfunk= 2 End funktion
Public Sub minsub(rk, kol As Integer) Dim i As Integer For i = 1 To kol Worksheets("Ark1").Cells(i, 1).Copy Sheets("Ark2").Activate ActiveSheet.Cells(rk, i).Select ActiveSheet.Paste Next i End Sub
Bemærk, at du ikke behøver at sætte i=0. Jeg har også lavet andre smårettelser
Og skulle du gøre det helt efter bogen, skal du typeerklære ALLE dine variable:
Private function minfunk(ind1 as integer, ind2 as integer) as integer Dim rk as integer dim kol As Integer rk = 6 * ind1 kol = 6 * ind2 minsub rk, kol '<HER KALDER DU DIN SUB minfunk= 2 End funktion
Public Sub minsub(rk as integer, kol As Integer) Dim i As Integer For i = 1 To kol Worksheets("Ark1").Cells(i, 1).Copy Sheets("Ark2").Activate ActiveSheet.Cells(rk, i).Select ActiveSheet.Paste Next i End Sub
Det er da ikke mig der laver det - masteraaen spørger hvordan man gør, og jeg viser det...
:o)
Synes godt om
Ny brugerNybegynder
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.