【发布时间】:2019-08-11 03:33:47
【问题描述】:
所以我在这里发布了一个问题:
VBA - Find Specific Sub Folders by Name Identifiers
这个问题非常广泛,但我遇到了需要帮助识别和解决的具体问题。现在,我设法在原始帖子中解决了这些问题,但是,仍有很大一部分问题没有得到解答,我只想在能够发布完整结果时关闭问题。
目前,我还需要做的,最后 4 个步骤:
- 打开压缩文件
- 寻找 .png 扩展名
- 获取 .png 文件的名称
- 在 Excel 的单元格中输入名称
我面临的问题是正确打开 zip 文件。我浏览过很多关于这方面的帖子,但似乎没有什么对我有用。
我最接近完成任务的是我在这里找到的:
我想,如果至少我能够输入 zip 文件,我就可以从那里开始工作。但是,唉,我仍然停留在简单地尝试打开文件。
这是我的代码(使用上面的链接):
Sub CountZipContents()
Dim zCount As Double, CountContents As Double
Dim sh As Object, fld As Object, n As Object
Dim FSO As Object
CountContents = 0
zCount = 0
x = "C:\Users\UserName\Desktop\Today\MyFolder\"
Set FSO = CreateObject("Scripting.FileSystemObject")
If FSO.FolderExists(x) Then
For Each FileInFolder In FSO.GetFolder(x).Files
If Right(FileInFolder.Name, 4) = ".png" Then
CountContents = CountContents + 1
ElseIf Right(FileInFolder.Name, 4) = ".Zip" Then
Set sh = CreateObject("Shell.Application")
Set ZipFile = sh.Namespace(CVar(x & "\" & FileInFolder.Name))
Debug.Print FileInFolder.Name
For Each fileInZip In ZipFile.Items
If LCase(fileInZip) Like LCase("*.png") Then
CountContents = CountContents + 1
End If
Next
End If
Next FileInFolder
End If
Set sh = Nothing
End Sub
我得到的问题是在这一行:
For Each fileInZip In ZipFile.Items
错误信息:
对象变量或未设置块
每当我尝试使用Shell 时,如下所示:
Dim oShell As New Shell
我收到此错误:
用户自定义类型未定义
以下内容:
链接https://msdn.microsoft.com/en-us/library/windows/desktop/bb776890(v=vs.85).aspx
Dim oApp As Object
Set oApp = CreateObject("WScript.Shell")
'get a shell object
Set oApp = CreateObject("Shell.Application")
If oApp.Namespace(ZipFile).Items.count > 0 Then
我收到此错误:
对象不支持该属性或方法
在这一行:
If oApp.Namespace(ZipFile).Items.count > 0 Then
对我尝试过的链接的引用:
https://wellsr.com/vba/2015/tutorials/open-and-close-file-with-VBA-Shell/ http://www.vbaexpress.com/forum/showthread.php?38616-quot-shell-quot-not-work-in-Excel Excel VBA - read .txt from .zip files
我只是不明白为什么这一步要花这么多时间才能完成。
【问题讨论】:
-
第一期;我没有看到您定义了
FileInZip是什么。对于第二个问题,您还没有定义Shell是什么。 VBA 正在寻找这两者的对象引用。 -
@ZackE 谢谢你的回复。根据我的理解,
FileInZip将只是ZipFile中的一个元素。类似于未定义FileInFolder,但填充了基本文件夹中文件变量的空白。请参阅此行FileInFolder In FSO.GetFolder(x).Files。没有定义Shell的第二个问题是 1) 在我发现的每个示例中,没有人“定义”Shell,他们只是像引用任何其他数据类型一样引用它。 2)如果有要添加的参考,我不知道,我似乎也找不到。