Problema con Excel que consolida datos de otros libros con VBA
Tengo una macro que copia datos de diferentes libros, y las pega en un archivo línea por línea. Básicamente funciona así:
1. Archivo "Capturador", se corre la macro. Inicia preguntando la ruta de los archivos, que puede ser la carpeta en donde se encuentra el mismo archivo capturador o una diferente seleccionada por el usuario. La dirección se guarda en una celda.
2. El usuario especifica si quiere borrar los datos que ya están allí, o si prefiere continuar listando los datos desde la última fila disponible. En el primer caso, se borra el contenido de la celda A3 hasta la celda V5000 (mis títulos están en A1 y A2).
3. Mediante un ciclo Do While, abre cada archivo <> "Capturador", y copia los datos de la página "Resumen" del rango A2:U2. Regresa al archivo Capturador y lo pega en la siguiente línea a la última utilizada. Además, pega en la columna "V" el nombre del archivo de donde salió la información.
4. Si ya no hay más archivos, termina el ciclo y la macro.
Tengo 2 problemas con esto:
A. Me está copiando en la columna "V", siempre en la fila 2, mi nombre "Capturador". Esto hace que toda la información de dicha columna se corra una fila. Por ejemplo, copia datos de 4 archivos y lo hace bien, pero en la columna V, la fila 1 está bien con su nombre correspondiente, pero la fila 2 dice "Capturador". De la fila 3 en adelante está el nombre que debió de corresponder a la fila 2; en la fila 4 en la que corresponde al 3, etc. Todos mis registros en esa columna se corren 1 debido a esto.
B. No estoy muy familiarizado con los ErrorHandler, y no sé si se pueda lo siguiente: Si un archivo no tiene la hoja "Resumen", no puede abrirse, está protegido, etc. Que pegue en la columna V el nombre del archivo que tiene inconvenientes, y una observación en su fila (Por ejemplo, "archivo con error"). De esa forma, ya se vería manualmente cuál es el problema..
Mi código es el siguiente, por si sirve:
Option Explicit
Sub Copia_rangos_Libros()
On Error Resume Next
'***** CONSOLIDA *****
'Copia determinado rango de "Resumen" de cada archivo que exista en la carpeta'Definición de tipos de variables:
Dim Ruta As String, archivo As String, aviso As String
Dim w As Object
Dim cantidad As Long
Dim nombreprincipal As StringRuta = Range("AA1").Value 'Variable que encuentra la ruta del archivo.
ChDir Ruta 'Cambia el directorio a la ruta
archivo = Dir("*.xls*") 'Variable para archivos que contengan xls (*es comodín, sirve para xls,xlsx,xlsm)
Set w = ThisWorkbook.Sheets("Base") 'Variable w para fijar libro y hoja de trabajo (Libro actual)
nombreprincipal = ThisWorkbook.NameApplication.ScreenUpdating = False 'Desactiva centelleo pantalla.
'w.[A3:v50000].Clear 'Borra el rango dado de hoja1 en libro Base. Reemplazar.show
Do While archivo <> "" 'Inicia bucle p/todos los archivos
If InStr(1, archivo, nombreprincipal) = 0 Then 'Para todos los archivos distintos de nuestro consolidado
Workbooks.Open archivo 'Abre el 1er. Archivo a copiar
cantidad = 1 'Variable p/obtener cantidad de registros a copiar
Sheets("Resumen").Range("a2:u2").Copyw.Range("a" & w.[a65000].End(xlUp).Row + 1).PasteSpecial xlPasteValuesAndNumberFormats 'Encuentra fila vacía en A y Pega datos ***VER NOTA***
w.Range("v" & w.[v65000].End(xlUp).Row + 1) = Workbooks(archivo).Name 'Pega nombre de archivo en 1 celda de v
Application.CutCopyMode = FalseApplication.DisplayAlerts = False 'Desactiva las alertas
Workbooks(archivo).Close 'Cierra el libro copiado
Application.DisplayAlerts = True 'Activa las alertasw.[v65000].End(xlUp).Activate 'Se posiciona en última celda ocupada en V
Selection. Copy Selection. Resize(cantidad) 'Copia y pega nombre de archivo de origen en todas las celdas de V
End If 'Cierre del Ifarchivo = Dir() 'Selecciona el siguiente archivo
Loop 'Repite ciclo hasta terminar con todos los archivos que existan en la carpeta
Application.ScreenUpdating = True 'Activa centelleo pantalla
End Sub