15. marts 2010 - 15:30Der er
14 kommentarer og 1 løsning
Datavalidering af sum
Hvordan datavaliderer jeg en sum? Jeg har brug for at kunne validere summen af tre celler i samme række, således at man ikke ved indtastning i de tre celler kan få anden sum end præcis 1. Det samme gælder for de tre celler nedenunder, etc. Kan det lade sig gøre og i så fald hvordan?
Den moderne arbejdsplads er i stigende grad afhængig af mødelokaler til at fremme samarbejde, men dette skift medfører også stigende sikkerhedsudfordringer.
ja via vba kode, således at en event aktiveres hver gang at der tastes et beløb i en af de 3 celler. Hvis tallet så er større en 1 så advarer den eller slettet det, eller hvad du nu vil have og det samme sker hvis der indtastet et bogstav.
Dim kolonner As Variant Private Sub Worksheet_Change(ByVal Target As Range) Dim sum As Variant
Rem opsætning af kolonner kolonner = Array(1, 3, 5) 'Tilpas - her kolonne A, C & E Rem Er det i en af de 3 kolonner If erKolonneRelevant(Target.Column) = True Then Rem Er alle 3 kolonner udfyldt If kolonnerUdfyldt(Target.Row, sum) = 3 Then If sum <> 1 Then MsgBox ("Sum i række " & CStr(Target.Row) & " er <> 1") End If End If End If End Sub Private Function erKolonneRelevant(kolNr) Dim x As Byte For x = 0 To UBound(kolonner) If kolNr = kolonner(x) Then erKolonneRelevant = True Exit Function End If Next x erKolonneRelevant = False End Function Private Function kolonnerUdfyldt(rækNr, sum) Dim x As Byte, antal As Byte antal = 0 sum = 0
For x = 0 To UBound(kolonner) If Cells(rækNr, kolonner(x)) <> "" Then antal = antal + 1 sum = sum + Cells(rækNr, kolonner(x)) End If Next x kolonnerUdfyldt = antal End Function
Jeg har et tillægsspørgsmål: Koden bevirker at titlen i de to øverste rækker forsvinder hvis jeg prøver at rette i dem. Hvordan klarer jeg mon den? Pointen er at de to øverste rækker i de valgte kolonner skal holdes fri af koden, da der skal stå tekst i dem alle? (Hvordan giver jeg i øvrigt point for det tillægsspørgsmål?, der er 60 på spil)
Rem VERSION 2 Rem ========= Dim kolonner As Variant, flag As Boolean Private Sub Worksheet_Activate() flag = False End Sub Private Sub Worksheet_Change(ByVal Target As Range) Rem opsætning af kolonner 'E-F-G kolonner = Array(5, 6, 7)
If flag = False Then Rem Er det i en af de 3 kolonner If erKolonneRelevant(Target.Column) = True Then sletDeAndreKolonner Target.Row, Target.Column End If End If End Sub Private Function erKolonneRelevant(kolNr) Dim x As Byte For x = 0 To UBound(kolonner) If kolNr = kolonner(x) Then erKolonneRelevant = True Exit Function End If Next x erKolonneRelevant = False End Function Private Sub sletDeAndreKolonner(rækNr, kolNr) Dim x As Byte, kol As Byte flag = True
For x = 0 To UBound(kolonner) kol = kolonner(x) If kol <> kolNr Then Cells(rækNr, kol) = "" End If Next x flag = False
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.