Avatar billede H_Klein Novice
16. juli 2013 - 18:45 Der er 2 kommentarer og
1 løsning

Hvorfor er det ikke alle functions der kan tastes "direkte" i VBA?

Hej med jer,

Jeg har et, sikkert tåbeligt, spørgsmål men sådan nogle skal der jo også være en gang imellem så I andre har noget at grine lidt af :-)

Mit spørgsmål er som følger.

Nedenstående to udgaver af samme function kan indtastes uden problemer og fungerer lige efter planen.

RK = 2
    Do
    Cells(RK, 24) = (Right(Cells(RK, 25), 2))
    RK = RK + 1
    Loop Until Cells(RK, 1) = ""
   
    RK = 2
    Do
    Cells(RK, 25) = Right(Cells(RK, 18), 2)
    RK = RK + 1
    Loop Until Cells(RK, 1) = ""

MEN hvis jeg nu vil bruge nedenstående function får jeg fejl?

Range(Columns(23), Columns(25)).Delete
    RK = 2
    Do
    Bst = Cells(RK, 14)
    Lev = Cells(RK, 18)
    AntD = Days360(Bst, Lev, True)
    RK = RK + 1
    Loop Until Cells(RK, 1) = ""

Én ting ville være hvis det var fordi et af argumenterne ikke passede, men den fejl jeg får er, "Sub or function not defined" og det forstår jeg ikke da jeg jo netop vælger days360 som function og den vises på samme måde hvis man benytter "hjælp-funktionen" i VBA-editoren?

Håber der er en af jer herinde der kan forklare mig hvorfor nogle functions kan tastes direkte og andre ikke kan.

Jeg ved godt, at jeg kunne optage den og benytte det her R1C1 - format, men det ville nu bare være lettere hvis jeg kunne taste det direkte ind og bruge "cells(x,x)-referencer" til alle functions istedet for.

Jeg vil gerne understrege at valget af DAYS360-functionen sagtens kunne have været anderledes, da det ikke specifikt er denne funktion der driller mig (det gør den lige nu) men også bare generel undren over at nogle functions kan skrives som i de to øverste (fungerende) eksempler og at andre functions ikke kan...

Jeg ved at svaret er ligetil og startede jo også med at skrive det, men jeg er ganske enkelt ikke kvik nok til at regne det ud, så jeg håber på hjælp herinde fra.

Med venlig hilsen

Henrik
Avatar billede supertekst Ekspert
16. juli 2013 - 23:33 #1
Sub test()
    Range(Columns(23), Columns(25)).Delete
    RK = 2
    Do
    Bst = Cells(RK, 14)
    Lev = Cells(RK, 18)
    AntD = WorksheetFunction.Days360(Bst, Lev, True)
    RK = RK + 1
    Loop Until Cells(RK, 1) = ""
End Sub

Her kommer ingen fejl  - fordi du skriver udtrykket som en WorksheetFunction + "formel" (altså en funktion som kan skrives som formel)

D.v.s. når man begynder at programmere i VBA kan man altså udtrykke nogle af de formler, som man brugte tidligere - når de nu alligevel findes.

Men der er måske ikke noget nyt i dette?
Avatar billede H_Klein Novice
16. juli 2013 - 23:48 #2
Hej Supertekst :-)

OK, det betyder altså at der er nogle af funktionerne hvor man er nødt til at fortælle systemet at det er en function og andre hvor den selv kan regne det ud eller er det ligeså smart bare at gøre det til en vane altid at skrive Worksheetfunction foran? også når jeg f.eks bruger right og/eller left - funktionen hvor det ikke lader til at det er nødvendigt?

Du kan roligt smide et svar så du kan få dine point og det er jo så anden gang du hjælper mig, så det er efterhånden ved at blive en ren vane at skulle sige tak for hjælpen og hurtig service fra din side :-)

Mange venlige hilsener

Henrik
Avatar billede supertekst Ekspert
17. juli 2013 - 09:01 #3
Hej Henrik

Ja - visse formler kan også anvendes i VBA med WorksheetFunction som prefix - men dette udtryk skal ikke anvendes generelt. Jeg tror at der findes en oversigt over disse WorksheetFuntion'er.'

Jeg smider et svar - men to gange er vel knap en vane :-)

Mvh
Peter Braagaard
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

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