2016-08-02 106 views
0

我正在使用以下代碼從網頁讀取一些數據,然後粘貼到工作表中。我在同一個子文件中執行了兩次這樣的過程(即2個網頁)。但是,第二次使用pastespecial時,Excel崩潰,我不知道爲什麼會發生這種情況。使用PasteSpecial時Excel崩潰

Sub main() 

    Application.ScreenUpdating = False 

    Dim ie As InternetExplorer 
    Dim doc As HTMLDocument 
    Dim inputEl As HTMLInputElement 

    Set ie = New InternetExplorer 

    'open website 
    ie.navigate "http://...website.../page1.html" 
    ie.Visible = False 
    Sleep 5000 
    While ie.Busy 
     DoEvents 
    Wend 

''now copying source code to excel 
Set doc = ie.document 
CopyText doc.body.innerHTML 

Sheet3.Activate 
Sheet3.Cells.Clear 
Sheet3.DrawingObjects.Delete 
Range("A1").Select 
Range("A1").PasteSpecial xlPasteAll 

'opening second page 
ie.navigate "http://...website.../page2.html" 
Sleep 2000 
While ie.Busy 
    DoEvents 
Wend 
Set doc = ie.document 

Sheet8.Activate 
Sheet8.DrawingObjects.Delete 
CopyText doc.body.innerHTML 

Range("A1").Select 
'''''Excel crashes after this point, specifically on the next line 
Sheet8.Range("A1").PasteSpecial xlPasteAll 

End Sub 

僅供參考,我使用的功能的copytext(來自互聯網借用),其定義如下:

Public Sub CopyText(Text As String) 
    Dim MSForms_DataObject As Object 
    Set MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") 
    MSForms_DataObject.SetText Text 
    MSForms_DataObject.PutInClipboard 
    Set MSForms_DataObject = Nothing 
End Sub 

我用這個也試過,但沒有幫助 - pastespecial Crashing when pasting excel data

+0

嘗試切換兩個URL。如果您的代碼在代碼的第一部分開始崩潰,則可能是由於網頁的差異。 (如果它繼續在同一個地方崩潰,它可能是你的代碼。) – YowE3K

+0

我假設你在CopyText中創建的對象必須做一些特別的事情,這就是爲什麼你不能像'Sheet8.Range 「A1」)。Value = doc.body.innerHTML'? – YowE3K

+0

如果我使用range.value = html,那麼它會將整個html代碼放入一個單元格中。我想要的是模仿Ctrl + V,以便當HTML代碼粘貼到工作表時,它就像一個網頁。這樣我就可以使用通常的Excel技巧來閱讀網頁的各個部分 – dsauce

回答

0

你可以使用Sheet8.Paste來代替,也可以只使用Sheet8.Range("A1").PasteSpecial而不帶任何參數。

當剪貼板包含的數據不是您當前的Excel應用程序時,粘貼特殊對話框不同。

+0

我試過了,sheet8.paste不起作用,仍然崩潰,range.pastespecial不會崩潰,但也不會粘貼任何東西。我檢查了剪貼板仍然有字符串/數據。另外,我不明白它爲什麼第一次在同一個SUB中工作,而不是第二次。 – dsauce

+0

如果您手動粘貼它,它會工作嗎?如果您記錄粘貼文本的宏,代碼如下所示:'ActiveSheet.PasteSpecial Format:=「Text」,Link:= False,DisplayAsIcon:= False',我在代碼中看不到任何其他問題。 – Slai