Error en Microsoft Excel: "suscript out of range". Solucionar problema al nombrar variable

ESTE ES EL CODIGO QUE TENGO, PERO AL MOMENTO DE LLAMAR LA VARIABLE QUE TIENE CONTENIDO EL NOMBRE DEL SIGUIENTE ARCHIVO, ME MARCA UN ERROR
ERROR 9: SUBSCRIPT OUT OF RANGE
Sub Actualiza()
Call ListFiles("D:\RAUL VELARDE Y MENDEZ", "*.xls")
End Sub
Sub ProcesaArchivos(nombre As String)
Dim col, num As Long
Dim FilePath As String
num = 1
FilePath = "D:\RAUL VELARDE Y MENDEZ\"
nombre = num & "DICIEMBRE2009LPG.xls"
coleccion = FilePath & nombre
num = num + 1
Workbooks.Open Filename:=coleccion, UpdateLinks:=0
col = 40
Range("T24:T33").Select
Selection.Copy
Windows("PruebaEstdic2009.xls").Activate
Sheets("DBDIC2009").Select
Cells(12, col).Select
col = col + 1
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, operation:=xlNone, skipblanks _
        :=False, Transpose:=False
Windows(strTemp).Activate      "AQUI ME MARCA EL ERROR"
ActiveWindow.Close
End Sub
Public Function ListFiles(strPath As String, Optional strFileSpec As String, _
Optional bIncludeSubfolders As Boolean, Optional lst As ListBox)
On Error GoTo Err_Handler
'Purpose: List the files in the path.
'Arguments: strPath = the path to search.
' strFileSpec = "*.*" unless you specify differently.
' bIncludeSubfolders: If True, returns results from subdirectories of strPath as well.
' lst: if you pass in a list box, items are added to it. If not, files are listed to immediate window.
' The list box must have its Row Source Type property set to Value List.
'Method: FilDir() adds items to a collection, calling itself recursively for subfolders.
Dim colDirList As New Collection
Dim varItem As Variant
Call FillDir(colDirList, strPath, strFileSpec, bIncludeSubfolders)
'Add the files to a list box if one was passed in. Otherwise list to the Immediate Window.
If lst Is Nothing Then
    For Each varItem In colDirList
    Debug.Print varItem
    Next
Else
    For Each varItem In colDirList
    lst.AddItem varItem
    Next
End If
Exit_Handler:
Exit Function
Err_Handler:
MsgBox "Error " & Err.Number & ": " & Err.Description
Resume Exit_Handler
End Function
Private Function FillDir(colDirList As Collection, ByVal strFolder As String, strFileSpec As String, _
bIncludeSubfolders As Boolean)
'Build up a list of files, and then add add to this list, any additional folders
Dim strTemp As String
Dim colFolders As New Collection
Dim vFolderName As Variant
Dim nombre As String
'Add the files to the folder.
strFolder = TrailingSlash(strFolder)
strTemp = Dir(strFolder & strFileSpec)
Do While strTemp <> vbNullString
    nombre = strTemp
    colDirList.Add strFolder & strTemp
    strTemp = Dir
    Call ProcesaArchivos(nombre)
Loop
If bIncludeSubfolders Then
'Build collection of additional subfolders.
    strTemp = Dir(strFolder, vbDirectory)
Do While strTemp <> vbNullString
If (strTemp <> ".") And (strTemp <> "..") Then
    If (GetAttr(strFolder & strTemp) And vbDirectory) <> 0& Then
    colFolders.Add strTemp
    End If
End If
    strTemp = Dir
Loop
'Call function recursively for each subfolder.
For Each vFolderName In colFolders
    Call FillDir(colDirList, strFolder & TrailingSlash(vFolderName), strFileSpec, True)
    Next vFolderName
End If
End Function
Public Function TrailingSlash(varIn As Variant) As String
If Len(varIn) > 0& Then
    If Right(varIn, 1&) = "\" Then
    TrailingSlash = varIn
Else
    TrailingSlash = varIn & "\"
    End If
End If
End Function

1 Respuesta

Respuesta
Veo que tienes declarada la variable Dim strTemp As String dentro de la funcion por lo que al momento de llamarla en el sub esta va vacia declarala como variable local en el modulo esto es poniendo la declaracion antes del Sub con esto conservaras la variable
Muchas  gracias por tu respuesta, fijate que le hice como me indicaste y ahora si me pasa la variable, pero al momento de activar ese libro que va por medio de la variable me marca el mismo error.
Error 9: Subscript out of range
Quedo en espera de tu respuesta y muchas gracias
Hay dos situaciones una si el nombre que le pasa la variable es el que tiene el archivo al verlo por ejemplo la ventana quedaria como RAUL VELARDE Y MENDEZ.xls si la pasas como D:\RAUL VELARDE Y MENDEZ.xls y no parace con ese nombre en el encabezado te va a marcar el error y otra puedes intenar este codigo
donde recores todos los libros activos hasta que encuentres el que buscas y te sales del FOR
For i = 1 To Windows.Count Step 1
  Windows(i).Activate
   If ActiveWorkbook.Name = strtemp  Then
      Exit For
    End If
Next
Si pasa la variable con el nombre del archivo (2DICIEMBRE2009.xls) pero no manda la ruta en la cual esta ubicado y con el codigo q me pasaste lo que pasa que no todos los archivos los tengo activos para realizar ese for
Gracias
Oks trata de que en la variable strTemp quede sin el .xls solo el nombre "2DICIEMBRE2009"
Con eso ya no te debe marcar el error
Yo ya hice pruebas con tu codigo y ya no me marco el error el codigo que te envie lo que hace es que barre lso libros que tengas abiertos al momento del corre el programa y va activando de uno en uno los compara con el nombre y si son iguales se sale del codigo dejandote el ultimo libro abierto
Gracias oye y como dejo que la variable se quede sin el .xls???
Con left(variable, len(variable)-4)
No inventes me sigue marcando el mismo error.
Error 9: Subscript out of range
Me puedes pasar el código con el cual tú hiciste pruebas y el cual ya funciona y no marca error???
Gracias por tu ayuda, de verdad me urge
Pues es ese que k pusiste pasame el tuyo por favor para ver que esta mal

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas