Pasar por alto una instrucción de una macro si el libro no se encuentra abierto

Dentro de un libro tengo una macro que ejecuta ciertas instrucciones que se deben realizar si hay libros abiertos que llamaremos cembrass y putruele. El tema es que muchas veces una emporesa no realiza pedidos por lo tanta si la hoja por ejemplo de putruele no esta abierta que pase por alto esa parte de la macro. Dichas instreucciones son

call putruele

call cembrass

¿Es posible esto?

Respuesta
1

Como mencionas: '...si hay libros abiertos que llamaremos cembrass y putruele...' entonces queda claro que se trata de libros.

Se puede hacer la comprobación antes de llamar a cada subrutina o dentro de cada una. Te presento la 2da opción que evita repetir tantas líneas antes de cada llamada o Call.

En un módulo tendrás que declarar una variable pública (o con Dim si todas las macros estarán en el mismo módulo).

Dim erra As Byte
Sub principal()
'aquí tus instrucciones antes de los llamados
Call patruelle
'....
Call cembrass
'.....
End Sub
Sub putruele()
libro2 = "patruelle.xlsx"
Call verificaLibro(libro2)    'se verifica si está abierto
If erra = 1 Then Exit Sub
'aquí todas las instrucciones para este proceso llamado
'......
End Sub
Sub cembrass()
libro2 = "cembrass.xlsx"
Call verificaLibro(libro2)
If erra = 1 Then Exit Sub
'aquí todas las instrucciones para este proceso llamado
'.....
End Sub
Sub verificaLibro(x)
erra = 0
    On Error Resume Next
    Windows(x).Activate
    If Err.Number > 0 Then
        erra = 1
    End If
End Sub

Cualquier duda me comentás.

1 respuesta más de otro experto

Respuesta
2

Puedes poner la macro completa.

A qué te refieres con

"por lo tanta si la hoja por ejemplo de putruele no esta abierta"

¿"putruele" es una hoja o un libro?

¿Si es una hoja, a qué te refieres con "no está abierta"?

Comenta...

Ahí esta la macro completa

aclaro que cuando dice call tesmacopy y call tdmcopy son macro dentro del libro principal

Cuando me refiere a su esta abierto tesma por ejemplo es otro libro diferente al principal es decir yo al ejecutar ersta macro tengo que tener todos libros abiertos pero si alguno no este abierte que pase por alto esa instrucción por ejemplo call tesmacopy

Sub PUTRUELECOPY()
'
' PUTRUELECOPY Macro
'

'
Windows("Putruele 1.xlsm").Activate
Range("J1:N6").Select
Selection.Copy
Windows("Planilla General.xlsm").Activate
Sheets("Putruele").Select
ActiveWindow.SmallScroll Down:=-21
Range("C3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Putruele 1.xlsm").Activate
ActiveWindow.Close
Windows("Putruele 2.xlsm").Activate
Range("J1:N6").Select
Selection.Copy
Windows("Planilla General.xlsm").Activate
Range("C11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Putruele 2.xlsm").Activate
ActiveWindow.Close
Windows("Putruele 3.xlsm").Activate
Range("J1:N6").Select
Selection.Copy
Windows("Planilla General.xlsm").Activate
Range("C19").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Putruele 3.xlsm").Activate
ActiveWindow.Close
ActiveWindow.SmallScroll Down:=15
Windows("Putruele 4.xlsm").Activate
Range("J1:N6").Select
Selection.Copy
Windows("Planilla General.xlsm").Activate
Range("C27").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Putruele 4.xlsm").Activate
ActiveWindow.Close
Sheets("Agregados y carga de menu").Select
Range("D19").Select
ActiveWorkbook.Save
Call TESMACOPY
Call TDMCOPY
MsgBox "PEDIDOS COPIADOS CORRECTAMENTE"

Revisando tu macro, entiendo que quieres verificar si los libros: "Putruele 1.xlsm", "Putruele 2.xlsm", "Putruele 3.xlsm", "Putruele 4.xlsm", están abiertos, si está abierto copia celdas, si no está abierto pase al siguiente libro.

Prueba lo siguiente, en el código puse comentarios para que veas en dónde tienes que poner tus datos:

Sub PUTRUELECOPY()
'Por Dante Amor
  Dim wb1 As Workbook
  Dim sh1 As Worksheet
  Dim libros As Variant, celdas As Variant, wb As Variant
  Dim i As Long
  '
  Application.ScreenUpdating = False
  'Nombre y hoja principales
  Set wb1 = Workbooks("Planilla General.xlsm")
  Set sh1 = wb1.Sheets("Putruele")
  '
  'Agrega los libros que quieras verificar en la siguiente línea:
  libros = Array("Putruele 1.xlsm", "Putruele 2.xlsm", "Putruele 3.xlsm", "Putruele 4.xlsm")
  'Agrega la celda destino
  celdas = Array("C3", "C11", "C19", "C27")
  '
  For i = 0 To UBound(libros)
    For Each wb In Workbooks
      If LCase(wb.Name) = LCase(libros(i)) Then
        Workbooks(libros(i)).Sheets(1).Range("J1:N6").Copy
        sh1.Range(celdas(i)).PasteSpecial xlPasteValues
        Exit For
      End If
    Next
  Next
  '
  Call TESMACOPY
  Call TDMCOPY
  '
  Application.CutCopyMode = False
  Application.ScreenUpdating = True
  MsgBox "PEDIDOS COPIADOS CORRECTAMENTE"
End Sub

[Comenta cualquier duda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas