Hola,
estoy ejecutando una macro de excel que extrae información de un libro y lo copia a otro, el archivo con datos se llama protocolo y todo se copia al informe de protocolo.
Tengo 2 protocolos, ejecuto la macro para el primero, ya que extrae la información cierro el primer protocolo y abro el segundo, al ejecutar la macro me da el Error 9 Subindice fuera de intervalo. Siempre tengo que cerrar y abrir ambos documentos, protocolo e informe y esto es lo que quiero evitar ya que a veces tengo 6 o 7 protocolos y pierdo algo de tiempo cerrando y abriendo todo de nuevo.
La información la copio de un libro a otro haciendo referencia entre libros con:
Windows().Activate
Range().Select
Selection.Copy
Windows().Activate
Range().Select
ActiveSheet.Paste
Hay datos que pueden no tienen una celda fija, lo unico que se me ocurrio fue activar una celda del informe y hacer un vlookup:
Windows("Informe de Protocolo.xlsm").Activate
Range("R47").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(""Nota"",'[protocolo.xls]Registro Ingreso'!R60:R85,2,FALSE)"
¿Hay alguna forma mas eficiente de extraer la información?
¿Cómo puedo evitar el error 9?
Saludos.
Respecto a la extración de información me resultó más útil este código:
Windows("protocolo.xls").Activate
Cells.Find(What:="dx", After:=ActiveCell, LookIn:= _
xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
xlNext, MatchCase:=False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Select
Selection.Copy
Windows("Informe.xlsm").Activate
Range("C47").Select
ActiveSheet.Paste
Si la celda hace referencia a una formula entonces pego por valores y no con "Active Sheet.Paste".
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Queda pendiente el error de subindice :huh:
Para evitar error 9 hice un proceso mas completo, primero abro el archivo y despues ejecuto la extracción
Para abrir archivo:
Dim ExtArchivo As String, Titulo As String
Dim FilterIndex As Integer
Dim Protocolo As Variant
' File filters
ExtArchivo = "All Files (*.*),*.*"
FilterIndex = 3
Titulo = "Por favor seleccione un protocolo:"
ChDrive ("C")
ChDir ("C:")
With Application
Protocolo = .GetOpenFilename(ExtArchivo, FilterIndex, Titulo)
ChDrive (Left(.DefaultFilePath, 1))
ChDir (.DefaultFilePath)
End With
' Exit on Cancel
If Protocolo = False Then
Exit Sub
End If
Workbooks.Open Protocolo
Application.ScreenUpdating = False
Para poder extraer la información de libros con diferentes nombres, primero lo abro y despues agrego estas lineas:
Dim LibroaCopiar As String
LibroaCopiar = ActiveWorkbook.Name
Así ya no tengo que renombrar el archivo a protocolo.xls, el código identifica al archivo abierto como LibroaCopiar, sin importar el nombre o caracteres que tenga.