Question

Dans Excel 2010 VBA, j'utilise la propriété FileExists de la fichiersSystemObject pour vérifier si un fichier existe. Sur mon ordinateur ça marche bien. Mais sur un autre ordinateur Excel 2010, il indique que le fichier n'est pas là en fait, nous voyons dans Windows Explorer que le fichier est là. Dans les deux cas, le fichier en cours de vérification est sur le disque dur local.

Je vérifie le fichier juste après avoir utilisé Shell pour décompresser le fichier. J'utilise des doigts après le décompression. Le fichier est extrait dans le même dossier que le fichier ZIP est in.

Voici le code:

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)

Des idées Pourquoi cela fonctionne bien sur un ordinateur, mais sur un autre ordinateur rapporte que le fichier n'est pas là même si nous voyons qu'il est clairement?

mise à jour:

Je pensais ajouter cette note au cas où il peut être utile pour les autres rencontres dans le même accroc.

Le problème sous-jacent de base était que, lors de l'utilisation de Shell pour extraire un fichier zippé, la propriété Nom de l'objet de fichier zippé n'inclut pas l'extension si Windows Explorer masquait des extensions et le fichier a une extension enregistrée. Par exemple:

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 Windows Explorer est défini sur Masquer les extensions et que le fichier zippé dispose d'une extension enregistrée, StrshellzippedFileInzipFileFileName n'inclut pas l'extension.

Cependant, l'objet de fichier zippé (OshellzippedFileInsipfile) a également une propriété de chemin qui incluent l'extension. Donc, vous pouvez obtenir le nom de fichier, y compris l'extension comme ceci:

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

Était-ce utile?

La solution

Une chose à garder à l'esprit est l'option de dossier dans Windows Explorer.Cela peut ne pas vous aider dans ce cas, mais j'ai eu plusieurs interactions FSO qui ont un problème énorme avec la manière dont les fichiers sont affichés dans l'Explorateur Windows.Quelque chose d'aussi simple que votre système affiche l'extension de fichier, et l'autre n'est pas, peut parfois être le coupable de rechercher des fichiers.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top