0

考虑以下 tifs 目录:

EX0008-001.tif
EX0091-001.tif
EX0091-002.tif
EX0091-003.tif
EX0777-001.tif
EX0777-002.tif

我需要编写一个 VBA 脚本来编译一个专门格式化的输入文件。每个 TIF 图像构造为,文档第 1 页的 TIF 图像也是DOCUMENT-PAGE如此。为了编译输入文件,我首先需要将图像放入一个多维数组中,如下:EX0008-001.tifEX0008

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为一个数组,而不是一个类?

4

1 回答 1

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
于 2013-10-30T18:00:03.113 回答