Beste allen,
Ik ben nieuw in het werken met VBA en probeer met VBA het jaar waarin een object schade door droogstand oploopt te berekenen. Dit is me, met behulp van dit fijne forum, al gelukt, maar ik probeer nu om de rij waaruit de macro de waterstanden moet halen aan te passen aan de locatie van het object. Hiervoor heb ik een locatiebepaling bij elk object gevoegd (in het voorbeeld in kolom C) die overeenkomt met een meetreeks in het tabblad "Data". Ik heb al even lopen pielen ermee en ik zat in de richting te denken van het gebruiken van Hlookup of een dubbele For loop, maar ik kom er maar niet uit. Kunnen jullie mij misschien helpen?
Bijgevoegd het voorbeeldbestand en de code die ik nu heb.
Groet,
Bram
Bekijk bijlage Voorbeeld (1).xlsm
Ik ben nieuw in het werken met VBA en probeer met VBA het jaar waarin een object schade door droogstand oploopt te berekenen. Dit is me, met behulp van dit fijne forum, al gelukt, maar ik probeer nu om de rij waaruit de macro de waterstanden moet halen aan te passen aan de locatie van het object. Hiervoor heb ik een locatiebepaling bij elk object gevoegd (in het voorbeeld in kolom C) die overeenkomt met een meetreeks in het tabblad "Data". Ik heb al even lopen pielen ermee en ik zat in de richting te denken van het gebruiken van Hlookup of een dubbele For loop, maar ik kom er maar niet uit. Kunnen jullie mij misschien helpen?
Bijgevoegd het voorbeeldbestand en de code die ik nu heb.
Groet,
Bram
Bekijk bijlage Voorbeeld (1).xlsm
Code:
Sub waterstanden()
Dim i As Long, L2 As Long, a, cl As Range, lCalcState As Long, _
Starttime As Double, SecondsElapsed As Double, Jaren As Integer
Application.ScreenUpdating = False
Starttime = Timer
lCalcState = Application.Calculation
Application.Calculation = xlCalculationManual
a = Worksheets("Data").Range("A1").CurrentRegion.Value
Jaren = InputBox("Na hoeveel jaar leidt droogstand tot schade?", "B.J.W. Wassenaar:", 15)
Range("K11").Value = Jaren
For Each cl In Range("D2:D6")
L2 = 0
For i = 2 To UBound(a)
L2 = L2 - (a(i, 2) < cl.Offset(0, -2).Value)
If cl.Offset(0, -2).Value = "" Then
cl = ""
ElseIf L2 >= Jaren * 24 Then
cl = a(i, 1)
Exit For
Else
cl = Math.Round((L2 + 0.000001) / 2, 0)
End If
Next i
Next cl
Application.Calculation = lCalcState
SecondsElapsed = Round(Timer - Starttime, 2)
' Geluid. Vooral handig als running time lang is en je meer te doen hebt.
' Als het geluid lang is, duurt het ook langer tot de MsgBox verschijnt.
Set oVoice = CreateObject("SAPI.SpVoice")
Set oSpFileStream = CreateObject("SAPI.SpFileStream")
oSpFileStream.Open "W:\Projecten\030\08 Werkmap adviseur\Bram Wassenaar\GWS\cash-register-05.wav"
oVoice.SpeakStream oSpFileStream
oSpFileStream.Close
' oVoice.Speak "Finished Playing wave file." -> Een stem die zegt wat er tussen aanhalingstekens staat.
MsgBox "Deze code is uitgevoerd in " & SecondsElapsed & " seconden.", vbInformation + vbSystemModal, "B.J.W. Wassenaar:"
Application.ScreenUpdating = True
End Sub