Summary:我們需要去一個網站,下載一個Excel文件,並複製&將數據自動粘貼到Excel模板文件中。VBA - Internet Data Scrap&Download File&Copy Paste Data
當前問題:我目前的VBA代碼打開IE,數據報廢並自動下載文件沒有任何問題。但是,只有在分解模式下才會打開下載的工作簿並複製&將數據粘貼到模板中。
什麼都沒有工作:我嘗試了多種想法,如睡眠,Application.Wait和DoEvents。不幸的是,它一直停留在同一條線上。代碼無法識別工作簿已經打開並且無法找到要複製&粘貼的數據。只有在進入中斷模式後,文件纔會最終打開。
觀察:刪除了Excel上的安全設置,因此在打開文件時我沒有收到警告消息。
這段代碼是一個循環的一部分,它將使您可以在下面找到5個不同文件的相同過程。在下載每個文件後,它會複製&將數據粘貼到我的模板中。
任何想法&解決方案是完全歡迎!
請在下面找到我的代碼:
sub test()
'-----------------------------------
'Code to do the Data Scrap in here. It works fine.
'-----------------------------------
Dim o As IUIAutomation
Dim e As IUIAutomationElement
Dim h As Long
Dim wkbook As Workbook
Dim Cwkbook As String, ThisWkbook As String
'Code to Automate IE Download
Set o = New CUIAutomation
h = ieApp.hWnd
h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString)
If h = 0 Then Exit Sub
Set e = o.ElementFromHandle(ByVal h)
Dim iCnd As IUIAutomationCondition
Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "Open")
Dim Button As IUIAutomationElement
Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
Dim InvokePattern As IUIAutomationInvokePattern
Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
InvokePattern.Invoke
'Download Completed and File Should be opened.
DoEvents
Application.Wait Now + #12:00:10 AM#
'Even after using DoEvents & Application.Wait, the code won't open the workbook until it goes into Break Mode.
'Code to find Downloaded Workbook which will come named either as X or Y.
ThisWkbook = ThisWorkbook.Name
For Each wkbook In Application.Workbooks
If Left(wkbook.Name, 9) = "XXXXXXXXX" Or Left(wkbook.Name, 9) = "YYYYYYYYY" Then
Cwkbook = wkbook.Name
'-----------------------------------
'Code to Copy&Paste data in here. It works fine.
'-----------------------------------
End If
Next
End Sub
您將需要UIAutomationClient參考,使代碼工作。如果包括它的時候(像我一樣)得到一個錯誤,添加「Microsoft Visual Basic的應用程序擴展」引用並運行下面的代碼:
Sub MyUIAutomation()
'----------------------------------------------------
'Add UIAutomation as VBA Reference
'----------------------------------------------------
Dim VBProj As VBIDE.VBProject
Set VBProj = ThisWorkbook.VBProject
VBProj.References.AddFromFile Environ("systemroot") & "/system32\uiautomationcore.dll"
Set VBProj = Nothing
End Sub
更新17年8月28日:我想圍繞一個工作僅在打開工作簿時複製/粘貼數據。這個想法是完成我的主要「數據提取」代碼。代碼完成後,工作簿應該打開,因爲它的行爲之前,第二個代碼會觸發,複製/粘貼數據.-> Run VBA macro whenever any workbook is opened
結果:它仍然無法正常工作。它只會打開整個循環的最後一個工作簿,並複製&粘貼它的數據。其他4個以前的文件不會打開。
UPDATE 8.31.17另一個解決方法失敗。我試圖創建一個用戶表單,用戶將不得不點擊5個不同的按鈕。這個想法是檢查我的問題是否是循環。每個按鈕都會提取文件,然後我會觸發粘貼宏。
結果:它沒有工作。我認爲,雖然我有我的「用戶表單」打開excel認識到一個宏正在運行。如果我在中斷模式下運行它,它仍然會打開文件並複製數據。
我會建議你減少你的問題的範圍...重點放在什麼不工作,這樣,你的代碼更容易閱讀和解決 – HelderSepu
謝謝你爲你的建議。我剛剛編輯了我的文章,並試圖讓它更直接。 –
您的代碼仍然是70多行,我相信您可以進一步減少... – HelderSepu