Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: edr89 en 26 Septiembre 2011, 01:44 am



Título: VBA - Error 9 (Subindice) y otra duda.
Publicado por: edr89 en 26 Septiembre 2011, 01:44 am
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:
Código:
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:
Código:
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.


Título: Re: VBA - Error 9 (Subindice) y otra duda.
Publicado por: edr89 en 24 Noviembre 2011, 09:01 am
Respecto a la extración de información me resultó más útil este código:
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".
Código:
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Queda pendiente el error de subindice :huh:


Título: Re: VBA - Error 9 (Subindice) y otra duda.
Publicado por: edr89 en 1 Diciembre 2011, 08:22 am
Para evitar error 9 hice un proceso mas completo, primero abro el archivo y despues ejecuto la extracción

Para abrir archivo:
Código:
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


Título: Re: VBA - Error 9 (Subindice) y otra duda.
Publicado por: edr89 en 11 Diciembre 2011, 23:50 pm
Para poder extraer la información de libros con diferentes nombres, primero lo abro y despues agrego estas lineas:

Código:
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.