看板 Visual_Basic 關於我們 聯絡資訊
※ 引述《fumizuki (矇面加菲獅)》之銘言: : ※ 引述《oneil (百年孤寂)》之銘言: : : 請問一下各位大大 : : 小弟剛接觸vba不久,遇到一個奇怪的問題 : : 在使用windows().activate時 : : 我從網頁上開啟一個excel file (a檔案)的超連結 : : 然後要用另外一個EXCEL FILE (b檔案) 把 a 裡面的資料要複製到b : : 我使用window("a.xls").activate要把檔案a active起來以便選取複製 : : 但是卻出現"超出索引範圍"的錯誤訊息。如果我把a存檔在開啟,之後執行我的程式 : : 就沒有這個問題,好像是vba沒辦法抓到a檔案。請問一下有沒有解決的方法呢? : : 謝謝大家! : IE中的工作表不知道如何抓裡面的資料, : 所以只能用下載後再用excel開啟的方式抓資料了 : 提供一個下載檔案的程式碼給你參考: : Dim WithEvents ix As Inet : Public Sub test() : Set ix = New Inet : ix.RemoteHost = "127.0.0.1" '此處填入該網站的ip位址 : ix.RemotePort = 80 '網站預設都是80 port : ix.Execute "http://127.0.0.1/xxx.xls", "GET" '下載連結中的檔案 : End Sub : Private Sub ix_StateChanged(ByVal State As Integer) : '狀態為 12,代表資料已接收完成... : '其他狀態請選取StateChanged然後按F1取得詳細說明 : If State = 12 Then : Dim xx() As Byte : Open "c:\temp\xxx.xls" For Binary As #1 : Do : xx = ix.GetChunk(1024, icByteArray) '指定每一次迴圈讀取1024bytes : If UBound(xx) < 0 Then Exit Do '到達檔案結尾時會得到空的陣列 : Put #1, , xx '寫入至本機檔案,檔案路徑由 open 後的字串決定 : Loop : Close #1 : Readxls() '讀取xxx.xls的內容 : End If : End Sub : Private Sub Readxls() : Dim wb As Workbook : Set wb = Workbooks.Open("c:\temp\xxx.xls") : Set ws = wb.Worksheets(1) : MsgBox ws.Range("A1").Value : wb.Close : Kill "c:\temp\xxx.xls" '刪除剛才建立的暫存檔 : End Sub 多謝fumizuki大大的回答, 我想進一步請教如果a檔案不是在web上開啟,而是在Lotus notes上開啟, 該如何設定呢?不知道會不會有存取的限制, 所以我有一個比較簡單的想法, 就是先把a檔案開啟,開啟a檔案時, 理論上會存到一個internet暫存資料夾,如果我可以抓到暫存資料夾的檔案 這樣一來我就可以把複製貼上的動作自動化了,我剛才試了一可以抓到該檔案的路徑 C:\Documents and Settings\ciberlace\Local Settings\Temporary Internet Files\Content.IE5\AJRUGDHU a檔案也可以打開,但是我用windows("上述路徑").activate但是還是出現 "陣列索引超出範圍"的錯誤訊息,不知道這是什麼原因?檔案應該已經存在電腦了啊 還是說有什麼設定上面的問題,我看了一下暫存檔案資料夾屬性,是隱藏的資料夾 不知道抓不到跟這個有沒有關係? 這是我在web上測試的結果,如果換成在notes上不知道會不會有另外的問題, 不知道各位大大有沒有什麼好方法呢? 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.131.74.131
fumizuki:windows的索引值只能指定excel開啟的視窗啦 08/25 13:38
fumizuki:任何一個ie可以開啟的網址都可以用inet取得其內容 08/25 13:39
fumizuki:用inet就不需要經過ie或其他任何軟體了 08/25 13:40