Ejecutar dos macros a la vez pero si no cumple la primera que ejecute la siguiente o viceversa

Tengo tengo una macro donde copio datos de dos hojas distintas (Bitácora y Ubicaciones) y los pego en una tercera hoja (Impri-Bitácora).

La primera función de la macro es Copiar los datos de una tabla dinámica (Hoja Ubicaciones) y pegarlos en la tercera hoja (Impri-bitácora) y luego copiar datos de la hoja Bitácora y pegar después de la ultima fila con datos en la hoja Impri-bitácora

Ahora yo quiera que al Actualizar la tabla dinámica (Hoja Ubicaciones) y esta al no contar con datos que no copie ni pegue nada en la hoja impri-bitácora pero que si continué con la otra fusione de copiar datos de la hoja bitácora y pegarlos en la hoja Imprimir-bitácora

Estado buscando y veo que es con la función If, pero no se como emplearla en mi macro.

Espero me puedan ayudar, adjunto macro utilizada

'Copiar y pegar datos de TD
      Sheets("UBICACIONES").Select
      Range("B4").Select
      ActiveWorkbook.RefreshAll
      ActiveSheet.PivotTables("UBICACIONES").PivotSelect "AREA[All]", _
      xlDataAndLabel, True
      Range(Selection, Selection.End(xlToRight)).Select
      Selection.Copy
      Sheets("IMPRI-BITÁCORA").Select
      Range("B5").Select
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=False
    Application.CutCopyMode = False
'Copiar y pegar datos sin ubicación
Sheets("IMPRI-BITÁCORA").Select
Dim SKU As String
Dim DESCRIPCIÓN As String
Dim ÁREA As String
Dim ultimaFila As Long
Dim ultimafilaAuxiliar As Long
Dim cont As Long
Dim palabraBusqueda As String
Dim rangoDatos As Range
palabraBusqueda = Sheets("BITÁCORA").Cells(1, 2)
palabraBusqueda = "*" & palabraBusqueda & "*"
ultimaFila = Sheets("BITÁCORA").Range("B" & Rows.Count).End(xlUp).Row
If ultimaFila < 7 Then
   Exit Sub
End If
For cont = 7 To ultimaFila
    If Sheets("BITÁCORA").Cells(cont, 8) Like palabraBusqueda Then
       SKU = Sheets("BITÁCORA").Cells(cont, 2)
       DESCRIPCIÓN = Sheets("BITÁCORA").Cells(cont, 3)
       ÁREA = Sheets("BITÁCORA").Cells(cont, 4)
       ultimafilaAuxiliar = Sheets("IMPRI-BITÁCORA").Range("F" & Rows.Count).End(xlUp).Row
       Sheets("IMPRI-BITÁCORA").Cells(ultimafilaAuxiliar + 1, 2) = ÁREA
       Sheets("IMPRI-BITÁCORA").Cells(ultimafilaAuxiliar + 1, 3) = SKU
       Sheets("IMPRI-BITÁCORA").Cells(ultimafilaAuxiliar + 1, 4) = DESCRIPCIÓN
Respuesta
1

Tu macro tiene esta línea:

Range("B4").Select

En esa línea empiezas a seleccionar los datos de la tabla dinámica, cómo sabes si  la tabla no tiene datos? Es decir, ¿la celda B4 está vacía? ¿O la celda B5 está vacía? ¿O de que manera puedes saber que no hay datos en la tabla?

La celda B4 es el encabezado de la tabla dinámica, la selecciono para poder actualizar y saber si tiene datos y a partir de esta línea:

 ActiveSheet.PivotTables("UBICACIONES").PivotSelect "AREA[All]", _
      xlDataAndLabel, True
      Range(Selection, Selection.End(xlToRight)).Select
      Selection.Copy

Selecciono toda la columna del encabezado ÁREA y luego selecciono a la derecha y la copio.

Pero cuando no encuentra datos en la tabla dinámica actualizada me vota un error; por eso quisiera saber como podría emplear la función IF para poder seguir con la macro a pesar de que la primera (copiar datos de tabla dinámica) no cumpla lo solicitado.

De acuerdo, en la B4 tienes el encabezado. Pero cuando no hay datos, qué tienes en B4 o qué tienes en B5.

Podrías poner una imagen y mostrarme cómo se ve tu tabla cuando no tienes datos.

CON DATOS:

SIN DATOS: Cuando no hay datos siguen los encabezados de la tabla dinámica

Disculpa la demora, no tuve la laptop disponible.

Gracias por la ayuda.

Prueba lo siguiente:

'Copiar y pegar datos de TD
If range("B5").value <> "" Then
      Sheets("UBICACIONES").Select
      Range("B4").Select
      ActiveWorkbook.RefreshAll
      ActiveSheet.PivotTables("UBICACIONES").PivotSelect "AREA[All]", _
      xlDataAndLabel, True
      Range(Selection, Selection.End(xlToRight)).Select
      Selection.Copy
      Sheets("IMPRI-BITÁCORA").Select
      Range("B5").Select
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=False
    Application.CutCopyMode = False
End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas