Tengo una macro en un "pc1" que en un momento guarda un libro que a su vez lo consulta un segundo pc (pc2) de la red, funciona bien pero existen ocasiones en que la macro guarda el el libro en el pc 1 justo en el momento que el pc2 lo esta consultando y se produce un error, como puedo hacer para que cuando esto suceda, intente nuevamente guardar el libro, tengo en la macro que se salte el error y que salte al fin y automáticamente me abre un nuevo libro con un nombre aleatorio.
1 respuesta
Respuesta de Abraham Valencia
1
1
Abraham Valencia, Experto en ofimatica, desarrollador de aplicaciones en VB y VB
¿Y en dicho archivo esta activada la opción "compartir libro"? ¿Y cómo es tu macro? Abraham
En realidad no esta compartido, funciona de la siguiente manera... el pc1 tiene un libro llamado ventas que es el principal y contiene las macros, en un momento una macro copia información del libro ventas en otro libro llamado cocina y el archivo cocina esta en una carpeta compartida en red. El pc2 tiene el libro cocina2, que tiene una macro que automáticamente cada 20 segundos abre el libro cocina, copia la información y lo cierra. La función del pc2 es mostrar pedidos que faltan por entregar en un restaurant (funciona autoimaticamente todo es manejado desde el pc1, en el se van eliminando los pedidos y agregándolos). Lo hice de esa forma por que compartiendo el libro me generaba errores y no pude hacer que actualice los cambios automáticamente en el intervalo de tiempo que necesito, ademas que molesta que resalte los cambios. Todo funciona bien pero hay ocasiones en que cuando el pc1 esta guardando el libro cocina coincide con el pc2 que lo esta abriendo y no se puede guardar (que es necesario para que cuando lo abra el pc2 estén actulizados los cambios, el pc2 no guarda ni cambia el archivo cocina solo copia la información al artchivo cocina2 que esta en el pc2). Entonces se genera un error, en la macro agregue el comando: Sub Borra2() ' ' Borra2 Macro ' ' Acceso directo: CTRL+a ' On Error GoTo Noencontro Rem Application.DisplayAlerts = False Windows("Ventas.xlsm").Activate Sheets("Pedidos Pendientes").Select Rows("2:2").Select Selection.Cut Sheets("Pedidos Entregados").Select Rows("2:2").Select Selection.Insert Shift:=xlDown Range("E1").Select Selection.Copy Range("J2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Pedidos Pendientes").Select Rows("2:2").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp Sheets("Pedidos Pendientes").Select Range("A1:J27").Select Selection.Copy Windows("Cocina.xlsx").Activate Cells.Select Range("B1").Activate ActiveSheet.Paste ActiveWorkbook.Save ---->aqui se genera el error Windows("Ventas.xlsm").Activate intente lo siguiente pero nome funciono Noencontro: Rem ActiveWorkbook.SaveAs ------->no se como sigue el comando Rem Workbooks("cocina2.xls").Close Rem Workbooks.Open "C:\dammy's\cocina.xlsx" Rem Workbooks("Ventas.xls").Worksheets("Pedidos Pendientes").Activate Rem Range("A1:J27").Select Rem Selection.Copy Rem Windows("Cocina.xlsx").Activate Rem Cells.Select Rem Range("B1").Activate Rem ActiveSheet.Paste Rem ActiveWorkbook.Save Rem Windows("Ventas.xlsm").Activate Rem Application.DisplayAlerts = True End Sub La idea es que cuando se produzca el error intente nuevamente guardar el archivo. Intente que lo guarde con otro nombre la parte que esta con rem pero no funciono. Al encontrar el error excel automáticamente genera un archivo "6F4C8000.xlsx" por ej. en reemplazo del libro cocina. Intente ser lop más claro posible espero que me puedas ayudar. Muchas gracias
En realidad Excel no es la herramienta ideal para hacer lo que estas haciendo, y si tienes el office yo te recomendaría Access, o de insistir con Excel, usar ADO y/o DAO, claro que probablemente te complique la cosa, así que, como ya lo tienes hecho, pues, necesito saber lo siguientes: - ¿Me parece o tienes permanentemente abierto el libro "cocina"? Te pregunto ya que en la macro que envías, usas Activate, como que el libro esta abierto y no veo alguna instrucción que lo haya abierto - ¿Necesariamente tienes que actualizar cada 20 segundos? Abraham
Si, el libro cocina esta permanentemente abierto en el pc1, la macro que se actualiza automáticamente esta en el libro cocina2 del pc2... eso funciona bien y es la que abre el libro cocina del pc1 (como solo lectura) para copiar la información y luego lo cierra. Es en ese momento guando hay conflictos ya que si lo esta abriendo y justo en ese momento el pc1 lo intenta guardar es que me da el error. Son varias las macros que efectúan la misma oeratoria (como 8) el error siempre es en el mismo lugar, cuando lo intenta guardar mientras esta abierto en el pc2. Respecto al intervalo de tiempo tiene que ser corto ya que constantemente están entrando y saliendo pedidos. El error no es siempre, solo algunas veces. Es más frecuente cuando la carga de trabajo es mayor. En relación a utilizar access, lo intente pero en realidad no tengo idea como funciona. La macro del libro cocina2 del pc2 es la siguiente: Sub Macro1() ' ' Macro1 Macro ' ' Application.ScreenUpdating = False Application.DisplayAlerts = False Workbooks.Open Filename:="\\caja\dammy's\cocina.xlsx", Notify:=False Range("A1:J20").Select Selection.Copy ActiveWorkbook.Close False Windows("Cocina2.xlsm").Activate Range("A1").Select ActiveSheet.Paste Range("A1").Select Application.DisplayAlerts = True Application.ScreenUpdating = True Application.OnTime Now + TimeValue("00:00:30"), "Macro1" End Sub Con esta no tengo problemas. Gracias. Si puedes guiarme o donde conseguir información para hacer esto con access también estaría agradecido, pero por el momento necesito solucionar el problema para así trabajar sin problemas y de ahí pasar a access. Gracias.
Pues, lo ideal es que el libro "cocina" este siempre cerrado, y que cada macro que opere con el pues, lo abra, realize la copia o lo que tenga que hacer, lo guarde y lo cierre. Si es así, a pesar del intervalo corto de tiempo, es muy difícil que ocurran conflictos Abraham