Domanda

In Excel 2010 VBA, sto usando la proprietà dei fileexists del filesystemobject per verificare se un file esiste. Sul mio computer funziona bene. Ma su un altro computer Excel 2010, riporta che il file non è lì quando in effetti vediamo in Windows Explorer che il file è lì. In entrambi i casi, il file che viene controllato è sul disco rigido locale.

Sto controllando il file subito dopo aver usato Shell per decomprimere il file. Io uso i danno dopo il decompressione. Il file viene estratto nella stessa cartella in cui il file zip è in.

Ecco il codice:

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)
.

Qualche idea Perché funziona bene su un computer, ma su un altro computer riporta che il file non è lì anche se vediamo che è chiaramente?

Aggiornamento:

Ho pensato di aggiungere questa nota nel caso in cui potrebbe essere utile per gli altri in esecuzione nello stesso intoppo.

Il problema di base di base è stato che quando si utilizza Shell per estrarre un file zippato, la proprietà del nome dell'oggetto file zippato non include l'estensione se Windows Explorer sta nascondendo le estensioni e il file ha un'estensione registrata. Ad esempio:

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
.

Se Windows Explorer è impostato per nascondere le estensioni e il file zippato ha un'estensione registrata, strshellzippedfileinzipfilefileName non include l'estensione.

Tuttavia, l'oggetto file zippato (OshiellzotFileinzipfile) ha anche una proprietà del percorso che include l'estensione. Quindi puoi ottenere il nome del file incluso l'estensione come questa:

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

È stato utile?

Soluzione

Una cosa da tenere a mente è le opzioni della cartella all'interno di Windows Explorer.Questo potrebbe non aiutarti in questo caso, ma ho avuto un numero di interazioni FSO che hanno un enorme problema con il modo in cui i file vengono visualizzati in Windows Explorer.Qualcosa di semplice come il tuo sistema sta visualizzando l'estensione del file, e l'altro non è, a volte può essere il colpevole in cerca di file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top