twee getallen optellen in VBA-Excel

Status
Niet open voor verdere reacties.

Plotinus

Gebruiker
Lid geworden
25 mrt 2007
Berichten
649
Ik wil twee (naastgelegen) cellen optellen en evalueren in VBA-Excel waarbij een paar variabelen worden meegegeven (zoals weeknummer; wknr en naam). Dit lukt, maar ziet er erg omslachtig uit, wat dus mogelijk vertragend werkt. Vraag is dus of dit slimmer kan. Hieronder de gehele 'event' met in 'Bold' de lijn code waar het om gaat en in groen waar het verschil in de optelling zit..

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Dim wknr As Byte
    Dim Verplts As Single
    wknr = DatePart("ww", Now)
    Titel = "Urencontrole"
    Application.ScreenUpdating = False
    If (Target.Column = 12 Or Target.Column = 18) Then
        If Target.Value = "Piet" Then Verplts = 0
        If Target.Value = "Klaas" Then Verplts = 3
      [B]  Toebedeeld = Worksheets("Inzetbaarheid").Range("E" & wknr).Offset(3, [COLOR="#008000"]Verplts[/COLOR]) + Worksheets("Inzetbaarheid").Range("E" & wknr).Offset(3, [COLOR="#008000"]Verplts + 1[/COLOR])[/B]
        Beschikbaar = Worksheets("Inzetbaarheid").Range("D" & wknr).Offset(3, Verplts)
        Bericht = "Te veel uren voor " & Target.Value & "! In deze week (week " & wknr & " ) heeft " & Target.Value & " " & Toebedeeld & " uur toebedeeld gekregen, maar hij heeft dan " & Beschikbaar & " uur beschikbaar."
        If (Target.Value = "Piet" And Toebedeeld > Beschikbaar) Then Button = MsgBox(Bericht, 48, Titel)
        If (Target.Value = "Klaas" And Toebedeeld > Beschikbaar) Then Button = MsgBox(Bericht, 48, Titel)
    End If
    ActiveWorkbook.Save
End Sub
 
De vertraging is te verwaarlozen, computer zijn zo snel, sneller dan dat jij van de ene cel naar de ander cel kan springen

Gebruik "With" in combinatie met . , hiermee worden de regels korter en overzichtelijker
Code:
[COLOR="#FF0000"]With Worksheets("Inzetbaarheid")[/COLOR]
            Toebedeeld = [COLOR="#FF0000"].[/COLOR]Range("E" & wknr).Offset(3, Verplts) + [COLOR="#FF0000"].[/COLOR]Range("E" & wknr).Offset(3, Verplts + 1)
            Beschikbaar = [COLOR="#FF0000"].[/COLOR]Range("D" & wknr).Offset(3, Verplts)
        End With
 
Laatst bewerkt:
Bijv.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 12 Or Target.Column = 18 Then
    sn = Sheets("Inzetbaarheid").UsedRange.Columns(5).Resize(, 3)
        
    y = DatePart("ww", Date, 2) + 3
    y1 = -2 * (Target = "Klaas")
    x1 = sn(y, 1 + y1) + sn(y, 2 + y1)
    x2 = sn(y, 4 + y1)
        
    If x1 > x2 Then c00 = "In week " & y - 3 & " ) heeft " & Target & " " & x1 & " uur toebedeeld gekregen, maar heeft " & x2 & " uur beschikbaar."
    If c00 <> "" Then MsgBox c00, 48, "Te veel uren voor " & Target
  End If
  ActiveWorkbook.Save
End Sub
 
Dank je wel snb. Jouw oplossing is iets complexer dan van alphamax; weer wat van geleerd.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan