Hola.
Como norma general, debes asegurarte de liberar los recursos de las instancias de clases que implementen la interfáz
IDisposable:
Cita de: PETTETE en 28 Julio 2017, 11:47 AM
Dim OpenFolderDialog As New FolderBrowserDialog
Dim OpenFolderDialog2 As New FolderBrowserDialog
No te cuesta nada hacer una llamada a
FolderBrowserDialog.Dispose() cuando ya no necesites usar el objeto.
Y estas variables que declaras para instanciar objetos
COM de
Office:
CitarDim xlapp
Dim xllibro
Dim xlhoja
...Debes liberarlos mediante los miembros de la clase
System.Runtime.InteropServices.Marshal (
Marshal.FinalReleaseComObject() ) para liberar los recursos no administrados.
Además de eso, las variables en VB.NET deben declararse proporcionando un tipo explícito (en C# no es necesario, todas las variables tienen asignación implícita de tipos ). Estás ignorando por completo la sentencia
Option Strict produciendo así un código ininteligible, y en fin, eso que haces es un muy mal hábito de programación.
Deberías escribir arriba en la cabecera de tu clase:
Option Strict On e ir arreglando los fallos que te irán saliendo en ese código.
En general todo el código que has mostrado está estructurado de forma ineficiente (por ejemplo la nomenclatura del método "
leer_pdf_y_crear_excel", y que además éste cumpla dos funciones distintas en una sola), pero lo más grave es que no te responsabilizas en absoluto de los recursos (consumo de memoria RAM de tu aplicación). Debes leer más sobre ello y pulir la administración de recursos sobre todo.
Esos son algunos de mis consejos varios.
Respondiendo a tu pregunta principal:
Cita de: PETTETE en 28 Julio 2017, 11:47 AM ficheroscarpeta = System.IO.Directory.GetFiles(path)
ficheroscarpeta2 = System.IO.Directory.GetFiles(path2)
For Each fichero As String In ficheroscarpeta
listbox1. = fichero
xlhoja.cells(i, 1) = fichero
i += 1
Next
For Each fichero As String In ficheroscarpeta2
xlhoja.cells(i, 1) = fichero
i += 1
Next
Solución:
- System.IO.FileInfo Class | MSDN (https://msdn.microsoft.com/en-us/library/system.io.fileinfo(v=vs.110).aspx)
...O en su defecto:
- System.IO.Path.GetFileName() Function | MSDN (https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx)
Ejemplo:
Dim files As IEnumerable(Of FileInfo) = New DirectoryInfo("C:\Directory\").EnumerateFiles("*", SearchOption.TopDirectoryOnly)
For Each fi As FileInfo In files
Debug.WriteLine(fi.Name)
Next fi
Saludos