2013-10-30 25 views
0

考慮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

「System.Collections.ArrayList」是VB.NET你們的榜樣陣列不匹配VBA中的任何結構:也許你正在尋找的東西更像是一個Dictionary對象(您可以在找到' Scripting.Runtime'庫)? –

+0

'System.Collections.ArrayList'只能通過VBScript使用,如果您使用VBA,請按照建議使用Dictionary。 – AutomatedChaos

回答

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 
+0

感謝您的回覆!然而,我仍然得到了以前的錯誤:'line 14 char 5 Object required'TifCollection(...)「'。我不明白這個錯誤:'TifCollection'是第7行創建的對象,不是嗎? – Pr0no

+0

@ Pr0n0 - 'Exists'是TifCollection對象上的方法,而不是它存儲的項目。第14行應該是'If Not TifCollection.Exists(fileNumber)Then' –