Avatar billede Batman25 Nybegynder
27. maj 2012 - 19:06 Der er 16 kommentarer og
1 løsning

VBA/Excel

Hej

Jeg sidder her med nogle opgaver i Matlab og VBA. Er stødt ind i nogle problemer vedr. VBA.

- Har et problem med, at jeg skal have denne funktion, til at gå fra B2 til B6:


Dim score As Integer, grade As String
score = Range("B2").Value


If score < 5 Then
  grade = "Falsk"
ElseIf score > 100 Then
  grade = "Falsk"
Else
  grade = score
 
 
End If

Range("B2").Value = grade

Da den i Range kun står til ("B2") virker den selvfølgelig kun i B2, men hvordan får jeg den til at virke til og med B6?
Og hvis den også skal gå vandret ud, hvordan virker den så til med E6?



Et andet problem, er at jeg skal lave en If then else funktion igen, hvor hvis der står et m, skal der stadigvæk være et m, hvis der står et k, skal der stadigvæk være et k, og hvis der står alt muligt andet, skal der står "falsk". Har gjort det på følgende måde:


Dim Køn As String, værdi As String
Køn = Range("A2").Value

If Køn = m Then
  værdi = "m"
ElseIf Køn = k Then
  værdi = "k"
Else
værdi = "falsk"

End If

Range("A2").Value = værdi

Altså hvis køn = alt andet end m og k, så skal værdien være falsk. Ellers skal værdien være lig med køn.
Tror det har noget med at der står Value efter Range, har prøvet med Text, men det virker heller ikke.

Hvis du på nogen måde kan hjælpe med dette, ville det være til stor hjælp.
Avatar billede store-morten Ekspert
27. maj 2012 - 20:01 #1
Prøv:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B2:E6")) Is Nothing Then
    If Target < 5 Or Target > 100 Then Target.Value = "Falsk"
End If

If Not Intersect(Target, Range("A2:A6")) Is Nothing Then
If Not Target = "m" Or Target = "k" Then Target.Value = "Falsk"
End If
End Sub
Avatar billede Batman25 Nybegynder
27. maj 2012 - 20:21 #2
Kan ikke rigtig få det til at virke..

før jeg har det jeg har skrevet, har jeg:

Sub personinfo()


Range("A2").Value = InputBox("Køn på kunde 1", "skriv køn")
Range("B2").Value = InputBox("Alder på kunde 1", "skriv alder")


Range("A3").Value = InputBox("Køn på kunde 2", "skriv køn")
Range("B3").Value = InputBox("Alder på kunde 2", "skriv alder")

Range("A4").Value = InputBox("Køn på kunde 3", "skriv køn")
Range("B4").Value = InputBox("Alder på kunde 3", "skriv alder")

Range("A5").Value = InputBox("Køn på kunde 4", "skriv køn")
Range("B5").Value = InputBox("Alder på kunde 4", "skriv alder")

Range("A6").Value = InputBox("Køn på kunde 5", "skriv køn")
Range("B6").Value = InputBox("Alder på kunde 5", "skriv alder")

For at indtaste de forskellige køn og alder på hver enkelt kunde.
Derefter skal der være en sådan if then else funktion, der i kolonne A2:A6 giver "fejl" hvis der er angivet andet end m eller k. Endvidere skal den i kolonne B2:B6 angiver fejl, hvis værdien er udenfor 5-100.

Nok mig der formulerede det forkert.

Ved ikk om du har et input til det?
Avatar billede store-morten Ekspert
27. maj 2012 - 20:23 #3
Virker detikke hvis du taste direkte i Arket?
Avatar billede Batman25 Nybegynder
27. maj 2012 - 20:32 #4
Hvad mener du med at taste det direkte i arket? altså hvis jeg skriver det du har forslået, skriver den "expended end sub" ?
Avatar billede store-morten Ekspert
27. maj 2012 - 20:59 #5
Kopier koden her under.
I Excel
Tryk alt+F11
Dobbelt klik på det Ark makroen skal virke på.
Tryk ctrl+v og luk på det røde kryds.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B2:E6")) Is Nothing Then
    If Target < 5 Or Target > 100 Then Target.Value = "Falsk"
End If

If Not Intersect(Target, Range("A2:A6")) Is Nothing Then
If Not Target = "m" And Not Target = "k" Then Target.Value = "Falsk"
End If
End Sub


I cellerne B2:E6 er det kun muligt at indtaste 5 til 100 ellers rettes til "Falsk"

I cellerne A2:A6 er det kun muligt at indtaste m eller k ellers rettes til "Falsk"
Avatar billede Batman25 Nybegynder
27. maj 2012 - 21:25 #6
perfekt. tak for hjælpen!! nu virker det
Det du har skrevet, har jeg som du har beskrevet, indsat i det ark som det passer til. Og det andet jeg har, står inde i modulet.
Hvad er forskellen på at skrive det inde i "ark" og så inde i "modulet"
Avatar billede store-morten Ekspert
27. maj 2012 - 21:38 #7
Prøv også denne:
Sub personinfo()
For i = 2 To 6
Do
        Svar = InputBox("Køn på kunde " & i, "skriv køn")
        If Svar = "m" Or Svar = "k" Then
            CorrectAnswer = True
            Range("A" & i) = Svar
        Else
            CorrectAnswer = False
            MsgBox "Indtast et m for 'Mand'" & vbCrLf & _
            "Eller Indtast et k for 'Kvinde'"
        End If
    Loop Until CorrectAnswer
Do
        Svar = InputBox("Alder på kunde " & i, "skriv alder")
        If Not Svar < 5 Or Svar > 100 Then
            CorrectAnswer = True
            Range("B" & i) = Svar
        Else
            CorrectAnswer = False
            MsgBox "Indtast et tal mellem 5 og 100"
        End If
    Loop Until CorrectAnswer
Next i
End Sub
Avatar billede store-morten Ekspert
27. maj 2012 - 21:50 #8
Moduler er en slags kodekasser (nej ikke rodekasser!) så du kan strukturere dine programmer.

På selve Arket lægges hændelsesprocedurer.
F.eks: Private Sub Worksheet_Change(ByVal Target As Range)
Hændelse: Ændring i Arket.
Avatar billede Batman25 Nybegynder
27. maj 2012 - 21:54 #9
Den skal jeg skrive inde i modul? kan ikke få det til at virke? ;)
Avatar billede store-morten Ekspert
27. maj 2012 - 22:04 #10
Prøv at lægge den på Arket ;-)
Avatar billede store-morten Ekspert
27. maj 2012 - 22:07 #11
Eller tilføj: Dim i, Svar, CorrectAnswer mellem:

Sub personinfo()
Dim i, Svar, CorrectAnswer
For i = 2 To 6
Avatar billede Batman25 Nybegynder
27. maj 2012 - 22:10 #12
den skriver "expected function or variable" når jeg gør det. ?

Har et andet spørgsmål også.
Hvordan kopierer jeg de overskrifter der står i A1:E1 fra ark1 ind til ark 2? altså hvis man skal lave det som en funktion inde i vba..
Avatar billede Batman25 Nybegynder
27. maj 2012 - 22:16 #13
Har fået den til at virke nu. men tror hellere at jeg vil benytte den anden :)
Avatar billede store-morten Ekspert
27. maj 2012 - 22:26 #14
Worksheets(1).Range("A1:E1").Copy _
    Destination:=Worksheets(2).Range("A1")
Avatar billede Batman25 Nybegynder
27. maj 2012 - 22:37 #15
Mange tak for hjælpen :)
Avatar billede store-morten Ekspert
27. maj 2012 - 22:45 #16
Velbekomme.

Og velkommen på "Eksperten"

Her er en lille film, hvor du ser hvordan man Acceptere/lukker et svar:
http://www.youtube.com/watch?v=s26DGiuvXBo
Avatar billede Batman25 Nybegynder
27. maj 2012 - 23:34 #17
Det er hermed gjort :)
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
Kurser inden for grundlæggende programmering

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