2016-08-02 109 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