2010-11-15 155 views
2

我有用於處理Word文檔的VBA腳本。該程序所做的第一件事是在一組定義的文件夾中創建文檔的索引。然後它通過列表處理每個索引文檔。VBA無法找到文件

我遇到的問題是,它有時會決定找不到特定的文檔,即使先前索引了文檔並且快速檢查顯示文檔位於正確位置。

任何人都可以闡明爲什麼VBA應該顯示這種行爲?

該腳本使用Dir$函數爲文件建立索引,並使用Documents.Open函數打開每個word文檔進行處理。

樣品的編號:

ChangeFileOpenDirectory (folderName) 
inputFileName = Dir$(folderName & "*.doc") 
Do While inputFileName <> "" 
    ... call various functions here ... 
    inputFileName = Dir$ 
Loop 

之一稱爲在塊中的函數具有下面的行:

Set currentDoc = Documents.Open(fileName:=docFileName, AddToRecentFiles:=False, Visible:=False) 

這是在其中碼失敗的點。

+0

有人訪問該文件.....? – 2010-11-15 15:14:14

+0

它是否有一個特定的錯誤,或者它是否默默地跳過它? – 2010-11-15 15:15:49

+1

很長的路徑+文件名也可能是原因 – 2010-11-15 15:20:25

回答

0

我發現的最煩人的事情之一是最近的文件鏈接作爲文件本身與Dir返回。您可以使用FileSystemObject來檢查文件類型。

+0

我從我的代碼打開的文檔從未在我的計算機上打開過,因此它們無法顯示爲最近的文件鏈接。 – Pandelon 2010-11-16 08:36:21

0

我複製/粘貼你的代碼,它工作正常。

但是,它將所有文件打開(和隱藏),並且當您在另一個目錄中運行它時,會打開其他文件並將其添加到打開的項目中(查看VBA編輯器)。

我唯一的猜測是,過了一段時間,你打到打開文件的最大允許數量。

嘗試增加

currentdoc.Close 

之前

inputFileName = Dir$ 
+0

對不起smirkingman,我沒有提到我在currentDoc.Open中執行currentDoc.Close。我想在我的腦海裏,似乎太明顯了。代碼在大多數情況下都能正常工作,只是現在,然後它隨機決定一個特定的文檔不存在,即使它很明顯。 – Pandelon 2010-11-16 11:13:49

0

有幾個原因,一些來自其他答案複製:

  • 如果路徑+文件名是足夠長的時間...(你已在評論中回覆)
  • 如果您正在撰寫新文件到同一目錄,Dir $可能會損壞(發生在我身上)
  • 如果你有非標準字符的文件名(例如: 「#」)
  • 文件鎖定被其他進程
  • 文件而宏觀運行

你也可以嘗試這個代碼...

Set fso = CreateObject("Scripting.FileSystemObject") 
If Not fso.FileExists(file) Then .... 

首先啓用Microsoft腳本參考刪除在VBE