2016-08-22 76 views
0

我有以下VBA代碼使用VBA

Dim directory As String, fileName As String 
directory = "C:\User\Work\scorix\test_excel\" 
fileName = Dir(directory & "*.xl??") 

現在我想改變的代碼,這樣我就能夠讀取路徑閱讀路徑從一個Excel工作簿細胞的一個文件夾給定的Excel-Workbook單元格,然後構建fileName。 如果我嘗試

directory = Worksheets("Summary").Range("B2").Value 
fileName = Dir(directory & "*.xl??") 

它不起作用。這意味着在第directory日結束時爲空,因此fileName爲空。 在下一步我試了

With ThisWorkbook 
    directory = Sheets("Summary").Range("B2").Value 
    End With 

它的工作原理! (但是,爲什麼?可能是我不明白definition of With) 然而,在下一步

fileName = Dir(directory & "*.xl??") 

filename仍然是空的。我用ActiveSheet嘗試了一切,但沒有成功!

+1

我看不出上述代碼有什麼問題,我在本地驗證過。你確定在目錄中有excel文件,你指的是嗎?你的B2單元格是否有正確提及的目錄路徑?檢查它 – Siva

+1

你的代碼也能正常工作,這個問題必須在其他地方 – Miqi180

+1

檢查目錄末尾是否有\,如果不加它。 ?')' –

回答

3

在我看來,這些錯誤發生得相當隨意,這在我的經驗中可能發生在同時處理多個工作表時。也許有

directory = ThisWorkbook.Worksheets("Summary").Range("B2").Value 

或交替更換

directory = Worksheets("Summary").Range("B2").Value 

(什麼是什麼,我寧願與一系列工作)

directory = ThisWorkbook.Worksheets("Summary").Cells(2, 2).Value 

或可替代

With ThisWorkbook 
    ' notice the dot in Front of "worksheets" 
    directory = .Worksheets("Summary").Range("B2").Value 
End With 

修復的東西。

另一種情境方法可能是在VBA編輯器中命名您的Sheet對象(編輯屬性窗口中的(Name)屬性)。

希望有所幫助。

P.S. 由於您使用了Dir()函數,我相信您知道爲了獲得第二個+文件,您必須重複調用它(可能在循環中)而不提供目錄。

1

DIR返回路徑中的第一個文件\模式 遞歸你需要做的DIR(「」)傳遞一個空字符串

enter image description here

1
directory = Worksheets("Summary").Range("B2").Value 
fileName = Dir(directory & "*.xl??") 

沒有什麼錯,此代碼ü也許會寫錯誤的工作表名稱?

With ThisWorkbook 
    directory = Sheets("Summary").Range("B2").Value 
End With 

不要忘記使用「。」當您使用的語句

fileName = Dir(directory & "*.xl??") 

「張」之前主要的原因這個代碼不工作是propably因爲有一個以「* .xl結束一個以上的文件?「在那個文件夾中

+0

Dir(路徑)將始終返回匹配模式的第一個文件 所以,雖然它可能不會產生OP所需的結果,如果有一個或多個匹配搜索模式的文件,它將返回一個字符串 –