Cambiar donde escribe los datos una macro

Tengo esta macro pero necesito que escriba los resultados en otra hoja u otro archivo, agradecería si pueden ayudarme con esto. Gracias.

Option Explicit

Sub Add_Control()
Dim miCelda As Range
Dim FilaLibre As Long
Dim tipoMov As String
Set miCelda = [datos]
FilaLibre = ActiveSheet.Cells(65536, miCelda.Column).End(xlUp).Row + 1

tipoMov = Application.Caller ' bEntrada o bSalida, según el botón pulsado

If tipoMov = "bEntrada" Then
' Buscar primera fila libre y rellenar
FilaLibre = ActiveSheet.Cells(65536, miCelda.Column).End(xlUp).Row + 1
ActiveSheet.Cells(FilaLibre, miCelda.Column).Value = [codemp]
ActiveSheet.Cells(FilaLibre, miCelda.Column).Offset(0, 1).Value = [nomemp]
ActiveSheet.Cells(FilaLibre, miCelda.Column).Offset(0, 2).Value = Now()
Else
' Buscar la última entrada de este empleado que no tenga hora de salida y rellenar
Do While FilaLibre > [datos].Row
FilaLibre = FilaLibre - 1
If ActiveSheet.Cells(FilaLibre, miCelda.Column).Value = [codemp] Then
If ActiveSheet.Cells(FilaLibre, miCelda.Column).Offset(0, 3).Value = "" Then
ActiveSheet.Cells(FilaLibre, miCelda.Column).Offset(0, 3).Value = Now()
Exit Do
End If
End If
Loop
End If

End Sub

1 respuesta

Respuesta
1

En lugar de 'Acivesheet' debes utilizar el nombre de tu otra hoja, y si se trata de otro libro anteponer el nombre del libro.

Por ej: 

FilaLibre= Workbooks(libro2).Sheets("Hoja3"). Cells(.......)

Como son muchas las instrucciones lo mejor es que de finas libro y hojas en una variable:

Set ho= Workbooks(libro2).Sheets("Hoja3")

Y luego en lugar de ActiveSheet utilizas ho

Si algo no se comprendió puedes solicitar aclaraciones, sino valora para darla por cerrada.

Sdos!

La verdad es que recién estoy aprendiendo y no me queda muy claro, te agradecería si me lo explicas como a alguien que no sabe nada. Gracias.

Y a mí no me queda claro dónde quieres pegar los resultados ('... los resultados en otra hoja u otro archivo...')

Entonces imaginaré que el otro archivo se llama libro2 y la hoja es la Hoja1... creo que esos textos podrás encontrarlos fácilmente y ajustarlos a los nombres reales.

Sub Add_Control()
Dim miCelda As Range
Dim FilaLibre As Long
Dim tipoMov As String
Set miCelda = [datos]     'ATENCIÓN
'defino otro libro ya abierto y busco la primer fila libre para el relleno
Set destino= Workbooks(libro2).Sheets("Hoja1")
FilaLibre = destino.Cells(65536, miCelda.Column).End(xlUp).Row + 1
tipoMov = Application.Caller ' bEntrada o bSalida, según el botón pulsado
If tipoMov = "bEntrada" Then
' Buscar primera fila libre (del 2do libro) y rellenar
    'FilaLibre = destino.Cells(65536, miCelda.Column).End(xlUp).Row + 1    'ya está encontrada la fila libre
    destino.Cells(FilaLibre, miCelda.Column).Value = [codemp]
    destino.Cells(FilaLibre, miCelda.Column).Offset(0, 1).Value = [nomemp]
    destino.Cells(FilaLibre, miCelda.Column).Offset(0, 2).Value = Now()
Else
    ' Buscar (en 2do libro) la última entrada de este empleado que no tenga hora de salida y rellenar
    Do While FilaLibre > [datos].Row     'ATENCIÓN
    FilaLibre = FilaLibre - 1
    If destino.Cells(FilaLibre, miCelda.Column).Value = [codemp] Then
        If destino.Cells(FilaLibre, miCelda.Column).Offset(0, 3).Value = "" Then
            destino.Cells(FilaLibre, miCelda.Column).Offset(0, 3).Value = Now()
            Exit Do
        End If
    End If
    Loop
End If
End Sub

Hay una línea que dice:

Set destino= Workbooks(libro2).Sheets("Hoja1")

Si la idea es copiar los datos en otra hoja del mismo libro no hace falta nombrar el libro por lo que la instrucción solo será:

Set destino=Sheets("Hoja1")     'Ajustar nombre de hoja

Pero si vas a copiar datos en otro libro, debes tenerlo abierto y reemplazar el texto libro2 por el nombre completo, por ej:

Set destino = Workbooks("EMPLEADOS.xlsm").Sheets("Hoja1")

Ahora, la fila libre se busca en la hoja destino. Y tus datos están en tu hoja de origen, entonces no tiene sentido que preguntes si la fila destino es > fila de origen porque estás en distintas hojas..

Do While FilaLibre > [datos].Row

Algo similar sucede con la columna de destino... aunque aquì tendría sentido que se trate de la misma columna que en el origen.

Armala y probala. Si luego resulta que tu tema es otro y estás montándote en una macro que no es para este caso y requieres de otra macro lo ideal es que dejes bien en claro dónde deseas pegar los resultados y cómo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas