作者oneil (百年孤寂)
看板Visual_Basic
標題Re: [VBA ] windows().activate的問題
時間Sat Aug 25 12:21:53 2007
※ 引述《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