2011-09-23 66 views
0

所以我有一個「主」的Excel文件,我需要在一個目錄 - 從Excel文件的數據來填充。我只需要訪問每個文件並從每個工作簿中的第二個工作表中複製一行,然後將其粘貼到我的主文件中,而無需打開Excel文件。Excel - VBA問題。需要訪問的數據從所有目錄中的Excel文件,而無需打開文件

我不是這方面的專家,但我可以處理一些中間宏。我需要的最重要的事情是能夠在不打開它們的情況下逐一訪問每個文件。我真的需要這個,所以任何幫助表示讚賞!謝謝!

編輯...

所以我一直在嘗試使用dir功能通過與循環目錄中運行,但我不知道如何從第一個文件移動。我在一個網站上看到了這一點,但對我來說,循環不會停止,只會訪問目錄中的第一個文件。

Folder = "\\Drcs8570168\shasad\Test" 
    wbname = Dir(Folder & "\" & "*.xls") 

    Do While wbname <> "" 

i = i + 1 
ReDim Preserve wblist(1 To i) 
wblist(i) = wbname 
wbname = Dir(FolderName & "\" & "*.xls") 

wbname如何向下移動文件列表?

+2

你的意思是不用在Excel *中打開文件*,或者根本不打開文件*?我認爲後者在計算世界中沒有任何意義(糾正任何人)。如果前者,那麼爲什麼你不想在Excel中打開文件,爲什麼最好以非Excel方式打開它們? –

+0

我需要通過幾百個文件,所以我不希望它們打開和關閉。 – user960358

+0

我不知道爲什麼這是在這裏仍然在進行中時移到一個新的問題?此外,您接受的這篇文章中的links方法是我之前提出的一篇文章(point3)的一部分,所以我認爲在將來您可能希望在解決方案時要小心一點:) – brettdj

回答

2

我只是想指出:你不嚴格需要VBA從關閉的工作簿中獲取值。您可以使用一個公式,如:

='C:\MyPath\[MyBook.xls]Sheet1'!$A$3 

您可以實現在VBA這種方法還有:

Dim rngDestinationCell As Range 
Dim rngSourceCell As Range 
Dim xlsPath As String 
Dim xlsFilename As String 
Dim sourceSheetName As String 

Set rngDestinationCell = Cells(3,1) ' or Range("A3") 
Set rngSourceCell = Cells(3,1) 
xlsPath = "C:\MyPath" 
xlsFilename = "MyBook.xls" 
sourceSheetName = "Sheet1" 

rngDestinationCell.Formula = "=" _ 
    & "'" & xlsPath & "\[" & xlsFilename & "]" & sourceSheetName & "'!" _ 
    & rngSourceCell.Address 

其他的答案呈現良好的解決方案,以及,也許比這更優雅。

+0

嘿,我喜歡這個代碼的簡單性,因爲我不是專家,但我想知道如何將這個應用於該目錄中的所有文件,並將信息粘貼到單獨的行中。 你能否也解釋一下最後一行?我只是不太明白這個部分「'!」 &_ rngSourceCell.Address 謝謝 – user960358

+0

整個聲明只是我試圖構造字符串''C:\ MyPath \ [MyBook.xls] Sheet1'!$ A $ 3' ... –

+0

我從來沒有做過任何代碼像之前這樣,所以我在開始時遇到了很多麻煩。我想我必須把「* .xls」作爲文件名,並以某種方式將它變成循環,但我不知道如何。 不好意思要求這麼多,但我在這裏掙扎。 – user960358

4

不要要打開的文件(ADO可能是一種選擇,如創建的代碼鏈接,或使用ExecuteExcel4Macro)通常與代碼打開文件是最靈活和最簡單的方法。

  1. Copy a range from a closed workbook (ADO)
  2. ExecuteExcel4Macro
  3. Links method

但是你爲什麼不想要打開的文件 - 這是一個真正的硬約束?

我在Macro to loop through all sheets that are placed between two named sheets and copy their data to a consolidated file代碼拉動從在每個工作簿的所有片材的文件夾中的所有數據一起(在後臺打開文件)。

它可以很容易地進行定製,只是排片2的X,如果你很高興與這一過程

+2

記住 - ADO「打開」文件也:) – paulsm4

+2

他們*所有*打開文件,在某種程度上! –

+1

我有大約750個文件,我需要從中提取數據,所以我不希望它們在我運行宏時打開並關閉。 – user960358

-1

在宏的開頭添加

Application.ScreenUpdating = false 

然後在最後

Application.ScreenUpdating = True 

,你將不會看到任何文件打開的宏執行其功能。

+0

雖然一個有趣的解決方法,可能不是OP正在尋找什麼因爲該文件仍然需要在Excel中打開。 – psubsee2003

0

從我的類包裝爲Excel某些位:

Dim wb As Excel.Workbook 
Dim xlApp As Excel.Application 

Set xlApp = New Excel.Application 
xlApp.DisplayAlerts = False ''# prevents dialog boxes 
xlApp.ScreenUpdating = False ''# prevents showing up 
xlApp.EnableEvents = False ''# prevents all internal events even being fired 

''# start your "reading from the files"-loop here 
    Set wb = xlApp.Workbooks.Add(sFilename) '' better than open, because it can read from files that are in use 

    ''# read the cells you need... 
    ''# [....] 

    wb.Close SaveChanges:=False  ''# clean up workbook 
''# end your "reading from the files"-loop here 

''# after your're done with all files, properly clean up: 
xlApp.Quit 
Set xlApp = Nothing 

祝你好運!

相關問題