Pregunta

En Excel 2010 VBA, estoy usando la propiedad FileExists del archivoSystemObject para verificar si existe un archivo. En mi computadora funciona bien. Pero en otra computadora Excel 2010, informa que el archivo no está allí, cuando de hecho, vemos en Windows Explorer que el archivo está ahí. En ambos casos, el archivo que se está marcando está en el disco duro local.

Estoy revisando el archivo justo después de usar Shell para descomprimir el archivo. Utilizo a los dichos después del descompuesto. El archivo se está extraiendo en la misma carpeta en la que se encuentra el archivo zip.

Aquí está el código:

Dim oShell As Object, oZippedFile As Object, oUnzipTargetFolder As Object
Dim FSO As Object, oFile As Object, oFolder As Object
Dim strZipfileFullpath As Variant, strTargetFolderpath As Variant, strTargetFullpath As Variant 'NOT AS STRINGS!! (Shell error if strings)
Dim bFileCheckFsoFileExist As Boolean

Set oShell = CreateObject("shell.application")
Set FSO = CreateObject("scripting.filesystemobject")

strZipfileFullpath = Application.GetOpenFilename(filefilter:="Zip Files (*.zip), *.zip", MultiSelect:=False)

Set oFile = FSO.GetFile(strZipfileFullpath)
Set oFolder = oFile.ParentFolder
strTargetFolderpath = oFolder.Path & Application.PathSeparator
strTargetFullpath = strTargetFolderpath & oShell.Namespace(strZipfileFullpath).Items.Item(0).Name

oShell.Namespace(strTargetFolderpath).CopyHere oShell.Namespace(strZipfileFullpath).Items.Item(0) 'this zip has only one file.
DoEvents

bFileCheckFsoFileExist = FSO.FileExists(strTargetFullpath)

Cualquier ideas ¿Por qué esto funciona bien en una computadora, pero en otra computadora informa que el archivo no está allí, aunque vemos que es claramente?

Actualizar:

Pensé que agregaría esta nota en caso de que pueda ser útil para otros que se encuentran en el mismo obstáculo.

El problema subyacente básico fue que cuando se usa Shell para extraer un archivo con cremallera, la propiedad Nombre del objeto de archivo comprimido no incluye la extensión si el Explorador de Windows está ocultando extensiones y el archivo tiene una extensión registrada. Por ejemplo:

Dim strGofnZipfileFullpath As Variant
Dim oShell As Object, oShellZipfile As Object, oShellZippedFileInZipfile As Object
Dim strShellZippedFileInZipfileFilename As Variant 'NOT AS STRINGS!! (Shell error if strings)

strGofnZipfileFullpath = Application.GetOpenFilename(filefilter:="Zip Files (*.zip), *.zip", MultiSelect:=False)

Set oShell = CreateObject("shell.application")
Set oShellZipfile = oShell.Namespace(strGofnZipfileFullpath)
Set oShellZippedFileInZipfile = oShellZipfile.Items.Item(0) 'assumes only 1 file in zip. 
        strShellZippedFileInZipfileFilename = oShellZippedFileInZipfile.Name

Si el Explorador de Windows está configurado para ocultar extensiones y el archivo con cremallera tiene una extensión registrada, StrshellzippileInzipFileFileName no incluye la extensión.

Sin embargo, el objeto de archivo comprimido (OshellzippileInziPFile) también tiene una propiedad de ruta que incluye la extensión. Para que pueda obtener el nombre de archivo, incluida la extensión como esta:

strShellZippedFileInZipfileFilename = Right(oShellZippedFileInZipfile.Path, InStr(StrReverse(oShellZippedFileInZipfile.Path), Application.PathSeparator) - 1)

¿Fue útil?

Solución

Una cosa que debe tener en cuenta es las opciones de la carpeta dentro del Explorador de Windows.Esto puede no ayudarlo en este caso, pero he tenido una serie de interacciones de la FSO que tienen un gran problema con la forma en que se muestran los archivos en el Explorador de Windows.Algo tan simple como su sistema está mostrando la extensión del archivo, y la otra no es, a veces puede ser el culpable en la búsqueda de archivos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top