FileSystemObject FileExistsは1台のコンピュータで動作しますが、別のコンピュータで動作しません

StackOverflow https://stackoverflow.com//questions/25026553

質問

Excel 2010 VBAでは、ファイルが存在するかどうかを確認するためにFileSystemObjectのFileExistsプロパティを使用しています。私のコンピュータにはうまく機能します。しかし、別のExcel 2010コンピュータでは、ファイルがそこにあるという点でWindows Explorerで表示されるときにファイルがそこにないことを報告します。どちらの場合も、チェックされているファイルがローカルのハードドライブ上にあります。

シェルを使用してファイルを解凍した直後にファイルをチェックしています。 unzipの後にDoEventsを使用します。ファイルは、zipファイルが属しているのと同じフォルダに抽出されています。

これはコードです:

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

これが1台のコンピュータでうまく機能する理由で、別のコンピュータではファイルが表示されていなくてもファイルが表示されていないのは何ですか?

更新:

私は同じスナッグに遭遇した他の人に役立つかもしれません。

基本的な基礎となる問題は、シェルを使用してzipファイルを抽出するときに、zipped fileオブジェクトのNameプロパティに拡張子が拡張機能を隠し、ファイルに登録された拡張子があるということです。例えば:

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
.

Windowsエクスプローラが拡張機能を非表示に設定されていて、zipファイルに登録された拡張子がある場合は、StrshellzIppedFileInzipFileFileNameに拡張子が含まれていません。

しかし、zipped fileオブジェクト(oshellzippedFileInzipFile)には、拡張子が含まれているパスプロパティもあります。そのため、このような拡張子を含むファイル名を取得できます。

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

役に立ちましたか?

解決

留意することは、Windowsエクスプローラ内のフォルダオプションです。この場合、これはあなたを助けることはできませんが、私はファイルがWindowsエクスプローラにどのように表示されるかに大きな問題を持ついくつかのFSOの対話を持っていました。システムがファイル拡張子を表示しているのと同じくらい簡単で、もう1つはそうではない場合は、ファイルを探している場合がある場合があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top