Estou tentado utilizar o VBA para realizar um cálculo relativamente extenso, que não se repete (não pode ser feito por loop) e que foi extraído do software matemático Maple(apenas a operação matemática em si, o resto do código eu que fiz). Como o Maple calcula nativamente isso, o resultado que ele devolve é correto, porém, quando eu tento realizar a conta pelo VBA ele me devolve um valor diferente. Tentei algumas alternativas para solucionar o problema porém não tive sorte. Dentre os testes eu:
- tentei declarar todas as variáveis "t" das equações como Double.
- tentei modificar a expressão no Maple e simplificá-la(mudar as expressões para "t").
- adicionei uma parte do código para conferir se as variáveis que ele utiliza para calcular estão corretas.
Eu acredito que algo possa estar fazendo o VBA se perder no meio dessa conta, porém não sei o que.
Se alguém puder olhar/ajudar/sugerir algo, ficarei eternamente grato!
PS:Entendo um pouco de programação mas não sou programador, então já aviso, meu código pode parecer meio feioso.
Tentei anexar o arquivo do VBA aqui mas não consegui. Segue o código abaixo:
Private Sub C1()
'Calcula C1 e atribui a B1 da primeira planilha
'Declaração de Variáveis
Dim OD As Double, thick As Double, ID As Double
Dim E As Double
Dim Ine As Double
Dim Ei As Double
Dim Lm As Double
Dim ml As Double, mr As Double
Dim rho As Double
Dim jr As Double, jl As Double
Dim sr As Double, sl As Double
Dim Ar As Double
Dim Mee As Double
Dim re As Double
Dim Le As Double
Dim Fe As Double
Dim beta As Double
Dim omega As Double
Dim Pi As Double
Dim omega_omegan As Double
Dim C1 As Double
'Atribuição dos valores
'Na realidade estes valores são extraidos de células do excel,
'para fins demosntrativos eu atribui os valores diretamente
OD = 0.22
thick = 0.02
Lm = 6
E = 2 * 10 ^ (11)
omega_omegan = 0.8
Pi = 4 * Atn(1)
ID = OD - 2 * thick
Ine = Pi * (OD ^ (4) - ID ^ (4)) / 64
Ei = E * Ine
Ar = Pi * (OD ^ (2) - ID ^ (2)) / 4
rho = 7850
Le = 0.5
beta = 0.617843785182212
Mee = 5
re = 0.2
omega = (beta ^ 2) * (Ei / (rho * Ar)) ^ (1 / 2)
Fe = Mee * re * ((omega_omegan * omega) / (2 * Pi)) ^ (2)
mr = 200
ml = mr
jr = 0
jl = 0
sr = 0
sl = 0
'Exibe os valores que estão sendo usados no cálculo
Range("b13").Value = omega
Range("b14").Value = beta
Range("b15").Value = Ei
Range("b16").Value = rho
Range("b17").Value = Ar
Range("b18").Value = Fe
Range("b19").Value = Mee
Range("b20").Value = ml
Range("b21").Value = mr
Range("b22").Value = jl
Range("b23").Value = jr
Range("b24").Value = sl
Range("b25").Value = sr
Range("b26").Value = re
Range("b27").Value = Le
Range("b28").Value = OD
Range("b29").Value = ID
Range("b30").Value = thick
Pergunta
Leonardo Sochacki
Bom dia a todos!
Estou tentado utilizar o VBA para realizar um cálculo relativamente extenso, que não se repete (não pode ser feito por loop) e que foi extraído do software matemático Maple(apenas a operação matemática em si, o resto do código eu que fiz). Como o Maple calcula nativamente isso, o resultado que ele devolve é correto, porém, quando eu tento realizar a conta pelo VBA ele me devolve um valor diferente. Tentei algumas alternativas para solucionar o problema porém não tive sorte. Dentre os testes eu:
- tentei declarar todas as variáveis "t" das equações como Double.
- tentei modificar a expressão no Maple e simplificá-la(mudar as expressões para "t").
- adicionei uma parte do código para conferir se as variáveis que ele utiliza para calcular estão corretas.
Eu acredito que algo possa estar fazendo o VBA se perder no meio dessa conta, porém não sei o que.
Se alguém puder olhar/ajudar/sugerir algo, ficarei eternamente grato!
PS:Entendo um pouco de programação mas não sou programador, então já aviso, meu código pode parecer meio feioso.
Tentei anexar o arquivo do VBA aqui mas não consegui. Segue o código abaixo:
Private Sub C1()
'Calcula C1 e atribui a B1 da primeira planilha
'Declaração de Variáveis
Dim OD As Double, thick As Double, ID As Double
Dim E As Double
Dim Ine As Double
Dim Ei As Double
Dim Lm As Double
Dim ml As Double, mr As Double
Dim rho As Double
Dim jr As Double, jl As Double
Dim sr As Double, sl As Double
Dim Ar As Double
Dim Mee As Double
Dim re As Double
Dim Le As Double
Dim Fe As Double
Dim beta As Double
Dim omega As Double
Dim Pi As Double
Dim omega_omegan As Double
Dim C1 As Double
'Atribuição dos valores
'Na realidade estes valores são extraidos de células do excel,
'para fins demosntrativos eu atribui os valores diretamente
OD = 0.22
thick = 0.02
Lm = 6
E = 2 * 10 ^ (11)
omega_omegan = 0.8
Pi = 4 * Atn(1)
ID = OD - 2 * thick
Ine = Pi * (OD ^ (4) - ID ^ (4)) / 64
Ei = E * Ine
Ar = Pi * (OD ^ (2) - ID ^ (2)) / 4
rho = 7850
Le = 0.5
beta = 0.617843785182212
Mee = 5
re = 0.2
omega = (beta ^ 2) * (Ei / (rho * Ar)) ^ (1 / 2)
Fe = Mee * re * ((omega_omegan * omega) / (2 * Pi)) ^ (2)
mr = 200
ml = mr
jr = 0
jl = 0
sr = 0
sl = 0
'Exibe os valores que estão sendo usados no cálculo
Range("b13").Value = omega
Range("b14").Value = beta
Range("b15").Value = Ei
Range("b16").Value = rho
Range("b17").Value = Ar
Range("b18").Value = Fe
Range("b19").Value = Mee
Range("b20").Value = ml
Range("b21").Value = mr
Range("b22").Value = jl
Range("b23").Value = jr
Range("b24").Value = sl
Range("b25").Value = sr
Range("b26").Value = re
Range("b27").Value = Le
Range("b28").Value = OD
Range("b29").Value = ID
Range("b30").Value = thick
'Realiza o cálculo de C1 efetivamente
t3 = beta * Lm / 2#
t4 = WorksheetFunction.Sinh(t3)
t5 = sr - Le
t7 = sr * t5 * mr
t8 = t7 + jr
t11 = Sin(t3)
t12 = ml * t11
t13 = WorksheetFunction.Cosh(t3)
t17 = Cos(t3)
t19 = t4 * t4
t23 = beta * beta
t24 = t23 * beta
t25 = t23 * t23
t26 = t25 * t24
t30 = mr * t5
t31 = t13 * t13
t35 = sl * sl
t36 = ml * t35
t38 = (t36 + jl) * rho
t48 = t25 * t23
t50 = sl * t5
t51 = sl + sr
t54 = sl * jr
t55 = jl * Le
t58 = jl * mr
t59 = t58 * t5
t62 = rho * t17
t63 = t62 * t31
t77 = t5 * t51 * mr
t78 = t77 + jr
t83 = t62 * t19
t86 = t25 * beta
t92 = Ar * Le
t95 = jl / 2#
t107 = Ar * rho
t112 = sl + Le
t114 = sl * t112 * ml
t116 = Ar * Ar
t118 = rho * rho
t119 = t118 * t17
t125 = jr / 2#
t129 = ml * mr
t146 = ml * t112
t149 = sl * ml
t159 = t116 * t118
t172 = t116 * Ar
t173 = t118 * rho
t174 = t172 * t173
t192 = jl * jr
t193 = t17 * t17
t204 = t25 * t25
t206 = sr * sr
t209 = -jl * t206 - jr * t35
t213 = t192 * mr
t214 = (t209 * mr - t192) * ml - t213
t216 = t214 * t11 * Ar
t226 = t107 * t13
t232 = t4 * t11
t233 = mr * t206
t255 = ((sr * t51 * mr + jr) * sl * ml + t58 * sr) * Ar * rho
t257 = jl + jr
t258 = t129 * t257
t259 = -2# * t255 - t258
t261 = t259 * t11 * Ar
t272 = t51 * t51
t273 = t272 * mr
t282 = 2# * ((t273 + t95 + jr) * ml + (jl + t125) * mr) * t116 * t118 * t193
t305 = Ar * (t36 + t233 + jl + jr) * rho + 2# * t129 * t51
t307 = t305 * t116 * t118
t308 = t11 * t17
t309 = t308 * t31
t311 = t305 * Ar
t320 = t308 * t19
t335 = ml + mr
t336 = t174 * t335
t349 = t116 * t116
t350 = t118 * t118
t351 = t349 * t350
C1 = -Fe * Ar * ((t8 * jl * ml * t17 * t19 - t4 * t8 * jl * t12 * t13) * t26 + (-t11 * jl * ml * t30 * t31 - t4 * (-2# * t8 * Ar * t38 - jl * ml * t30) * t17 * t13) * t48 + (-((-t50 * t51 * mr - t54 + t55) * ml - t59) * Ar * t63 + 2# * t4 * ml * Ar * (sl * sr * t30 + t55 / 2# + t54) * rho * t11 * t13 + (sl * t78 * ml + t59) * Ar * t83) * t86 + (t12 * Ar * t78 * rho * t31 - 2# * t4 * (t92 * t38 - ml * (t50 * mr - t95)) * Ar * t62 * t13 + t11 * (t77 + jl + jr) * ml * t107 * t19) * t25 + (-(t114 + t7 + jl + jr) * t116 * t119 * t31 - 2# * t4 * ((Le * ml * sl - t7 / 2# - t125) * Ar * rho - t129 * t5) * Ar * rho * t11 * t13 - (t114 + jl) * t116 * t119 * t19) * t24 + (-t11 * t116 * t118 * t146 * t31 - 2# * t4 * (t149 + t30 / 2#) * t116 * t119 * t13 - t11 * (t146 - t30) * t159 * t19) * t23 + (-t4 * t116 * t118 * (t92 * rho + 2# * ml) * t11 * _
t13 + t174 * Le * t17 * t19) * beta + t172 * t17 * t13 * t4 * t173 - t172 * t11 * t31 * t173) * rho / t24 / Ei / (((t192 * t129 * t193 - t192 * t129) * t31 + t192 * ml * mr * t193 * t19) * t204 + (-t216 * t63 - 2# * t4 * (t214 * t193 + (-t209 * mr / 2# + t192 / 2#) * ml + t213 / 2#) * t226 - t216 * t83) * t26 - 4# * t232 * (-Ar * (t233 + jr) * t38 - t129 * (jl * sr + t54)) * t17 * t107 * t13 * t48 + (-t261 * t63 - 2# * t4 * (-t259 * t193 - t255 - t258 / 2#) * t226 - t261 * t83) * t86 + ((-t282 + ((t273 + jr) * ml + t58) * t116 * t118) * t31 + (-t282 + ((t273 + jl + jr) * ml + mr * t257) * t116 * t118) * t19) * t25 + (-t307 * t309 - 2# * t4 * (t311 * rho * t193 - t311 * rho / 2#) * t226 - t307 * t320) * t24 - 4# * t232 * (Ar * (mr * sr + t149) * rho + t129) * t116 * t119 * t13 * t23 + (-t336 * t309 - 2# * t4 * (-t159 * t335 * t193 + t159 * t335 / 2#) * t226 - t336 * t320) * beta + (t351 * t193 - t351) * t31 + t349 * t193 * t19 * t350) / 2#
'Atribui C1 a célula B1 da primeira planilha
Worksheets(1).Range("b1") = C1
End Sub
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.