Avatar billede tifojuve Juniormester
03. april 2019 - 15:00 Der er 3 kommentarer og
1 løsning

Nested loop i VBA Excel

Hej Eksperter.

Jeg får denne fejl:

Run-time error '6':

Overflow

I denne kode:

Sub vanddybde()
Dim y As Integer, x As Integer, z As Integer, d As Integer, activeRow As Integer
Const pi As Double = 3.141592654
Sheets("Ledningsdimensionering").Select
activeRow = 10
Do While Cells(activeRow, 3).Value <> ""
y = 0
z = Cells(activeRow, 36).Value
d = Cells(activeRow, 20).Value
d = d / 1000
Do While x < z
  x = 0.46 - 0.5 * Cos(pi * y / d) + 0.04 * Cos(2 * pi * y / d)
  y = y + 0.001
Loop
Cells(activeRow, 35).Value = y
Cells(activeRow, 37).Value = x
activeRow = activeRow + 1
Loop
End Sub

Som I måske kan se er jeg ikke vanvittigt dytig til VBA, så jeg kan ikke gennemskue hvad der er galt, selvom debuggeren fortæller mig at fejlen er i denne linje:

x = 0.46 - 0.5 * Cos(pi * y / d) + 0.04 * Cos(2 * pi * y / d)

Jeg forsøger at iterere mig frem til den værdi y skal have for at x og z bliver nogenlunde lige store.

Er der en der kan hjælpe?
03. april 2019 - 15:25 #1
måske du skal lave x og y til doubles i stedet for integer, som ikke kan holde komma tal
03. april 2019 - 15:25 #2
og variablen d as double...
Avatar billede tifojuve Juniormester
04. april 2019 - 10:14 #3
Nemlig, det var det der var galt.

Tak for hjælpen, Flemming.

Nu har jeg dog en anden udfordring:

Jeg har opdateret koden lidt, så x og z bliver næsten lige store og y derved mere præcis/realistisk. Jeg har også tilføjet 3 rækker data i Excel-arket, så jeg nu er oppe på  4. Koden fungerer fint i første række, men i de næste 3 rækker bliver y 70-80000 gange større end i række 1.

Sub vanddybde()
Dim y As Double, x As Double, z As Double, d As Double, activeRow As Integer
Const pi As Double = 3.141592654
Sheets("Ledningsdimensionering").Select
activeRow = 10
Do While Cells(activeRow, 4).Value <> ""
y = 0
x = 0
z = Cells(activeRow, 36).Value
d = Cells(activeRow, 15).Value
d = d / 1000
Do Until x > z - 0.0001 And x < z + 0.0001
  x = 0.46 - 0.5 * Cos(pi * y / d) + 0.04 * Cos(2 * pi * y / d)
  y = y + 0.00005
Loop
Cells(activeRow, 35).Value = y
Cells(activeRow, 37).Value = x
activeRow = activeRow + 1
Loop
End Sub

Jeg få dette output for y i række 1-4:

Række 1: 0,0907
Række 2: 6836,9777
Række 3: 7294,8340
Række 4: 6466,3264

Hvis jeg fjerner "d = d / 1000" i koden får jeg dette output for y:

Række 1: 90,6489
Række 2: 88,0649
Række 3: 86,0658
Række 4: 89,6600

Hvad er der galt?
04. april 2019 - 11:09 #4
Din matematik må du selv finde ud af :-)
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

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