Excel - abreviar codigo

 
Vista:

abreviar codigo

Publicado por tatiana (4 intervenciones) el 14/10/2009 18:01:58
Necesito abreviar la sentencia del If.

If Range("E89") = 0 Or Range("E89") = 0 or Range("E90") = 0 Then
MsgBox "Verifique Datos de las celdas E89 a E90"
Exit Sub
End If

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:abreviar codigo

Publicado por jcs (494 intervenciones) el 15/10/2009 08:50:05
Muy buenas,

Tampoco me parece tan larga, pero en fin, por hacer una aportación, 1º tienes repetido E89, que no sé si será un error mecanográfico, sino, repetirlo no aporta nada, por eso bastaría con quitarla una vez. Otra forma un “pelín” más corta podría ser:

If Range("E89") * Range("E90") = 0 Then

Un saludo. Juanjo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:abreviar codigo

Publicado por tatiana (4 intervenciones) el 15/10/2009 17:42:03
y si la sentencia es muy larga..?
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:abreviar codigo

Publicado por Cesar (57 intervenciones) el 15/10/2009 22:44:53
Si la sentencia comprende varios rangos, digamos 10, si seria larga, en esos casos yo haria lo siguiente:

Sub sentencia_larga
if application.worksheetfunction.sum(range("a1:a100")) then
'si la suma de mi rango es cero, pon aqui el codigo que quieres que haga
Else
'de no ser cero, que debe hacer la macro
end if

End Sub

Con esto soluciono el problema.

Espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:abreviar codigo

Publicado por jcs (494 intervenciones) el 16/10/2009 09:12:45
Muy buenas,

El que una celda sea cero no implica que la suma de un rango que la comprenda sea también cero. Esto sí pasa con el producto, esto es, basta con que una única celda de un rango sea cero para que el producto de ese rango sea cero. En excel hay una función que nos da el resultado de un rango:

=producto(E89:E200)
No sé cual es el equivalente de esta función en un macro, si es que lo hay (dejo abiertas las aportaciones)

Entonces yo te sugeriría que pusieses esa función en una celda que tengas vacía, por ejemplo C1 y después tu macro lo dejes así:

If Range("C1") = 0 Then
MsgBox "Verifique Datos de las celdas E89 a E200"
Exit Sub
End If

Un problema que tiene la función producto es que no multiplica las celdas vacías, o sea que para que funcione tiene que ser que la celda tenga cero, no lo detecta si está vacía.

Para solucionar este problema, pero complicando la macro, podría quedar así:

resultado = 1
For i = 89 To 200
resultado = resultado * Range("E" & i)
Next
If resultado = 0 Then
MsgBox "Verifique Datos de las celdas E89 a E200"
Exit Sub
End If

Un saludo. Juanjo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JuanC

RE:abreviar codigo

Publicado por JuanC (1237 intervenciones) el 16/10/2009 12:49:46
desde una macro pueden usarce las funciones con WorksheetFunction

ej: Excel.WorksheetFunction.Product( ... )

Saludos, desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:abreviar codigo

Publicado por jcs (494 intervenciones) el 16/10/2009 20:18:22
Muy buenas,

excelente la aportación de JuanC, como de costumbre. Yo no la conocía. Con esto se evita tener que hacer el paso intermedio y la macro quedaría as:

If Excel.Application.WorksheetFunction.Product(Range("e89:e200")) = 0 Then
MsgBox "Verifique Datos de las celdas E89 a E200"
Exit Sub
End If

Sigue pasando lo de las celdas vacías o con valor cero, por lo que, en su caso, habría que utilizar la otra opción.

Un saludo. Juanjo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar