29. august 2014 - 08:41Der er
8 kommentarer og 1 løsning
Ændring af tid på bestemte celler afhængig af hvad der indtastes
Overskriften er lidt svær at definere. Vi har en medarbejderrapport som vi notere komme/gå tid samt en masse andet. Problemet er, at der hvor vi notere pause, vil jeg gerne have det til at fungere på følgende måde (celleområdet for pause er c14:c44) I celle AD7 står der 0:30 (bruges til at tjekke)
1. som standard står der 0:30 i pause 2. hvis en har deltid er feltet måske blankt, fordi man så ikke har middagspause. 3. en pause kan ikke være under 0:30. Så skrives der eks. 0:25 skal det automatisk ændres til 0:30
Jeg har googlet til et eller andet og det jeg er kommet frem til er, at der nok skal bruges denne funktion: If Intersect(Target, Range("C14:C44")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub
hermed er det kun celleområdet koden reagere på.
Håber jeg har fået alt med...ellers stil endelig spørgsmål.
Sådan som jeg læser din problemstilling, så kan du løse det ved at lave datavalidering i c14:c44 med en liste i stil med AD6:AD7, hvor AD6 bare er tom.
Således kan der kun tastes værdierne blank (0) og 0:30 ind i cellerne.
Arh, ikke helt. Har nok lige glemt en lille vigtig detalje. Dem som ikke har deltid har mulighed for at holde pause ud over den halve time (afspadsering eller Flex). Her bruger jeg datavalidering, så jeg har låst dem fast på at de ikke kan skrive mindre end en ½ time og ikke højere end 8:00. Der kommer selvfølgelig en advarsel hvis der skrives under 0:30, så kan man forsøge igen. Udfordringen er at hvis man trykker delete, hvilket gør feltet tomt, så har vi problemet...fordi dem som har pause skal jo holde sin pause og feltet må ikke være tomt.
Håber det er til at forstå.
Så hvis man kan finde en måde på at feltet ikke må være tomt, hvis man er på fuld tid, så vil den kunne løse mit problem.
Har faktisk lige løst den med denne kode ved hjælp af Intersect.
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("D14:D44")) Is Nothing Or Target.Cells.Count > 1 Then Exit Sub 'Set the values to be uppercase Application.EnableEvents = False If Range("AR" & (ActiveCell.Row)).Value = 1 Then ' ingenting Else If IsEmpty(Range("D" & (ActiveCell.Row))) Then Target.Value = "0:30" MsgBox "Du kan ikke skrive en pause på 0 min." & vbCrLf & "Der kan skrives en pause mellem 0:30 og 8:00." & vbCrLf & "Der indsættes automatisk pause på 0:30", vbOKOnly + vbInformation, "Du kan ikke slette pause" Else End If End If Application.EnableEvents = True End Sub
Problemet er jo at feltet for pause gerne må være tomt hvis man er på deltid, for så har man jo ikke pause! Derfor kan datavalidering ikke bruges. Min kode løser i hvert fald mit problem.
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.