Ejecutar código de macro dependiendo del valor de una celda

Para Dante Amor

Hola Dante Amor buen día, espero se encuentre muy bien en todos los apectos.

Nuevamente por aquí buscando su valiosa ayuda con la siguiente situación:

Tengo un archivo en el que se liquida unas nominas, el archivo tiene dos hojas, Hoja1 con nombre NOMINA_ADMON y Hoja8 con nombre Desprendible, en la hoja desprendible hay un formato que esta contenido en el rango B2:F31, en este se carga información de la hoja NOMINA_ADMON, esto lo hago mediante una macro, la cual además de alimentar la información del formato, genera un pdf con el desprendible de cada empleado, todo esto me funciona perfectamente, el inconveniente que tengo es que en la hoja NOMINA_ADMON, se liquidan dos nominas (primera quincena y segunda quincena), la primera quincen esta en el rango A2:U40, y la segunda quincena en el rango A45:U85, para alimentar la información del formato he utilizado fórmulas que dependen del valor que tenga la celda E1 de la Hoja Desprendible, para lo cual he colocado 1 para la primera quincena y 2 para la segunda quincena, pero en la macro que genera los pdf no se como hacer para que cuando E1 sea igual a 2 me lea la información correspondiente al rango de la segunda quincena, ya que actualmente siempre me lee el rango correspondiente a la primera quincena, en la hoja desprendible hay dos botones, uno que imprime en pdf y otro que imprime en físico, el siguiente es el código que estoy utilizando

Public ok As Byte        'permite habilitar la impresión
Public marca As Byte     'indica tipo de impresión
Private Sub IMPRIMIRPDF()
'marca que se llamó Impresión_PDF
marca = 1
Call macroImpresion
End Sub
Private Sub IMPRIMIRFISICO()
'marca el tipo de impresión
marca = 2
Call macroImpresion
End Sub
Sub macroImpresion()
Dim r As Long
Dim n As Long
'Imprime el desprendible según la marca
'habilita la impresión
ok = 1
If marca = 1 Then
n = Application.WorksheetFunction.CountA(Sheets("NOMINA_ADMON").Range("A5:A22"))
If n = 0 Then Exit Sub
For r = 5 To (n + 1)
Sheets("Desprendible").Range("B12") = Sheets("NOMINA_ADMON").Range("A" & r)
Calculate
'Sheets("Desprendible").Range("B2:F31").PrintOut
'Sheets("Cuenta").Range("B3:O48").PrintOut
'DoEvents
'Next
 Worksheets("Desprendible").Range("B2:F31").Select
'controla posible error de carpeta inexistente o nombre inválido para archivo pdf
    On Error Resume Next
    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Ordenes\" & Range("B1").Value
DoEvents
Next
ElseIf marca = 2 Then
Sheets("Desprendible").Range("B12") = Sheets("NOMINA_ADMON").Range("A" & r)
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
    IgnorePrintAreas:=False
End If
DoEvents
'Next
ok = 0
End Sub
Espero haber sido claro con la exposición de mi necesidad, agradezco de antemano la ayuda que me pueda brindar.

PD cualquier observación y/o modifación en la macro para mejorarla, bienvenida sea, no soy programador y lo que hago lo hago sacando códigos de otras aplicaciones y adaptándolos a mi necesidad, por lo tanto es posible que no los este utilizando de la mejor manera.

1 Respuesta

Respuesta
1

Prueba lo siguiente:

Public ok As Byte        'permite habilitar la impresión
Public marca As Byte     'indica tipo de impresión
Sub macroImpresion()
  Dim r As Long, n As Long, sRng As String
  'Imprime el desprendible según la marca
  'habilita la impresión
  ok = 1
  If marca = 1 Then
    n = Application.WorksheetFunction.CountA(Sheets("NOMINA_ADMON").Range("A5:A22"))
    If n = 0 Then Exit Sub
    '
    For r = 5 To (n + 1)
      Sheets("Desprendible").Range("B12") = Sheets("NOMINA_ADMON").Range("A" & r)
      Calculate
      If Sheets("Desprendible").Range("E1").Value = 1 Then
        sRng = "A2:U40"
      Else
        sRng = " A45:U85"
      End If
      Worksheets("Desprendible").Range(sRng).Select
      'controla posible error de carpeta inexistente o nombre inválido para archivo pdf
      On Error Resume Next
      Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Ordenes\" & Range("B1").Value
      DoEvents
    Next r
  ElseIf marca = 2 Then
    Sheets("Desprendible").Range("B12") = Sheets("NOMINA_ADMON").Range("A" & r)
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
    IgnorePrintAreas:=False
  End If
  DoEvents
  'Next
  ok = 0
End Sub

¡Gracias! Dante Amor, la solución que me envío es excelente como siempre...

Por ahí vi un código suyo para enviar email, voy a intentar introducirlo en esta macro para que después de generado el pdf, sea enviado al empleado por email, si no lo logro lo estaré molestando una vez mas.

Muchísimas gracias por su repuesta, excelente y super rápida.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas