Avatar billede folj Forsker
07. oktober 2016 - 11:13 Der er 3 kommentarer og
1 løsning

VBA: brugerdefineret function

Jeg har en brugerdefineret function der ud fra et dato-input returnerer hvor mange dage der er gået siden vi sidst fik leveret en blanding (hvor gammel en blanding nu er blevet) Det skal implementeres i en anden funktion der skal beregne om der skal bestilles en ny blanding, den givne dag.

Function BlandingAlder(ThisDateInput As Date)

Sheets(4).Select
' hvis sidste blandning nærmer sig max timer

ThisDateRow = FindDateRowInCol(ThisDateInput, DATECOLUMN)

For i = ThisDateRow - 1 To ThisDateRow - 5 Step -1 ' tæller 5 rækker baglæns
'MsgBox "Række " & i & " - " & Cells(i, BEHOLDNINGSCOLUMN - 2).Value
  If Cells(i, BEHOLDNINGSCOLUMN - 2).Value >= 15000 Then ' hvis der ligger en bestilling indenfor de seneste 5 dage - finder kun den seneste levering
    Exit For ' stopper når fundet den seneste levering
  End If
Next i

If Not Cells(ThisDateRow, BEHOLDNINGSCOLUMN - 2).Value >= VITAMINPURCHASEAMOUNT / 2 Then '  hvis der ikke er bestilt en blanding til i dag
    BlandingAlder = ThisDateRow - i ' functionen returnerer hvor mange dage gammel blandingen nu er
End If
End Function


functionen virker fint så lange jeg bestillingerne kun skal beregnes i Sheet(4), men jeg vil gerne kunne bruge functionen i sheet(5) også.

Derfor tænker jeg at i stedet for som det første at have linjen
Sheets(4).Select, så vil jeg gerne kunne detectere om functionskaldet kommer fra en celle i sheet 4 eller 5.

Jeg tænker at det vil give problemer hvis jeg blot bruger ActiveSheet, fordi activeSheet måske om lidt har skiftet til Sheet(1), og så vil functionen ikke beregne som forventet, måske endda returnere en fejl.

Der må være andre måder at tilgå hvilken sheet funktionskaldet kommer fra. eller skla der i stedet for arbejdes med referencer en celle op eller 5 celler op.
07. oktober 2016 - 13:22 #1
Hej fojl
Du kan oprette en variabel og gemme arknavnet i den. Den variabel kan du så bruge til at kalde det rigtige ark.

dim arkNavn as string
ArkNavn = activesheet.name

derefter kan du benytte ArkNavn hver gang du kalder arket.
sheets(arknavn).select

Hvis du hellere vil bruge indeksnr skal du lige tjekke hvilken type den er (jeg mener det er long). og så oprette en variabel til det (f.eks. arkIndexnr). Så kan du gemme indexnr med arkindexnr = activesheet.index (mener jeg den hedder)
(som du kan læse ud af ovenstående plejer jeg at bruge navnet :-) )

Med venlig hilsen

Birthe Lauridsen
Praktisk IT
Avatar billede folj Forsker
10. oktober 2016 - 09:00 #2
@Birthe_Lauridsen
Jeg kan godt se at det vil kunne løses som du beskriver...

Jeg er dog blevet lidt klogere siden jeg oprette spørgsmålet.
Jeg testede efter jeg har fjernet linien Sheets(4).Select,
og det spiller fint uden at mav vælger sheet i koden.

Jeg ved ikke hvor det står beskrevet med kodeafvikleren vælger åbenbart selv det sheet hvor funktionskaldet kommer fra.
10. oktober 2016 - 09:54 #3
Hej Folj
Ja, som udgangspunkt afvikles koden fra det ark hvor du aktiverer den :-)
Godt du kom viderer.

mvh

Birthe Lauridsen
Avatar billede folj Forsker
10. oktober 2016 - 10:04 #4
@Birthe Lauridsen
Takker for dit bidrag. Du får lidt Credit for din indsats og engagement.

mvh Folmer
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