VBA - Error 9 (Subindice) y otra duda.

Iniciado por edr89, 26 Septiembre 2011, 01:44 AM

0 Miembros y 1 Visitante están viendo este tema.

edr89

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.

edr89

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:

edr89

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

edr89

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.