Avatar billede prinsib Seniormester
27. september 2009 - 23:01 Der er 13 kommentarer og
1 løsning

Mere hjælp til Makro

Hej
Jeg har lige fået denne makro af supertekst, og den virker perfekt, men jeg vil gerne have den udvidet.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Rem Klikkes der i et af områderne
Dim kolonne, række
    kolonne = Target.Column
    række = Target.Row
   
    If kolonne >= 4 And kolonne <= 14 And kolonne <> 6 And kolonne <> 9 And kolonne <> 12 Then
        If række >= 4 And række <= 33 Then  'der stod kolonne i stedet for række
            Target.Value = HentVærdi
        End If
    End If
End Sub
Private Function HentVærdi()
    If Range("B4") <> "" Then
        Range("B4").Select
    Else
        Range("B19").Select
    End If
    HentVærdi = Selection.Value
End Function

Jeg må hellere forklare nærmere.
Kolonne D, G, J og M skal laves om til positive tal, selv om tallet i B4 er negativ.
Tallene i Kolonne E,H,K og N er negative tal.
Hvis tallet jeg klikker ind, kommer fra B19 (og kun der fra)klikker jeg i 3 negative celler, og så skal de 3 tal adderes og lægges i en positiv celle i samme række.
Det er måske 2 spørgsmål, og jeg vil gerne splitte dem op, hvis det er nødvendig.
Tro mig, hvis det er svært at forstå, er det lige så svært at forklare.
Ib
Avatar billede supertekst Ekspert
28. september 2009 - 09:02 #1
Dette er kun første halvdel på dit spørgsmål -
De 3 negative celler - er det i bestemte kolonner. Summen skal placeres i en positiv celle i samme række? Regel for dette - eller eksempel.


Rem Version 2-I
Rem ===========
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Rem Klikkes der i et af områderne
Dim kolonne, række
    kolonne = Target.Column
    række = Target.Row
   
    If kolonne >= 4 And kolonne <= 14 And kolonne <> 6 And kolonne <> 9 And kolonne <> 12 Then
        If række >= 4 And række <= 33 Then
            Target.Value = HentVærdi(kolonne)
        End If
    End If
End Sub
Private Function HentVærdi(målKolonne)
    If Range("B4") <> "" Then
        Range("B4").Select
       
Rem er tallet hentet fra B4 og er det negativ - indsæt positivt hvis kolonne D, G, J, M
        If Selection.Value < 0 Then
            If målKolonne = 4 Or målKolonne = 7 Or målKolonne = 10 Or målKolonne = 13 Then
                HentVærdi = Selection.Value * -1
                Exit Function
            End If
        End If
    Else
        Range("B19").Select
    End If
    HentVærdi = Selection.Value
End Function
Avatar billede prinsib Seniormester
28. september 2009 - 10:43 #2
Hej supertekst.
Lidt mere forklaring.
Kolonnerne D,G,J og M er som jeg fortalte positive tal.
Kolonnerne E,H,K og N er negative tal.

I cellerne D,G,J og M 36,lægges alle de positive tal sammen, og i cellerne E,H,K og N 36 lægges alle de negative tal sammen.

I cellerne D38 trækkes E36 fra D36, i G38 H36 - G36 osv.
Den sidste udregning fejler nu. Alle udregningerne blir positive.

Tallet i B19 er altid positiv. Det lægges altid i 3 "negative" celler, og skal i den sidst "positive" celle ganges med 3.
Eks. B19 = 2kr. Jeg klikker i celle E5, H5, og K5 så der står 2kr. i disse celler. I celle M5 skal der så stå 6kr.
Kan man forstå det?
Ib
Avatar billede supertekst Ekspert
28. september 2009 - 10:54 #3
Det er modtaget - tak - vender tilbage...
Avatar billede supertekst Ekspert
28. september 2009 - 11:34 #4
Læs venligst bemærkningen vedr. "B19" - fuld automatik - men måske er det ikke ok?

Rem Version 2-II
Rem ============
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Rem Klikkes der i et af områderne
Dim kolonne, række
    kolonne = Target.Column
    række = Target.Row
   
    If kolonne >= 4 And kolonne <= 14 And kolonne <> 6 And kolonne <> 9 And kolonne <> 12 Then
        If række >= 4 And række <= 33 Then
            Target.Value = HentVærdi(kolonne)

Rem Vælg E som første kolonne v/"B19" - så resten af sig selv ........
            If Range("B19") <> "" And kolonne = 5 Then
                Range("H" & CStr(række)) = Target.Value
                Range("K" & CStr(række)) = Target.Value
                Range("M" & CStr(række)).Value = Target.Value * 3
            End If
        End If
    End If
End Sub
Private Function HentVærdi(målKolonne)
    If Range("B4") <> "" Then
        Range("B4").Select
       
Rem er tallet hentet fra B4 og er det negativ - indsæt positivt hvis kolonne D, G, J, M
        If Selection.Value < 0 Then
            If målKolonne = 4 Or målKolonne = 7 Or målKolonne = 10 Or målKolonne = 13 Then
                HentVærdi = Selection.Value * -1
                Exit Function
            End If
        End If
    Else
        Range("B19").Select
    End If
    HentVærdi = Selection.Value
End Function
Avatar billede supertekst Ekspert
28. september 2009 - 11:35 #5
Rem Vælg E som første kolonne v/"B19" - så sker resten af sig selv ........
Avatar billede prinsib Seniormester
28. september 2009 - 12:25 #6
Supertekst.
Det virker, men kunne man ikke lave det sådan, at man starter i den celle som skal være "positiv", og det tal er så 3 gange så stor som B19, og alle de 3 "negative" celler sættes til 1/3 (=B19) hver?
Det ville være helt perfekt.
Det med de forkerte udregniger i cellerne 36 har jeg klaret.
Ib
Avatar billede supertekst Ekspert
28. september 2009 - 13:29 #7
Rem Version 3
Rem =========
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Rem Klikkes der i et af områderne
Dim kolonne, række
    kolonne = Target.Column
    række = Target.Row
   
    If kolonne >= 4 And kolonne <= 14 And kolonne <> 6 And kolonne <> 9 And kolonne <> 12 Then
        If række >= 4 And række <= 33 Then
            Target.Value = HentVærdi(kolonne)

Rem Klik i kolonne M  v/"B19" - så sker resten af sig selv ........
            If Range("B19") <> "" And kolonne = 13 Then
                Range("M" & CStr(række)).Value = Range("B19").Value * 3
                Range("E" & CStr(række)) = Range("B19").Value
                Range("H" & CStr(række)) = Range("B19").Value
                Range("K" & CStr(række)) = Range("B19").Value
            End If
        End If
    End If
End Sub
Private Function HentVærdi(målKolonne)
    If Range("B4") <> "" Then
        Range("B4").Select
       
Rem er tallet hentet fra B4 og er det negativ - indsæt positivt hvis kolonne D, G, J, M
        If Selection.Value < 0 Then
            If målKolonne = 4 Or målKolonne = 7 Or målKolonne = 10 Or målKolonne = 13 Then
                HentVærdi = Selection.Value * -1
                Exit Function
            End If
        End If
    Else
        Range("B19").Select
    End If
    HentVærdi = Selection.Value
End Function
Avatar billede prinsib Seniormester
28. september 2009 - 14:13 #8
Hej.
Det ser rigtig godt ud for kolonne M, men kan du ikke lave det så det også kan bruges i kolonne D, G, og J hvis man starter der.
Ib
Avatar billede supertekst Ekspert
28. september 2009 - 14:36 #9
Det er ikke E, H eller K du mener?
Avatar billede prinsib Seniormester
28. september 2009 - 14:51 #10
Hej.
Nej det skulle være lige som den du har lavet.
6 i M og 2 i E,H og K
6 i J og 2 i E,H og N
6 i G og 2 i E,K og N
6 i D og 2 i H,K og N
Jeg tror ikke der er flere muligheder.
Ib
Avatar billede supertekst Ekspert
28. september 2009 - 15:45 #11
Rem Version 3-1
Rem ===========
Dim flag As Boolean
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Rem Klikkes der i et af områderne
Dim kolonne, række
    If flag = False Then
        kolonne = Target.Column
        række = Target.Row
       
        If kolonne >= 4 And kolonne <= 14 And kolonne <> 6 And kolonne <> 9 And kolonne <> 12 Then
            If række >= 4 And række <= 33 Then
                Target.Value = HentVærdi(kolonne)
   
    Rem Hvis B19 anvendes - Mål-celle (Target) -> 3 * B19 - B19 i "øvrige"
                If Range("B19") <> "" Then
                    If kolonne = 4 Then                            'D
                        sætVærdi "H", "K", "N", Target
                    Else
                        If kolonne = 7 Then                        'G
                            sætVærdi "E", "K", "N", Target
                        Else
                            If kolonne = 10 Then                    'J
                                sætVærdi "E", "H", "N", Target
                            Else
                                If kolonne = 13 Then                'M
                                    sætVærdi "E", "H", "K", Target
                                End If
                            End If
                        End If
                    End If
                End If
            End If
        End If
    End If
    flag = False
End Sub
Private Sub sætVærdi(k1, k2, k3, t As Range)
    flag = True
    Range(k1 & CStr(t.Row)) = Range("B19")
    Range(k2 & CStr(t.Row)) = Range("B19")
    Range(k3 & CStr(t.Row)) = Range("B19")
    t.Value = Range("B19") * 3
End Sub
Private Function HentVærdi(målKolonne)
    flag = True
    If Range("B4") <> "" Then
        Range("B4").Select
       
Rem er tallet hentet fra B4 og er det negativ - indsæt positivt hvis kolonne D, G, J, M
        If Selection.Value < 0 Then
            If målKolonne = 4 Or målKolonne = 7 Or målKolonne = 10 Or målKolonne = 13 Then
                HentVærdi = Selection.Value * -1
                Exit Function
            End If
        End If
    Else
        Range("B19").Select
    End If
    HentVærdi = Selection.Value
End Function
Avatar billede prinsib Seniormester
28. september 2009 - 21:58 #12
Hej supertekst.
Jeg er forbavset. Det virker næsten perfekt.
Den gør lige det jeg vil have den til, men når jeg trykker på min reset knap, som nulstiller B4 og B19, kommer der en fejlbox op, hvori der står.
Only Comments May Appear After End Sub, End Function, or End Properety.
Er det noget du lige kan gennemskue.
Du har brugt så meget tid på dette spørgsmål, at jeg har lyst til at give dig point og lukke dette spm. for derefter at oprette et nyt hvor jeg vil spørge, om jeg må sende et kopi  af arket til dig. Er det ok med dig?
Ib
Avatar billede supertekst Ekspert
28. september 2009 - 22:46 #13
Fint...

Fejlmeldingen - ja - jeg kender den - prøv at se om der skulle stå noget uden for "Sub-start" og End Sub..

Til det sidste - så OK..
Avatar billede prinsib Seniormester
28. september 2009 - 23:30 #14
Hej supertekst.
Du havde ret.
Dim flag As Boolean stod uden for "Sub-start".
Det er rettet, og nu virker den helt perfekt. Den har dog en lille skønhedsfejl, men jeg lukker så du kan få dine velfortjente points.
Jeg åbner et nyt spm. og håber jeg kan få hjælp til "skønhedspletten" også.
Ib
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