Búsqueda de cadenas VBA dentro de archivos en el directorio que no funciona en Excel 2007


0

Estoy tratando de buscar una cadena dentro de una carpeta que contiene varios archivos. Una vez que se encuentra la cadena, debe seleccionar y copiar un valor en una celda adyacente 5 columnas a la derecha (Offset(0,5)), luego pégalo en mi cuaderno. Si se encuentran más cadenas, deben pegarse como un final de lista (xlDown).

Esa es la idea, pero no puedo hacer que funcione, el mensaje de error: " Subíndice fuera de rango ".

Sub searchBOM()

Dim BOM As String 'the text i'm gonna look for
Dim path As String 'the folder containing several files
Dim filename As String 'one of the files to search in

path = "D:\folder\"
filename = Dir(path)
BOM = InputBox("please enter bom code") 'where the user enters the string

If BOM = "" Then
        MsgBox ("please input valid BOM code") 'not important really, just a small validation
   Else
        Do While filename <> "" 'so the DIR function scans all files
              **'here I get the error message SUBSCRIPT OUT OF RANGE:**
              Workbooks.Open(path & filename).Sheets("Sheet1").UsedRange.Find(BOM).Offset(0, 5).Copy

              'the macro never gets to this line: 
              ThisWorkbook.Sheets("Sheet1").Range("c" & Range("c5").End(xlDown).Row).Paste
              Workbooks.Open(path & filename).Close
              filename = Dir
        Loop

End If

End Sub

Respuestas:


0

Aquí está mi enfoque de acercarme al problema real:

Divida la línea muy larga que causa el problema en partes más pequeñas, por ejemplo.

  Set wrkbk = Workbooks.Open(path & filename)
  Set sht = wrkbk.Sheets("Sheet1")
  Set rang = sht.UsedRange
  Set fnd = rang.Find(BOM)
  If Not (fnd Is Nothing) Then
     cpy = fnd.Offset(0, 5).Copy
  End If

Entonces encontrarás que el problema está en la línea. Set sht = wrkbk.Sheets("Sheet1").

Esto significa: hay un libro de trabajo que no tiene una hoja llamada "Hoja1". Tal vez la hoja fue renombrada por el usuario.

Cuando Excel se detiene en el error, haga clic derecho en filename y elige Add watch para ver qué archivo se ve afectado por el nombre de hoja incorrecto.


Tenías toda la razón! Uno de los nombres de las hojas estaba en español, para evitar este problema potencial, usé un "para cada semana en las hojas de trabajo" para buscar en todas las hojas independientemente de su nombre. ¿Sabe cómo podría programar la macro para buscar solo archivos de Excel en esa carpeta? gracias.
Ruben

Creo que puedes usar path = "D:\folder\*.xslx"
Thomas Weller

No funcionó, concatena como una cadena la ruta y el nombre del primer archivo. Eso me da un mensaje: "D: \ folder * .xslxfile1.xlsl" no se pudo encontrar ... Funciona bien cuando se incluye "On error resume next" pero quería ser más selectivo con los archivos para abrir.
Ruben
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.