Saltar al contenido

Duda formula macro con argumentos variables (en celdas)


Recommended Posts

publicado

Buenas tardes,

Tengo un problema para introducir una formula en una Macro VBA Excel.

Esta es la formula :

=E3_GRID("Tableau Rapport EE Elec";"27/01/2014";"03/02/2014";"CAS_CG820_E")

Es una formula que funciona localmente si la escribo en una celda e introduzo todos los campos. Sin embargo, lo que yo quiero es poder usarla de forma automatica con un boucle for y que varie el ultimo campo en funcion de una lista.

Es decir, mi duda es : Como puedo hacer para introducir una formula "propia" en una Macro y al mismo tiempo poder hacer referencia a celdas de una hoja ?

He intentado :

""

Pero no tiene en cuenta los valores de las celdas.

Agradezco de antemano toda ayuda.

Espero haber sido claro en la descripcion de mi problema.

publicado

___________________________________________________________

En esta macro se pone fórmula al rango A1:A4

Sub LoopFórmula()
Dim p1 As Variant, p2 As Date, p3 As Date, p4(4) As Variant

p1 = "Tableau Rapport EE Elec"
p2 = "27/01/2014"
p3 = "03/02/2014"
p4(0) = "CAS_CG820_E"
p4(1) = "CAS_CG821_E"
p4(2) = "CAS_CG822_E"
p4(3) = "CAS_CG823_E"

Range("A1").Select
For p = 0 To UBound(p4)
ActiveCell.Formula = "=E3_GRID(" & p1 & "," & p2 & "," & p3 & "," & p4(p) & ")"
ActiveCell.Offset(1, 0).Select
Next

End Sub
[/CODE]

___________________________________________________________

Recuerda subir un archivo con todo lo necesario para poder probar la solución tal como se indica en las Normas del Foro. Si no lo haces te arriesgas a no recibir respuesta a tu consulta.

Bienvenido al foro.

publicado

Hola,

Muchas gracias por la respuesta ! He intentado subir mi fichero Excel para que todo fuese mas facil de explicar pero no funciona

Sin embargo, sigo teniendo el mismo problema. En archivo adjunto (pdf) incluyo la hoja donde quiero que se ejecute la macro.

  • En la columna B pondré todos los canales a ir seleccionado cada vez con el bucle for
  • En la celda F3 esta la fecha de inicio a introducir en la formula
  • En la celda G3 la fecha final
  • La formula que me da problemas se ejecutara siempre en la celda F7 porque al ejecutarse obtendra datos via el Add-in del que os hablé.

Con la macro que me propusiste, coge bien los datos de la hoja, pero al no respectar el formato exacto (todo entre comillas) la formula no funciona.

He buscado en internet como intentar introducir comillas en VBA. Si intento poner dos pares de comillas (ejemplo : ""fecha"") me da error. He encontrado el codigo "Chr $" que corresponde a las comillas pero creo que lo introduzco mal, porque me da error.

Sub Ejemplo()
'
' Ejemplo Macro
'

Dim p1 As Variant, p2 As Date, p3 As Date, p4(4) As Variant
Dim i As Byte

i = 2

p1 = "Tableau Rapport EE Elec"
p2 = Cells(3, 6) 'Fecha inicio
p3 = Cells(3, 7) 'Fecha fin
p4(0) = Cells(i, 2) 'Canal variable
p4(1) = "CAS_CG821_E"
p4(2) = "CAS_CG822_E"
p4(3) = Cells(i, 2)

Range("F7").Select
For p = 0 To UBound(p4) - 1
'He introducido el -1 porque sino aparecia por quinta vez una formula pero sin ningun canal como argumento

ActiveCell.Formula = "=E3_GRID(" & p1 & "," & p2 & "," & p3 & "," & p4(p) & ")"
'Yo he intentado ponerlo asi pero me da error :7
'ActiveCell.Formula = "=E3_GRID(" & Chr$& & p1 & & Chr$& "," & p2 & "," & p3 & "," & p4(p) & ")"


'Despues de la formula, habra otra rutina de copiar/pegar en una hoja determinada (del nombre de cada canal)
'No pongo aqui esa parte porque sino el codigo seria muy largo
'Una vez copiados los datos el boucle for hara p+1 y volvera a realizar la misma operacion para otro canal

Next p


'
End Sub[/CODE]

Muchas gracias de antemano !

Ejemplo.pdf

publicado

He encontrado esta otra formula para introducir comillas, pero me da un error al seleccionar cada variable

Sub Comillas()

Selection.InsertAfter """"

Selection.InsertBefore """"

End Sub

Aqui os pongo el codigo de como he introducido yo esta subfuncion :

Dim p1 As Variant, p2 As Date, p3 As Date, p4(4) As Variant
Dim i As Byte

i = 2

p1 = "Tableau Rapport EE Elec"
p1.Select
Selection.InsertAfter """"
Selection.InsertBefore """"

p2 = Cells(3, 6)
p2.Select
Selection.InsertAfter """"
Selection.InsertBefore """"
p3 = Cells(3, 7)
p3.Select
Selection.InsertAfter """"
Selection.InsertBefore """"[/CODE]

Muchas gracias por la ayuda, espero no ser muy pesado, pero aunque suelo encontrar soluciones a las macro que hago, esta vez estoy un poco perdido por el hecho de querer utilizar una formula que no forma parte de las formulas tipicas Excel.

publicado

@[uSER=168603]Shaekin[/uSER], así de seguro NO conseguiras ayuda, si le haces caso al maestro @[uSER=46507]Macro Antonio[/uSER]

Recuerda subir un archivo con todo lo necesario para poder probar la solución tal como se indica en las Normas del Foro. Si no lo haces te arriesgas a no recibir respuesta a tu consulta.

Normas y Reglas del Foro | Ayuda Excel

de seguro que conseguiras la información de como subir tu ejemplo en Excel, suerte

publicado

Perdon !

La verdad es que intenté subir el archivo pero no pense que en modo .rar se podria. Gracias !

Aqui subo el fichero Excel con las mismas explicaciones que he dado antes. Espero ahora si que no me haya vuelto a equivocar al escribir el mensaje.

Atentamente,

Ejemplo.rar

publicado

amigo @[uSER=168603]Shaekin[/uSER], a mi parecer, creo que tienes ciertos problemas de concepto de como funcionan las formulas; si una formula tiene un parámetro que es de tipo texto, puedes pasarle ese valor (texto) bien entre comillas (ejemplo: "Valor 01") o haciendo referencia a una celda que contenga ese valor de texto, te coloco un ejemplo, tenemos la funcion MiPrueba

Public Function MiPrueba(ByVal sPrueba As String) As String
MiPrueba = sPrueba
End Function[/CODE]

en una celda yo puedo escribir esto:

=MiPrueba(D1), lo cual me mostrara el texto que este en la celda D1

o también de esta forma

=MiPrueba("Esto en una Prueba"), con lo cual me mostrara el texto "[b]Esto es una Prueba[/b]"

entiendes la idea de todo esto?, yo creo que tu formula pudieras escribirla así sin complicaciones

=E3_GRID("Tableau Rapport EE Elec",F3,G3,B2)

si aún así tienes problemas, pues puedes intentar con esto:

[CODE]Sub Ejemplo()
p1 = """" & "Tableau Rapport EE Elec" & """"
p2 = """" & Cells(3, 6) & """"
p3 = """" & Cells(3, 7) & """"

p4 = """" & Cells(2, 2) & """"

ActiveCell.Formula = "=E3_GRID(" & p1 & ";" & p2 & ";" & p3 & ";" & p4 & ")"

End Sub[/CODE]

sin embargo no garantizo nada ya que no puedo hacer ninguna prueba ya que la funcion [b]E3_GRID[/b] NO existe en el archivo que subiste y no hay forma de probarla; pudiera darse el caso también que la funcion NO este bien planteada, deberias subir tu archivo con la función incluida, suerte

publicado

Hola,

Muchas gracias, effectivament la formula funciona gracias a tu ayuda de como incluir comillas.

Aqui dejo el codigo por si a alguien le interesa :

Sub Ejemplo()
'
' Ejemplo Macro
'
Dim p1 As Variant
Dim p2 As Variant
Dim p3 As Variant
Dim p4 As Variant

p1 = """" & "Tableau Rapport EE Elec" & """"
p2 = """" & Cells(3, 6) & """"
p3 = """" & Cells(3, 7) & """"

'Range("F7").Select

Cells(7, 6).Select
p4 = """" & Cells(2, 2) & """"

ActiveCell.Formula = "=E3_GRID(" & p1 & "," & p2 & ", " & p3 & "," & p4 & ")"

'
End SubSub Ejemplo()
'
' Ejemplo Macro
'
Dim p1 As Variant
Dim p2 As Variant
Dim p3 As Variant
Dim p4 As Variant

p1 = """" & "Tableau Rapport EE Elec" & """"
p2 = """" & Cells(3, 6) & """"
p3 = """" & Cells(3, 7) & """"

'Range("F7").Select

Cells(7, 6).Select
p4 = """" & Cells(2, 2) & """"

ActiveCell.Formula = "=E3_GRID(" & p1 & "," & p2 & ", " & p3 & "," & p4 & ")"

'
End Sub[/CODE]

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.