** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Automatizar en excel sin access
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Automatizar en excel sin access

 Responder Responder
Autor
Mensaje
John_Arnedo Ver desplegable
Habitual
Habitual
Avatar

Unido: 13/Febrero/2009
Localización: Colombia
Estado: Sin conexión
Puntos: 150
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita John_Arnedo Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Automatizar en excel sin access
    Enviado: 17/Mayo/2017 a las 08:46
Hola a todos, mis respetos porque esta comunidad ha superado la prueba del tiempo, sin duda la más difícil.  
Les pido por favor alguna sugerencia para ir haciendo el trabajo o si ya tienen algo así publicado; tambien un poco de paciencia para conmigo porque mi conocimiento en estos temas tan avanzados son muy pobres. 

Tengo una "aplicación" en excel para liquidar intereses de obligaciones dinerarias donde debo manualmente asignar las variables (capital, vencimiento, fecha liquidación etc.). 

En otro archivo de excel u otra hoja del mismo libro (también puede ser), tengo varios registros con las variables necesarias para poder liquidar los intereses . ¿Cómo hago para que excel haga eso automáticamente, es decir que la información de cada registro use la "aplicación" para arrojarme el resultado de los intereses sin que yo tenga que meter manualmente en la aplicación los datos?

Es una estupidez morir por tu país, es mejor que el enemigo muera por el suyo.
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Alcalá Meco
Estado: Sin conexión
Puntos: 2874
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita lbauluz Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Mayo/2017 a las 01:57
Buenas tardes John_Arnedo

¿Puedes explicar un poco más?, quiero decir algo así como

En la hoja1 en la celda A4 tengo el valor X, que tengo que multiplicarlo por la celda X5 de la hoja3 y restarle lo que hay en....

Porque en principio, lo que pides no parece difícil, pero hace falta más información.

Un saludo


Luis
Quod natura non dat, Salmantica non præstat
Arriba
John_Arnedo Ver desplegable
Habitual
Habitual
Avatar

Unido: 13/Febrero/2009
Localización: Colombia
Estado: Sin conexión
Puntos: 150
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita John_Arnedo Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 18/Mayo/2017 a las 02:42
Hola Ibauluz, gracias por responder.

Mira esta es la plantilla a la que llamo "aplicación":

https://1drv.ms/i/s!AhMiWCJsGH2OgZRCGya4163ceE1Lug

Lo que encerré en circulo son las variables, es lo único que modifico para cada liquidación. 

Mira ahora esta imágen:

https://1drv.ms/i/s!AhMiWCJsGH2OgZRDSgE164mTDtAsjQ


En esta ultima imágen, a mi me toca llenar manualmente la columna de intereses con los resultados que me salga de la "aplicación". Quiero que Excel lo haga automáticamente como una especie de vinculación. 

PD.: No sé si está permitido el uso de imagenes como lo que subí, estoy retomando el foro realmente y no me he actualizado aún.
Es una estupidez morir por tu país, es mejor que el enemigo muera por el suyo.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 4939
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 20/Mayo/2017 a las 12:22
Hola John_Arnedo, has aportado dos imágenes pero no has aclarado lo más importante, que es lo que te ha pedido lbauluz:

«... quiero decir algo así como... En la hoja1 en la celda A4 tengo el valor X, que tengo que multiplicarlo por la celda X5 de la hoja3 y restarle lo que hay en....»

Tal como dice lbauluz; podría ser fácil de resolver, pero es necesario saber que es lo que pretendes resolver, con que datos, donde están ubicados, etc.
Pregunta lo que no sabes, recuérdalo para cuando te pregunten y ofrece tu ayuda (reconforta).

Mi sitio_web con ejemplos Excel.
Arriba
John_Arnedo Ver desplegable
Habitual
Habitual
Avatar

Unido: 13/Febrero/2009
Localización: Colombia
Estado: Sin conexión
Puntos: 150
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita John_Arnedo Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 20/Mayo/2017 a las 22:31
Bueno, la cosa es así.

Primero que todo quiero recordar cada imágen son dos libros totalmente diferentes.

Editado: los siguientes pasos corresponden a un solo registro (el primero):
  • Quiero que la celda que llamo "Cll_Capital" en la aplicación, tome el valor de la celda B3 del otro libro.
  • Quiero que la celda que llamo "Cll_Vencimiento" en la aplicación tome el valor que está en la celda A2)
  • Quiero que la celda que llamo "Cll_Fechaliquidación" en la aplicación tome el valor que está en la celda A3 del otro libro. 
Habiendo hecho esto la aplicación debe arrojar un resultado. Quiero que ese valor sea tomado por la celda C3 del segundo libro. 

Luego debe haber un recalculo porque debemos ir bajando en cada fila del libro hasta que ya no haya mas registros. 


Desde access, (editado: gracias a Emlio) tengo el siguiente código (hay otros campos, pero da igual) que me ha servido para mandar de access a Excel, recalculando para cada registro: 

Private Sub Cmd_solo_calcular_Click()
On Error GoTo cmdsoloCalcularExcel_Click_TratamientoErrores

Dim xls As Excel.Application, _
    rst As DAO.Recordset, _
    strSQL As String, _
    strArchivo As String
    
strArchivo = CurrentProject.Path & "\Documentos\plantillas\Cálculo de intereses comerciales.xltx"


If Dir(strArchivo) = "" Then
    MsgBox "El archivo " & strArchivo & " No existe", vbCritical + vbOKOnly, "ATENCION"
    Exit Sub
End If

' creo una instancia a Excel
Set xls = CreateObject("Excel.Application")

xls.Workbooks.Open (strArchivo)

' activo la hoja 1
xls.Worksheets("Hoja1").Activate

' aplico recalculo automático
xls.Application.Calculation = xlCalculationAutomatic

' abro un recordset con los registros coincidentes con el formulario principal
        strSQL = "SELECT Valortitulo, Fechavencimiento, Intereses, Fechapago, idcaso, referencia, Clasedetitulo, Plazodesde, TasaPlazo, TasaMora, Interesesplazo "
        strSQL = strSQL & "FROM TblObligacionesejecutables "
        strSQL = strSQL & "WHERE [idcaso]=  " & Me.Id & ""
        
                        
Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)

' si el recordset tiene datos
If Not rst.EOF And Not rst.BOF Then
    ' hago un bucle con todos los registros
    Do While Not rst.EOF
        ' escribo los valores desde Access en las respectivas celdas (formateadas) de la hoja de calculo
        xls.ActiveSheet.Range("Cll_Capital") = rst!Valortitulo
        xls.ActiveSheet.Range("Cll_Vencimiento") = rst!FechaVencimiento
        xls.ActiveSheet.Range("Cll_Claseobligación") = rst!Clasedetitulo
        xls.ActiveSheet.Range("Cll_Referencia") = rst!Referencia
        
            If IsNull(rst!Fechapago) Or Not IsDate(rst!Fechapago) Or rst!Fechapago = "" Then
            xls.ActiveSheet.Range("Cll_Fechaliquidación") = DateTime.Date()
            Else
            xls.ActiveSheet.Range("Cll_Fechaliquidación") = rst!Fechapago
            End If
            
        If IsNull(rst!Plazodesde) Or Not IsDate(rst!Plazodesde) Or rst!Plazodesde = "" Then
        xls.ActiveSheet.Range("Cll_Intplazo") = rst!FechaVencimiento
        Else
        xls.ActiveSheet.Range("Cll_Intplazo") = rst!Plazodesde
        End If
                                     
        rst.Edit
        rst!Intereses = xls.ActiveSheet.Range("Cll_Interesesmora")
        rst!InteresesPlazo = xls.ActiveSheet.Range("Cll_Interesesplazo")
        rst.Update
                              
        ' salto al siguiente registro
        
        rst.MoveNext
                
                                   
    Loop
End If

' cierro el recordset
If Not rst Is Nothing Then
    rst.Close
    Set rst = Nothing
End If

' cierro Excel, para evitar que me pregunte si quiero guardar, le engaño diciendo que ya lo está
xls.ActiveWorkbook.Saved = True
xls.Quit
xls.Application.Quit
Set xls = Nothing

' refresco el formulario
Me.Frmobligacionesejecutables.Requery

cmdCalcularExcel_Click_Salir:
    On Error GoTo 0
    Exit Sub
   
cmdsoloCalcularExcel_Click_TratamientoErrores:

    MsgBox "Error " & Err.Number & " en proc.: cmdCalcularExcel_Click de Documento VBA: Form_frmObligaciones ejecutables(" & Err.Description & ")"
    GoTo cmdCalcularExcel_Click_Salir
End Sub



Editado: traigo a colación este código porque es muy similar a lo que actualmente quiero, solo que sin access.



Editado por John_Arnedo - 21/Mayo/2017 a las 11:43
Es una estupidez morir por tu país, es mejor que el enemigo muera por el suyo.
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Alcalá Meco
Estado: Sin conexión
Puntos: 2874
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita lbauluz Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 22/Mayo/2017 a las 01:37

  • Quiero que la celda que llamo "Cll_Capital" en la aplicación, tome el valor de la celda B3 del otro libro.
En esa celda Cll_Capital debes poner
=[Libro2]Hoja1!$b$3

Teniendo en cuenta que libro2 debe ser el nombre del libro y Hoja1 debe ser el nombre de la hoja.

Quiero que la celda que llamo "Cll_Vencimiento" en la aplicación tome el valor que está en la celda A2

Supongo que es en el mismo libro y misma hoja, en la celda CII_Vencimiento debes poner
=$A$2
o en este caso, te valdría 
=A2

Si es en otra hoja
=Hoja2!A2
Y  si es otro libro, está respondido en el punto 1

  • Quiero que la celda que llamo "Cll_Fechaliquidación" en la aplicación tome el valor que está en la celda A3 del otro libro. 
Igual que el punto 1, solo que cambia $b$3 por SA$3

Un saludo.

Luis
Quod natura non dat, Salmantica non præstat
Arriba
John_Arnedo Ver desplegable
Habitual
Habitual
Avatar

Unido: 13/Febrero/2009
Localización: Colombia
Estado: Sin conexión
Puntos: 150
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita John_Arnedo Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 22/Mayo/2017 a las 13:11
jejejje no, no me han entendido. 

Voy a tratar de explicar todo, no solo lo que necesito sino lo que estoy haciendo:

Tengo un archivo de excel que es una plantilla donde calculo los intereses por periodos de tiempo trimestrales de conformidad con los cambios en las tasas que legalmente se dan (no es una tasa única). Cuando voy a calcular un solo crédito, la cuestión es fácil simplemente entro en la plantilla y modifico los valores de las celdas "Cll_Capital", "Cll_vencimiento", Cll_Fechaliquidación" y ?¡woala!el me calcula por cada trimestre cuanto generó, ejemplo: 

Cll_Capital = $56.093.602
Cll_vencimiento= 20/01/2016
Cll_Fechaliquidación= hoy()

arroja los siguientes resultados, el solito:

Resolución Desde Hasta TASA No. DIAS VALOR TASA No. DIAS VALOR
1788 del 28/12/2015 1/01/2016 31/03/2016 19,68%  -     $ -    29,52%  71   $ 3.212.232 
0334 del 29/03/2016 1/04/2016 30/06/2016 20,54%  -     $ -    30,81%  91   $ 4.297.000 
0811 del 28/06/2016 1/07/2016 30/09/2016 21,34%  -     $ -    32,01%  92   $ 4.513.420 
1233 del 29/09/2016 1/10/2016 31/12/2016 21,99%  -     $ -    32,99%  92   $ 4.650.895 
1612 del 26/12/2016 1/01/2017 31/03/2017 22,34%  -     $ -    33,51%  90   $ 4.622.205 
0488 del 27/03/2017 1/04/2017 30/05/2017 22,33%  -     $ -    33,50%  51   $ 2.618.077 


Esta plantilla es la que yo llamo "APLICACIÓN"

El otro archivo o libro, contiene una cantidad de registros o filas, para incluir.

Editado:

Hacer lo que sugieres no me otorga ningún beneficio, porque me obliga a ingresar los datos uno por uno para conseguir que se liquidara. Es más la forma como sugieres lo que hace es modificar la plantilla y no sería práctico. Yo no voy a modificar la plantilla.


Esto es lo que necesito: Cada fila del libro (diferente a la plantilla) debe calcularse independientemente conforme a la plantilla.

No podemos omitir la última parte del mensaje anterior: 

Habiendo hecho esto la aplicación debe arrojar un resultado. Quiero que ese valor sea tomado por la celda C3 del segundo libro. 

Luego debe haber un recalculo porque debemos ir bajando en cada fila del libro hasta que ya no haya mas registros. 

La plantilla no puede ser modificada en la forma como sugieres porque entonces quedan el resto de filas sin calcular.

Es más, en la práctica la plantilla ni siquiera debería estar abierta (al menos no visible), es como crear una instancia del archivo temporal para que se haga el cálculo, se cierre y vuelva y se abra para que haga el cálculo con otra fila. 


Editado por John_Arnedo - 22/Mayo/2017 a las 17:14
Es una estupidez morir por tu país, es mejor que el enemigo muera por el suyo.
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 4939
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita AnSanVal Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 22/Mayo/2017 a las 22:01
Publicado originalmente por John_Arnedo John_Arnedo escribió:

jejejje no, no me han entendido.    ¿No será que no te has explicado?

Voy a tratar de explicar todo, ...   Intentarlo ya es algo, pero te ha faltado (según lo veo yo).

Si lo he entendido bien, creo que necesitas un bucle que lea los diferentes registros del segundo libro, que tome datos del mismo, los escriba secuencialmente en el primer libro (que calcula los resultados) luego tomará esos resultados, no se que celdas son, y los escriba en las correspondientes celdas de destino, no se tampoco que celdas son ni a que libro pertenecen.


En el primer cálculo los datos a tomar para el cálculo, (entiendo) dices que son: [Libro2.xlsm]Hoja1!$B$3, [Libro2.xlsm]Hoja1!$A$2 y [Libro2.xlsm]Hoja1!$A$3, para el segundo cálculo ... ¿Serán [Libro2.xlsm]Hoja1!$B$4, [Libro2.xlsm]Hoja1!$A$3 y [Libro2.xlsm]Hoja1!$A$4 ,  o serán (fechas diferentes) [Libro2.xlsm]Hoja1!$B$5, [Libro2.xlsm]Hoja1!$A$4  y [Libro2.xlsm]Hoja1!$A$5 ?


Suponiendo que el primer libro se llama Aplicación.xlsx  (la hoja: Hoja1) y el segundo libro Libro2.xlsm (la hoja: Hoja1), el código sería algo parecido a:


Sub Prueba()

  Dim fila As Long, filaU As Long

  filaU = Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(Rows.Count, 2).End(xlUp).Row

  For fila = 3 To filaU 'Step 2  <<< Step se incluirá (o no) dependiendo de tus respuestas.

    Workbooks("Aplicación.xlsx").Worksheets("Hoja1").Range("Cll_Capital").Value = _

        Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(fila, 2).Value

    Workbooks("Aplicación.xlsx").Worksheets("Hoja1").Range("Cll_Vencimiento").Value = _

        Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(fila - 1, 1).Value

    Workbooks("Aplicación.xlsx").Worksheets("Hoja1").Range("Cll_Fechaliquidación").Value = _

        Workbooks("Libro2.xlsm").Worksheets("Hoja1").Cells(fila, 1).Value

' Aquí va el código que toma los datos calculados y los replica en las celdas de destino.

  Next fila

End Sub



Pregunta lo que no sabes, recuérdalo para cuando te pregunten y ofrece tu ayuda (reconforta).

Mi sitio_web con ejemplos Excel.
Arriba
John_Arnedo Ver desplegable
Habitual
Habitual
Avatar

Unido: 13/Febrero/2009
Localización: Colombia
Estado: Sin conexión
Puntos: 150
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita John_Arnedo Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 23/Mayo/2017 a las 14:20
Sin duda, has interpretado a la perfección lo que quiero. 

De hecho, no defino tan explícitamente las celdas del segundo libro porque en realidad el código lo aplicaría a varios formatos que requieren cálculo de intereses y ese segundo libro realmente en la práctica aun no está listo. 

Voy a probar y les cuento como me va, aunque adelanto que soy un cero a la izquierda en programación. 

Editado: ¿como hago desde excel para no tener abierto (o visible mas bien) el libro done está la plantilla y entonces sí aplicar el código?

Editado: Por favor, solo una pregunta porr hilo, si se ponen varias al final el buscador no encuentra nada y pierde todo su sentido, haciendo que haya que repetir la misma pregunta varias veces.

Un saludo.

Luis


Editado por lbauluz - 23/Mayo/2017 a las 20:40
Es una estupidez morir por tu país, es mejor que el enemigo muera por el suyo.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable