2016-09-16 193 views
0

因此,我經常運行某個報告,然後必須手動輸入大約30個字段,然後將其輸入到執行一些計算的VBA用戶窗體中。他們最近更新了我得到這份報告的網站,所以他們現在在一個excel文件中提供這個特定的報告。從外部Excel文件讀取數據

我想要做的是添加一個瀏覽按鈕到我的用戶表單,我可以搜索文件,然後它會自動填充數據字段。我非常喜歡VBA(或者至少曾經是這樣),但我對這裏的特定問題了解不多。希望有人能夠伸出援助之手!

感謝

+0

需要在這裏稍作澄清 - 你知道文件與數據字段的位置嗎?如果是這樣,讓你的按鈕執行一個'Workbooks.Open',然後檢索你需要的任何東西,關閉它,做你的calcs等等?如果你想要用戶指定文件,看看'Application.FileDialog(msoFileDialogFilePicker)'命令讓他們選擇有問題的文件?一般來說,如果您發佈自己的努力並表明您已經嘗試先自己解決問題,那麼您在這裏可能會更有幫助。 – Dave

+0

你實際上沒有在這裏提到「具體問題」。 –

+0

對不起,我實際上並沒有找人爲我做這個!只是想要朝正確的方向推進。我會看看FileDialog命令,這看起來像我在找什麼。謝謝 – ct4242

回答

0
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _ 
      & "Data Source='C:\Path\To\Workbook.xlsm';" _ 
      & "Extended Properties=""Excel 8.0;HDR=YES;"";" 

strSQL = "SELECT * FROM [Sheet1$]" 

您可以針對Excel文件直接查詢。我會補充說,該文件可能需要「乾淨/整潔」,才能完美運行。無論哪種方式這應該有所幫助。

編輯這是假設你首先下載它。我將不得不四處自動從網站獲取文件,然後查詢它。

0

我必須與其他工作簿頻繁工作,我做到以下幾點:

Dim reportBookPath As String 
Dim reportwb As Workbook 

reportBookPath = "C:\Users\......\filename.xlsx" 
Set reportwb = Workbooks.Open(Filename:=reportBookPath) 
reportwb.Application.Visible = False 

然後,當我想在工作簿訪問任何東西,它只是做的事:

valueDesired = reportwb.Worksheets("Desired Sheet").Cells(row,column).Value 

要使用此功能打開帶有動態文件名的工作簿,您需要爲工作簿名稱設置某種已建立的模式。如果有,可以使用正則表達式來打開相應的工作簿。要做到這一點,你會:

Dim objFSO As Object 
Dim objFolder As Object 
Dim objFile As Object 
Dim shiftRegExp As RegExp 
Dim strPattern As String 
Dim pathToFile As String 

以下行:

strPattern = "[S|s]hift(?)1(?)\.xlsx$" 

在所有這些代碼的真正強大的部分。對於任何以下列任何結尾的文件名,此特定正則表達式均爲真:

shift1.xlsx;移位1.xlsx; SHIFT1。 xlsx;移位1.xlsx; Shift1.xlsx; Shift 1.xlsx; Shift1 .xlsx; Shift 1.xlsx

您可以使用this link來測試您自己的正則表達式。

Set shiftRegExp = CreateObject("vbscript.regexp") 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFSO.GetFolder("C:\Users\....\workbook directory") 

With shiftRegExp 

.Global = True 
.MultiLine = True 
.IgnoreCase = False 
.Pattern = strPattern 

End With 

,您可以通過所有文件的迭代在你選擇的目錄中,直到你發現你的正則表達式匹配的文件使用正則表達式。顯然,如果你有多個文件與你的正則表達式匹配,你將會遇到問題。

For Each objFile In objFolder.Files 

If shiftRegExp.test(objFile.Path) Then 
    pathToFile = objFile.Path 
    Exit For 
End If 

Next objFile 
+0

我仍然需要動態獲取文件路徑名,我假設使用Application.FileDialog(msoFileDialogFilePicker)命令。我只是不熟悉這個命令。思考? – ct4242

+0

@ ct4242,我在上面的答案中加入了。如果你的情況允許,正則表達式可以解決你的問題。 – James