Retroceder   Foro Ayuda Excel > Dudas y consultas sobre Excel > Macros y programación VBA
Registrarse Preguntas Frecuentes Lista de Foreros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
LinkBack Herramientas Desplegado
  #1  
Antiguo 20/10/08, 16:47:01
Usuario medio Excel
 
Usuario desde: jul 2008
Versión de Excel: Excel 2007
Conectado desde: España
Mensajes: 35
Predeterminado Fórmulas en otra hoja desde VBA

Mi primera pregunta es evidente, porque si no, no sirve seguir: ¿Se puede desde VBA escribir fórmulas complicadas tipo condicional?.
Pienso que si. Cuando escribo (por ejemplo): Sheets("mihoja").Range("B20").Formula = "=2+2" desde VBA me aparece 4 en "mihoja"; pero mi problema es que quiero escribir una formula condicional en una celda determinada desde VBA.
En ese caso me da error. Supongo que podrían ser las comillas; pero no se como escribirlo.
Por ejemplo querría escribir en la celda B20: =SI('otrahoja'!A4='otrahoja'!I4;"Correcto";"Falso" ). Pero cuando escribo la sentencia parecida a antes:
Sheets("mihoja").Range("B20").Formula = "=SI('otrahoja'!A4='otrahoja'!I4;"Correcto";"Falso ")" me da un error. Podría ser por las comillas; pero ¿como diferencio las comillas de principio y final de las que encierra a "Correcto" y "Falso"?.
Asimismo, las que nos indica que quiero comparar a4 y I4 de "otrahoja" ¿están bien con la comilla simple?.
Gracias por la ayuda.

Última edición por ader fecha: 20/10/08 a las 17:37:59.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #2  
Antiguo 20/10/08, 17:39:33
Usuario medio Excel
 
Usuario desde: jul 2008
Versión de Excel: Excel 2007
Conectado desde: España
Mensajes: 35
Predeterminado

He probado concatenando a unas constantes de texto pero me da igual.
Hago R1="Correcto" y R2="Falso" y pongo entonces:
Sheets("mihoja").Range("B20").Formula = "=SI('otrahoja'!A4='otrahoja'!I4;" &R1";" &R2")". Me sigue dando error de síntaxis o "se esperaba fin de sentencia".
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #3  
Antiguo 20/10/08, 17:53:05
ST_ ST_ is offline
Gran participante
 
Usuario desde: sep 2008
Versión de Excel: Excel 2003
Conectado desde: México
Mensajes: 411
Predeterminado

prueba con el objeto/propiedad worksheetfunction,esto es copiado de la ayuda de excel
Se utiliza como contenedor de las funciones de hoja de cálculo de Microsoft Excel que pueden llamarse desde Visual Basic.

Uso del objeto WorksheetFunction
Utilice la propiedad WorksheetFunction para obtener el objeto WorksheetFunction. El siguiente ejemplo muestra el resultado de aplicar la función de hoja de cálculo Min al rango A1:A10.

Set myRange = Worksheets("Sheet1").Range("A1:C10")
answer = Application.WorksheetFunction.Min(myRange)
MsgBox answer


para ver las funciones en ingles,un truquillo.-consiste en grabar con "Doña Grabadora de macros" la funcion a emplear y luego sustituirla con worksheetfunction.nombre de la funcion
__________________
Salu2 ST
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #4  
Antiguo 21/10/08, 08:39:21
Gran participante
 
Usuario desde: jun 2008
Versión de Excel: Excel 2003
Conectado desde: España
Mensajes: 692
Predeterminado

Hola ader

En tu ejemplo vendría a ser

Range("B20").Formula = "=IF(Hoja2!A4=Hoja2!I4,""Correcto"",""Falso"") "

Un saludo desde Vitoria
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #5  
Antiguo 21/10/08, 09:16:53
Usuario medio Excel
 
Usuario desde: jul 2008
Versión de Excel: Excel 2007
Conectado desde: España
Mensajes: 35
Predeterminado

Cita:
Empezado por ST_ Ver Mensaje
prueba con el objeto/propiedad worksheetfunction,esto es copiado de la ayuda de excel
Se utiliza como contenedor de las funciones de hoja de cálculo de Microsoft Excel que pueden llamarse desde Visual Basic.

Uso del objeto WorksheetFunction
Utilice la propiedad WorksheetFunction para obtener el objeto WorksheetFunction. El siguiente ejemplo muestra el resultado de aplicar la función de hoja de cálculo Min al rango A1:A10.

Set myRange = Worksheets("Sheet1").Range("A1:C10")
answer = Application.WorksheetFunction.Min(myRange)
MsgBox answer


para ver las funciones en ingles,un truquillo.-consiste en grabar con "Doña Grabadora de macros" la funcion a emplear y luego sustituirla con worksheetfunction.nombre de la funcion
Muchísimas gracias por la ayuda. Me miraré lo que me cuentas, que no tenía ni idea.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #6  
Antiguo 21/10/08, 09:19:22
Usuario medio Excel
 
Usuario desde: jul 2008
Versión de Excel: Excel 2007
Conectado desde: España
Mensajes: 35
Predeterminado

Cita:
Empezado por ioyama Ver Mensaje
Hola ader

En tu ejemplo vendría a ser

Range("B20").Formula = "=IF(Hoja2!A4=Hoja2!I4,""Correcto"",""Falso"") "

Un saludo desde Vitoria
Muchas gracias por ayudarme. Lo he puesto tal como me dices y sí funciona, aunque no entiendo algo: Dentro de una fórmula que se escribe desde VBA, ¿hay que escribirlo con sintaxis distinta?. Porque yo estoy acostumbrado a poner SI en vez de IF y cuando hago referencia a una hoja debo encerrarlo entre comillas simples. Sin contar que pongo ; no , como me dices que hay que poner.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #7  
Antiguo 21/10/08, 09:25:56
Gran participante
 
Usuario desde: jun 2008
Versión de Excel: Excel 2003
Conectado desde: España
Mensajes: 692
Predeterminado

Hola ader

Como bien dices al escribir en VBA la sintaxis cambia, no obstante como te dice el compañero ST la utilización de la grabadora de macros te solucionará parte de estos problemas.

Un saludo desde Vitoria
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #8  
Antiguo 21/10/08, 09:31:05
Usuario medio Excel
 
Usuario desde: jul 2008
Versión de Excel: Excel 2007
Conectado desde: España
Mensajes: 35
Predeterminado

Ahora cojo la fórmula que me dices, que me funciona, y le añado las dos constantes R1="Correcto" y R2="Falso" y me da un error de síntaxis en VBA.
Lo pongo así:
Sheets("mihoja").Range("B20").Formula = "=IF(otrahoja!$A4=otrahoja!$I4," &R1 "," &R2 ")"
Si quiero ponerlo así es porque en la aplicación que estoy haciendo debe escribir una funcion distinta segun algun suceso. Luego debe admitir variables en la construcción.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #9  
Antiguo 21/10/08, 10:02:53
Usuario medio Excel
 
Usuario desde: jul 2008
Versión de Excel: Excel 2007
Conectado desde: España
Mensajes: 35
Predeterminado

Cita:
Empezado por ioyama Ver Mensaje
Hola ader

Como bien dices al escribir en VBA la sintaxis cambia, no obstante como te dice el compañero ST la utilización de la grabadora de macros te solucionará parte de estos problemas.

Un saludo desde Vitoria
Uff. Ni idea de como usar la grabadora de macros. Si no hay mas remedio me meteré con ello; pero no creía que fuese tan complicado meter una formula en una hoja desde VBA.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
  #10  
Antiguo 21/10/08, 10:31:00
Gran participante
 
Usuario desde: jun 2008
Versión de Excel: Excel 2003
Conectado desde: España
Mensajes: 692
Predeterminado

Hola ader

Pones
Sheets("mihoja").Range("B20").Formula = "=IF(otrahoja!$A4=otrahoja!$I4," &R1 "," &R2 ")"

deberías poner
Sheets("mihoja").Range("B20").Formula = "=IF(otrahoja!$A4=otrahoja!$I4,""" & R1 & """","""" & R2 & """")"

Las comillas suelen ser bastante pesadas.

Un saludo desde Vitoria
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado



La franja horaria es GMT +2. Ahora son las 01:35:17.


© Ayuda Excel

Search Engine Friendly URLs by vBSEO 3.1.0 ©2007, Crawlability, Inc.

1 2 3 4 5 6 7