2016-08-02 2 views
0

次のコードを使用してWebページから一部のデータを読み取り、貼り付けをシートにしています。私はこのプロセスを同じサブで2回(すなわち、2つのウェブページについて)行う。しかし、pastespecialを2回目に使用すると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

2つのURLを切り替えてみてください。あなたのコードがコードの最初の部分でクラッシュすると、それはおそらくウェブページの違いによるものです。 (同じ場所でクラッシュする場合は、おそらくあなたのコードです。) – YowE3K

+0

CopyTextで作成しているオブジェクトが特別な処理をしなければならないと仮定します。そのため、 'Sheet8.Range "A1")。Value = doc.body.innerHTML'? – YowE3K

+0

range.value = htmlを使用すると、htmlコード全体が1つのセルに配置されます。私が望むのは、HTMLコードがシートに貼り付けられたときにWebページのように見えるように、Ctrl + Vを模倣することです。この方法で私は通常のExcelの戦術を使用してウェブページの様々な部分を読むことができる – dsauce

答えて

0

ます代わりにSheet8.Pasteを使用するか、パラメータなしでSheet8.Range("A1").PasteSpecialを試してみてください。

クリップボードに現在のExcelアプリケーションからのデータが含まれていない場合、ペーストの特殊ダイアログが異なります。

+0

私は両方を試して、sheet8.pasteが動作しない、まだクラッシュし、range.pastespecialはクラッシュしないが、何も貼り付けません。私はチェックし、クリップボードにはまだ文字列/データがありました。また、なぜ同じSUBで最初に動作し、2回目ではないのか分かりません。 – dsauce

+0

手動で貼り付けると機能しますか?貼り付けテキストのマクロを記録すると、このコードはActiveSheet.PasteSpecial Format:= "Text"、Link:= False、DisplayAsIcon:= False'のようになり、コードに他の問題はありません。 – Slai

関連する問題