Buenas tardes! Como están? Les comento, tengo una planilla que utilizo para emitir recibos de pago de las propiedades de las que administro el alquiler en mi inmobiliaria. Actualmente la planilla funciona bien, pero cuando tengo que imprimir los recibos, tengo que ir haciéndolos de a uno y me resultaría más practico escribir una lista de las propiedades de las que ya estoy en condiciones de realizar los recibos y que la macro se vaya repitiendo hasta que haya emitido todos los recibos (ya que la macro es bastante lenta y tengo que esperar unos 10 segundos entre recibo y recibo y son como 120 los que tengo que hacer) Actualmente el recibo se completa cambiando el valor de una celda (que es el que identifica a cada inmueble), por lo que entiendo que lo unico que tendría que hacer el loop, es imprimir el primer recibo, copiar de una lista el número de identificacion de la siguiente propiedad de la lista, copiarlo en la celda que completa el recibo, volver a ejecutar la macro para generar el siguiente recibo y así sucesivamente hasta finalizar toda la lista. Eventualmente estaría bueno que aparezca un aviso cuando ya haya finalizado de emitir todos los recibos. Adjunto el archivo en donde dejé indicado donde pondría la lista de codigos de propiedad a emitir, el boton que ejecuta las macros y cual es la celda que la macro iría modificando para completar los recibos con los datos de cada uno de los inmuebles a imprimir La hojas se desbloquean con la clave 4324 o con el boton rojo que hay en las mismas (cada vez que se ejecuta la macro se vuelve a bloquear) Desde ya les agradezco la ayuda! Anexo: La macro individual actual es la siguiente (en la planilla se ejecuta con un boton amarillo que está en la hoja consultas). Sub Imagen13_Haga_clic_en() Dim Izq As Single, Arr As Single, Ancho As Single, Alto As Single Application.DisplayAlerts = False Application.ScreenUpdating = False ActiveSheet.Unprotect "4324" With Range("H7:R34") Izq = .Left: Arr = .Top: Ancho = .Width: Alto = .Height: .CopyPicture End With With ActiveSheet.ChartObjects.Add(Izq, Arr, Ancho, Alto) .Activate .Chart.Paste .Chart.Export "C:\Users\Usuario\Google Drive\LOCACIONES\REC. PROPIETARIOS\" & Format(Range("q20"), "mmmYY") & " - " & Range("Q9") & " - " & Range("P17") & " - " & Range("K19") & ".JPG" .Delete End With 'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ (desactivé esto para que no imprima en papel) 'IgnorePrintAreas:=False Range("AH6").Select Selection.Copy Range("AH9").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Range("Y7:AI33").Select Selection.Copy Range("H7").Select ActiveSheet.Paste Range("a4").Select ActiveSheet.Protect "4324" ActiveWorkbook.Save Dim Email As CDO.Message Set Email = New CDO.Message correo_origen = "nqn.negocios@gmail.com" Clave_correo_origen = "wkfhaapcnjljbwju" correo_destino = Range("ak27").Value Asunto = Range("ak28") Mensaje = Range("ak29") 'correo_copia = "envioacorreocopia@gmail.com" 'correo_copia_oculta = "enviocopiaoculta@gmail.com" Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com" Email.Configuration.Fields(cdoSendUsingMethod) = 2 With Email.Configuration.Fields .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465) .Item("http://schemas.microsoft.com/cdo/" & "configuration/smtpauthenticate") = Abs(1) .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30 .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = correo_origen .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = Clave_correo_origen .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True End With With Email .To = correo_destino .From = correo_origen .Subject = Asunto .TextBody = Mensaje .Configuration.Fields.Update If (Trim(correo_copia) = "") Then .CC = correo_copia End If .AddAttachment (Range("ak30").Value) On Error Resume Next .Send End With End Sub Sub powerbuttonINQ() Dim Izq As Single, Arr As Single, Ancho As Single, Alto As Single Application.DisplayAlerts = False Application.ScreenUpdating = False ActiveSheet.Unprotect "4324" With Range("H7:R33") Izq = .Left: Arr = .Top: Ancho = .Width: Alto = .Height: .CopyPicture End With With ActiveSheet.ChartObjects.Add(Izq, Arr, Ancho, Alto) .Activate .Chart.Paste .Chart.Export "C:\Users\Usuario\Google Drive\LOCACIONES\REC. INQUILINOS\" & Format(Range("q20"), "mmmYY") & " - " & Range("Q9") & " - " & Range("P17") & " - " & Range("J17") & ".JPG" .Delete End With 'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _ 'IgnorePrintAreas:=False Range("AH6").Select Selection.Copy Range("AH9").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Range("Y7:AI33").Select Selection.Copy Range("H7").Select ActiveSheet.Paste Range("a4").Select ActiveSheet.Protect "4324" ActiveWorkbook.Save Dim Email As CDO.Message Set Email = New CDO.Message correo_origen = "nqn.negocios@gmail.com" Clave_correo_origen = "wkfhaapcnjljbwju" correo_destino = Range("ak27").Value Asunto = Range("ak28") Mensaje = Range("ak29") 'correo_copia = "envioacorreocopia@gmail.com" 'correo_copia_oculta = "enviocopiaoculta@gmail.com" Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com" Email.Configuration.Fields(cdoSendUsingMethod) = 2 With Email.Configuration.Fields .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465) .Item("http://schemas.microsoft.com/cdo/" & "configuration/smtpauthenticate") = Abs(1) .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30 .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = correo_origen .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = Clave_correo_origen .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True End With With Email .To = correo_destino .From = correo_origen .Subject = Asunto .TextBody = Mensaje .Configuration.Fields.Update If (Trim(correo_copia) = "") Then .CC = correo_copia End If .AddAttachment (Range("ak30").Value) On Error Resume Next .Send End With End Sub ALQUILERES L - para POL.xlsm
Por
Corvette , · publicado el jueves a las 18:47 4 días
Buen Día,
Necesito una ayudita por favor, lo que sucede es que eh estado buscando una macro que me ayude a copiar información de un libro a otro, yo se que hay miles de códigos y formas, la cuestión es que necesito que me copie diferentes columnas y ademas de eso como el proceso se repite cada vez que se corre la macro necesito que me copie solo la información nueva de las columnas o las que estén cambiadas, mi archivo tiene muchas columnas pero solo debo copiar unas cuantas, en todos los archivos hay exactamente el mismo numero de columnas están organizados igual y se llaman igual, y solo hay un archivo en donde se van a copiar los datos los otros son la fuente simplemente donde se ingresa información nueva, eh buscado y tengo esto hasta el momento pero no me funciona aun
(yo soy principiante en esto y eh encontrado muchas cosas y las eh ido juntando lógicamente según mi criterio pero en realidad sigo sin hacer que me funcione), les agradecería mucho si me pueden ayudar.
Sub AACargarArchivos()
'Mostrar Interfase
DoEvents
UserForm1.Show
'Iniciar variable Archivos
Archivos = "** "
'Bloquear visualización de pantalla
Application.ScreenUpdating = False
'Iniciar las variables de arranque con el fin de recorrer todos los archivos de la carpeta
carpeta = "D:\Users\samira.triana\Desktop\PACC-EJEMPLO"
Cap = Right(carpeta, 1)
If Cap <> "\" Then
carpeta = carpeta & "\"
End If
Arch = Dir(carpeta)
'Seleccionar el archivo principal "PACC-Administrador" y la hoja "1. Formato PACC"
Windows("PACC-Administrador.xlsm").Activate
Sheets("1. Formato PACC").Select
'Quitar filtros en la hoja
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
'Ubicar la última celda llena de la base de datos
fil = Cells(1000000, 2).End(xlUp).Row + 1
'Averiguar el nombre del usuario del equipo actual
usuario = Environ("USERNAME")
'Direccionar a la carpeta
ChDir "D:\Users\samira.triana\Desktop\PACC-EJEMPLO"
'Verificar registros no cargados
Do While Arch <> ""
'Nuevo archivo a procesar
Arch = Dir
Archivos = Archivos & " * " & Arch
'Abrir el archivo que corresponda, según su orden dentro de la carpeta
'Ubicar la última celda llena de la base de datos
fil = Cells(1000000, 2).End(xlUp).Row + 1
On Error GoTo line2
Workbooks.Open Filename:=carpeta & Arch
'Presentar estado de avance
DoEvents
UserForm1.Show
DoEvents
UserForm1.Label1 = "Cargando el archivo: " & Arch
DoEvents
UserForm1.Label3 = Archivos
'Verificar último registro cargado para cargar los nuevos
fil1 = Cells(1000000, 61).End(xlUp).Row + 1
If fil1 = 6 Then
fil1 = fil1
Else
fil1 = fil1 - 1
End If
fil2 = Cells(1000000, 2).End(xlUp).Row
If fil1 >= 6 And fil2 > 5 Then
If fil1 = fil2 Then
If fil1 = 6 Then
GoTo line4
Else
GoTo line1
End If
End If
'Ubicar la última celda llena de la base de datos
line4:
'Seleccionar registros no cargados y pegar en el archivo principal
Range(Cells(fil1, 2), Cells(fil2, 33)).Copy
Windows("PACC-Administrador.xlsm").Activate
fil = Cells(1000000, 2).End(xlUp).Row + 1
Cells(fil, 2).Select
ActiveSheet.Paste
Windows("" & Arch & "").Activate
Range(Cells(fil1, 36), Cells(fil2, 36)).Copy
Windows("PACC-Administrador.xlsm").Activate
Cells(fil, 36).Select
ActiveSheet.Paste
Windows("" & Arch & "").Activate
Range(Cells(fil1, 46), Cells(fil2, 49)).Copy
Windows("PACC-Administrador.xlsm").Activate
Cells(fil, 46).Select
ActiveSheet.Paste
Windows("" & Arch & "").Activate
Range(Cells(fil1, 64), Cells(fil2, 67)).Copy
Windows("PACC-Administrador.xlsm").Activate
Cells(fil, 64).Select
ActiveSheet.Paste
Windows("" & Arch & "").Activate
'Registrar fecha y hora de actualización de archivos
Range(Cells(fil1, 67), Cells(fil2, 67)) = "Descargado el " & Now()
Range(Cells(fil1, 67), Cells(fil2, 67)).Copy
Windows("PACC-Administrador.xlsm").Activate
Cells(fil, 68).Select
ActiveSheet.Paste
Columns(ActiveCell.Column).EntireColumn.AutoFit
Windows("" & Arch & "").Activate
Columns(ActiveCell.Column).EntireColumn.AutoFit
'Salvar el archivo cargado y cerrarlo
ActiveWorkbook.Save
ActiveWorkbook.Close
GoTo line3
End If
'Salvar el archivo cargado y cerrarlo
line1:
ActiveWorkbook.Save
ActiveWorkbook.Close
line3:
Loop
line2:
Unload UserForm1
End Sub