Trazor Skrevet 10. oktober 2007 Del Skrevet 10. oktober 2007 Sitter her med hovedprosjektet mitt, hvor jeg skal utvilke et regneark for bruk i industrien. Problemet mitt akkurat nå, er at jeg har laget en VB funksjon, som jeg vil skal gjenkjenne tekst fra et regneark. Jeg har hatt litt java før, men thats it med erfaring når det kommer til programmering. Det jeg har nå, er: (* er kommentarer og ikke med i funksjonen) Function test(var1#, var2#) If var1 = "bil" Then test = 5 *Her vil jeg at VB skal gjenkjenne teksten bil, og så sette funksjonen 'test' til verdien 5 Elseif var2 = "lastebil" Then test = 10 *samme som over, men lastebil og verdien 10 Else test = display(" Dette blir feil") *her vil jeg at test skal returnere beskjeden 'Dette blir feil' hvis ikke inputen er 'bil' eller 'lastebil' End If End Function Takk for all hjelp! Lenke til kommentar
aadnk Skrevet 10. oktober 2007 Del Skrevet 10. oktober 2007 Noe som følgende, muligens? Public Function Test(Var1 As String, Var2 As String) As Long ' LCase = ToLower. If LCase(Var1) = "bil" Then Test = 5 Elseif LCase(var2) = "lastebil" Then Test = 10 Else ' Her har vi mange alternativer til brukerinteraksjon. Best blir det nok ' å invokere (likså throw) en "exception" ved å kalle den innebyggede funksjonen Err.Raise: Err.Raise 1000, "Test", "Dette blir feil" End If End Function Lenke til kommentar
Trazor Skrevet 10. oktober 2007 Forfatter Del Skrevet 10. oktober 2007 Noe som følgende, muligens? Ja, tusen takk for den! Men, er det et krav at teststrengen som er input er uten stor forbokstav? Lenke til kommentar
Manfred Skrevet 10. oktober 2007 Del Skrevet 10. oktober 2007 Det er vel derfor han bruker LCase, for å gjøre teststrengen til "Lower Case" før den testes. Lenke til kommentar
Trazor Skrevet 10. oktober 2007 Forfatter Del Skrevet 10. oktober 2007 (endret) Det er vel derfor han bruker LCase, for å gjøre teststrengen til "Lower Case" før den testes. Ja, det var det jeg trodde. Får den enda ikke til å fungere, kanskje noen trenede øyne ser noe feil? Public Function test(Klasse As String, Brd_Dfm As String) As Long ' LCase = ToLower. If LCase(Klasse) = "Klasse 8.8" And LCase(Brd_Dfm) = "Brudd" Then test = 800 ElseIf LCase(Klasse) = "Klasse 8.8" And LCase(Brd_Dfm) = "Deformasjon" Then test = 640 ElseIf LCase(Klasse) = "Klasse 10.9" And LCase(Brd_Dfm) = "Brudd" Then test = 1000 ElseIf LCase(Klasse) = "Klasse 10.9" And LCase(Brd_Dfm) = "Deformasjon" Then test = 900 Else ' Her har vi mange alternativer til brukerinteraksjon. Best blir det nok ' å invokere (likså throw) en "exception" ved å kalle den innebyggede funksjonen Err.Raise: Err.Raise 1000, "Test", "Dette blir feil" End If End Function Edit; tror jeg ser feilen... Jeg bruker LCase til å gjøre om inputen til lowercase, men det den sjekker opp mot, har stor forbokstav? Det blir rett hvis jeg gjør det om til LCase(Klasse) = "klasse 10.9" osv...? Evt fjerner LCase? Endret 10. oktober 2007 av Trazor Lenke til kommentar
Degeim Skrevet 10. oktober 2007 Del Skrevet 10. oktober 2007 Bruk LCase og skriv det du sammenligner med små bokstaver. Lenke til kommentar
Harald Staff Skrevet 10. oktober 2007 Del Skrevet 10. oktober 2007 Litt utydelig hva "fra excel" er her også. Men 10.9 i din kode er tekststreng og ikke tallverdien 10,9 , som har komma eller punktum eller annet avhengig av en haug med språkvalg. Vanlig trøbbel ved manuell input er også mellomrom før eller etter, og doble mellomrom inni. Koden din bør ta høyde for alt dette. Lenke til kommentar
Trazor Skrevet 11. oktober 2007 Forfatter Del Skrevet 11. oktober 2007 Litt utydelig hva "fra excel" er her også. Men 10.9 i din kode er tekststreng og ikke tallverdien 10,9 , som har komma eller punktum eller annet avhengig av en haug med språkvalg.Vanlig trøbbel ved manuell input er også mellomrom før eller etter, og doble mellomrom inni. Koden din bør ta høyde for alt dette. Med "fra excel" mener jeg at den skal ta det som står i en celle, gjenkjenne det, og så utføre en handling. 10.9 er betegnelsen på en bolt, som angir flytegrense og strekkfasthet Har forøvrig fått funksjonen til å virke nå, var bare å endre inputen slik at den ikke inneholdt store bokstaver. Lenke til kommentar
pvp Skrevet 13. oktober 2007 Del Skrevet 13. oktober 2007 Bare en anbefaling - det er flere måter å gjøre dette på som over, men skal du sjekke mange valg så prøv (dette er mer generell kode): function Test(typ as string) as short select case LCase(typ) case "bil" return 5 case "lastebil" return 10 case else return 0 'Eller annen feilhåndtering end case end function F.eks.: dim ret as short ret = Test("Bil") if ret = 0 then MsgBox("feil!") else 'OK end if Lenke til kommentar
GeirGrusom Skrevet 13. oktober 2007 Del Skrevet 13. oktober 2007 Ofte kan det også være hensiktsmessig å ikke trenge å hardkode slikt, hvis man vil legge til nye verdier eller endre gamle. Lenke til kommentar
Harald Staff Skrevet 13. oktober 2007 Del Skrevet 13. oktober 2007 Sant nok. Men VBA (hvis det nå er det det er snakk om) er litt spesielt ved at den ikke kompileres, den kjører runtime. Det er lite dill å endre kode etter behov. Men det er klart, snakker vi mange brukere på nettverk så bor sånne variabler best i en enkelt sentral databasefil som oppdateres der og bare der. Så dette er et spørsmål om design og antall brukere. OP er gjerrig på opplysninger. Lenke til kommentar
GeirGrusom Skrevet 13. oktober 2007 Del Skrevet 13. oktober 2007 Ofte pleier jeg også å lage arrays av strukturer for å lagre slikt. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå