考虑以下tifs目录:
EX0008-001.tif
EX0091-001.tif
EX0091-002.tif
EX0091-003.tif
EX0777-001.tif
EX0777-002.tif
我需要编写一个VBA脚本来编译一个特定格式的输入文件。每个TIF图像都构造为DOCUMENT-PAGE
,因此EX0008-001.tif
是文档EX0008
的第1页的TIF图像。为了编译输入文件,我首先需要将图像放入多维数组中,如下所示:
Array(
[EX0008] = Array (001)
[EX0091] = Array (001, 002, 003)
[EX0777] = Array (001, 002)
)
为此,我必须使用VBA。问题是我只对php有所了解。我一直在寻找一个关于如何在VBA中解决我的问题的明确指南但是不成功。来自@AutomatedChaos的示例代码对我来说太先进了。
Set objShell = CreateObject("WScript.Shell")
currentDirectory = objShell.CurrentDirectory
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder(currentDirectory)
Set TifCollection = CreateObject("System.Collections.ArrayList")
For each objFile in objFolder.Files
If objFso.GetExtensionName (objFile.Path) = "tif" Then
fileNumber = Split(objFile.Name, "-")(0)
pageNumber = Split(objFile.Name, "-")(1)
If Not TifCollection(fileNumber).Exists Then
Set TifCollection.Item(fileNumber) = CreateObject("System.Collections.ArrayList")
End If
TifCollection.Item(fileNumber).Add pageNumber
End If
Next
由于这也是我对VBA的第一次介绍,我希望尽可能保持我的代码简单明了。你能帮我把上面的代码搞定吗?我不明白我得到的错误消息(Class doesn't support Automation: TifCollection
),因为我将TifCollection
定义为数组,而不是类?
答案 0 :(得分:2)
你不能在VBA中使用.Net类,除非它们公开了COM接口,因此你看到了错误。
VBA直接支持数组,但它们只是整数索引数组。您需要使用Scripting.Dictionary对象。以下内容未经过测试,但应该接近您的目标。
Set objShell = CreateObject("WScript.Shell")
currentDirectory = objShell.CurrentDirectory
Set objFso = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFso.GetFolder(currentDirectory)
Set TifCollection = CreateObject("Scripting.Dictionary")
For each objFile in objFolder.Files
If objFso.GetExtensionName (objFile.Path) = "tif" Then
fileNumber = Split(objFile.Name, "-")(0)
pageNumber = Split(objFile.Name, "-")(1)
If Not TifCollection.Exists(fileNumber) Then
TifCollection.Add fileNumber, CreateObject("Scripting.Dictionary")
End If
TifCollection.Item(fileNumber).Add pageNumber, ""
End If
Next