Foros del Web » Soporte técnico » Ofimática »

Problema con OnTime y BeforeSave en Excel

Estas en el tema de Problema con OnTime y BeforeSave en Excel en el foro de Ofimática en Foros del Web. Hola, tengo un libro de Excel (llamemoslo Origen) con un evento Workbook_BeforeSave dentro de Thisworkbook. Este evento abre otro libro (llamemoslo X), copia ciertas líneas ...
  #1 (permalink)  
Antiguo 26/02/2010, 03:08
Avatar de Biopepe  
Fecha de Ingreso: abril-2003
Ubicación: Bilbao
Mensajes: 63
Antigüedad: 21 años
Puntos: 0
[SOLUCIONADO] Problema con OnTime y BeforeSave en Excel

Hola,

tengo un libro de Excel (llamemoslo Origen) con un evento Workbook_BeforeSave dentro de Thisworkbook. Este evento abre otro libro (llamemoslo X), copia ciertas líneas al libro X, salva libro X y lo cierra. Este evento funciona perfectamente si le doy a guardar desde propio libro Origen.

Tengo un programa en VB6 que habre el libro Origen, y lo guarda (de esta manera se activa el evento Workbook_BeforeSave). El problema es que no ejecuta bien las instrucciones de esa manera, no hace caso a Range().Select ni a Workbook.Open.

Esto mismo me pasa si utilizo el evento OnTime desde el propio libro Origen.

¿Alguna solución milagrosa?

Muchas gracias

Última edición por Biopepe; 02/03/2010 a las 01:26
  #2 (permalink)  
Antiguo 26/02/2010, 10:56
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
Respuesta: Problema con OnTime y BeforeSave en Excel

Hola! Biopepe.
Habría que ver el código del "BeforeSave", pero es probable que los objetos no estén unívocamente identificados.

Me refiero a que mejor que Range().Select es Workbooks().Sheets().Range().Select... o similares.

Saludos, Cacho.
  #3 (permalink)  
Antiguo 01/03/2010, 02:45
Avatar de Biopepe  
Fecha de Ingreso: abril-2003
Ubicación: Bilbao
Mensajes: 63
Antigüedad: 21 años
Puntos: 0
Respuesta: Problema con OnTime y BeforeSave en Excel

Hola mrocf, gracias por responder.

Te pongo un extracto de los códigos:

Esta es la macro que lanza el evento OnTime; funciona bien.

Código:
Sub prueba()

   On Error GoTo prueba_Error
    ThisWorkbook.Unprotect ("password")
    ThisWorkbook.Worksheets("LISTA DE MATERIALES").Visible = -1
    ThisWorkbook.Worksheets("LISTA DE MATERIALES").Activate
    ThisWorkbook.Save
    ThisWorkbook.Close
   On Error GoTo 0
   Exit Sub

prueba_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure prueba of Módulo Módulo1"
End Sub
Este es un fragmento del evento Workbook_BeforeSave

Código:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
          Dim mola As Range
          
10        On Error GoTo rutina_error
20        MsgBox ThisWorkbook.Name
30        nombre_molon = ThisWorkbook.Name
40        Application.ScreenUpdating = True
            'Ruta del archivo completo
50        ruta_completo = "\\Lista_materiales\Lista_Materiales_Completo.xls"
60        mola21 = IsFile(ruta_completo)
            'Preparamos el Workbook actual
70        Workbooks(nombre_molon).Worksheets("L_MATERIALES").Visible = -1
80        Workbooks(nombre_molon).Worksheets("L_MATERIALES").Activate
90        Workbooks(nombre_molon).Worksheets("L_MATERIALES").Range("A12").Select
          'Guardamos la OP actual
100       op = ActiveCell.Value
          'Calculamos cuantas líneas tiene el archivo
110       topo = ultima_linea()
          'Desprotegemos hoja actual
120       Workbooks(nombre_molon).Sheets("L_MATERIALES").Unprotect ("password")
130       Workbooks(nombre_molon).Sheets("L_MATERIALES").Range("A12:E701").Select
          'Aplicamos formato condicional
140       Selection.FormatConditions.Delete
150       Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$Q12=""SI"""
160       Selection.FormatConditions(1).Interior.ColorIndex = xlNone
170       Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$Q12=""NO"""
180       Selection.FormatConditions(2).Interior.ColorIndex = 46
190     MsgBox "MOLA"
200       Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=Y($Q12<>""SI"";$Q12<>""NO"";$A12<>"""";$O12<>""SOLO DISEÑO"")"
210     MsgBox "MOLA2"
220       Selection.FormatConditions(3).Interior.ColorIndex = 48
Las líneas 70,80 y 90 no funcionan si se lanza todo desde el evento OnTime, pero sí si se guarda el libro con botón de la barra de herramientas.

Las líneas 200 y 220 tampoco funcionan.
  #4 (permalink)  
Antiguo 01/03/2010, 13:47
Avatar de mrocf  
Fecha de Ingreso: marzo-2007
Ubicación: Bs.As.
Mensajes: 1.103
Antigüedad: 17 años, 1 mes
Puntos: 88
Respuesta: Problema con OnTime y BeforeSave en Excel

Comienza por reemplazar
Workbooks(nombre_molon).Worksheets("L_MATERIALES") .Visible = -1

por
Workbooks(nombre_molon).Worksheets("L_MATERIALES") .Visible = True

Saludos, Cacho.
  #5 (permalink)  
Antiguo 02/03/2010, 01:24
Avatar de Biopepe  
Fecha de Ingreso: abril-2003
Ubicación: Bilbao
Mensajes: 63
Antigüedad: 21 años
Puntos: 0
Respuesta: Problema con OnTime y BeforeSave en Excel

Hola mrocf,

he conseguido solucionar el problema, pero por otro camino. He metido todo el código que tenía en Workbook_beforesave dentro de la macro que lanza el evento OnTime.

Con Workbooks(nombre_molon).Worksheets("L_MATERIALES") .Visible = -1 me funcionaba bien desde la propia beforesave pero no si la llamaba desde otra macro.

Gracias por tu ayuda.

Etiquetas: beforesave, excel, ontime
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:26.