2016-08-02 3 views
0

Я использую следующий код, чтобы прочитать некоторые данные с веб-страницы, а затем вставить в лист. Я делаю этот процесс дважды (т. Е. Для 2 веб-страниц) в том же подпункте. Однако при использовании pastespecial во второй раз Excel падает, и я понятия не имею, почему это происходит.Excel сбой при использовании PasteSpecial

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»). Значение = doc.body.innerHTML'? – YowE3K

+0

Если я использую range.value = html, тогда он поместит весь код html в одну ячейку. я хочу подражать ctrl + v, чтобы при вставке html-кода в лист он выглядел как веб-страница. таким образом, я смогу использовать обычную тактику excel для чтения различных частей веб-страницы. – dsauce

ответ

0

You вы можете использовать Sheet8.Paste или попробовать только Sheet8.Range("A1").PasteSpecial без каких-либо параметров.

Специальное диалоговое окно вставки отличается, когда буфер обмена содержит данные, которые не относятся к текущему приложению Excel.

+0

Я попробовал оба, sheet8.paste не работает, все еще падает и range.pastespecial не сбой, но также не вставляет ничего. Я проверил, и в буфере обмена все еще была строка/данные. Кроме того, я не понимаю, почему он работает впервые в том же SUB, а не во второй раз. – dsauce

+0

Работает ли он, если вы вставляете его вручную? Если вы записываете макрос вставки текста, код выглядит так: «ActiveSheet.PasteSpecial Format: =« Text », Link: = False, DisplayAsIcon: = False, и я не вижу никаких других проблем в вашем коде. – Slai

Смежные вопросы