0

最近、エラーが発生し始めました1004: PasteSpecial method of Range class failed。何もないときにアクティブなシートに貼り付けようとしている可能性があると人々が以前に言ったことは知っていますが、ご覧のとおり、すべてがに基づいてThisWorkbookいるため、問題にはなりません。Excel にフォーカスがない場合は、特に多く発生します。

'references the Microsoft Forms Object Library
Sub SetGlobals()
    Set hwb = ThisWorkbook' home workbook
    Set mws = hwb.Worksheets("Code Numbers") ' main worksheet
    Set hws = hwb.Worksheets("Sheet3") ' home worksheet (Scratch pad)
    Set sws = hwb.Worksheets("Status") ' Status sheet
    Set aws = hwb.Worksheets("Addresses") ' Addresses sheet
End Sub
Sub Import()

    Call SetGlobals
    hws.Select
    'a bunch of code to do other stuff here.
    For Each itm In itms
        Set mitm = itm
        body = Replace(mitm.HTMLBody, "<img border=""0"" src=""http://www.simplevoicecenter.com/images/svc_st_logo.jpg"">", "")
        Call Buf.SetText(body)
        Call Buf.PutInClipboard
        Call hws.Cells(k, 1).Select
        Call hws.Cells(k, 1).PasteSpecial

        For Each shape In hws.Shapes
            shape.Delete
        Next shape

        'Some code to set the value of k 
        'and do a bunch of other stuff.
    Next itm
End Sub

更新: mitm と itm には 2 つの異なる型があるため、インテリセンスのためにそれを行いました。このコードは、電子メールのリストを取得して Excel に貼り付け、Excel が html (テーブルを含む) を解析し、それを直接 Excel に貼り付けます。したがって、データはシートに直接入力され、それを並べ替えたり解析したりできます。

私は基本的に、それを投稿するためにhtmlファイルに入れる以外に、これを行う別の方法を知っている人にお願いしていると思います。ありがとう

4

1 に答える 1

4

これはおそらくあなたの問題を正確に解決するものではありませんが、コメントに入れるには長すぎるソース コードがいくつかあることに気付きました。いくつかは確かに例のために省略したためですが、念のために言及しておきます。

  • 使用Option Explicit- すべての変数を宣言する必要があるため、多くのエラーを回避できます
  • Call SetGlobals=などSetGlobalsと同じように簡略化できます。Call Buf.SetText(body)Bof.SetText Body
  • hws.Select何も「.Select」する必要はありません - ワークシート/範囲/形状オブジェクト (ベスト プラクティス) を介してすべてに直接アクセスするため、( 、hws.Cells(k,1).Select)を選択しないでください。
  • なぜSet mitm = itmですか?mitmしたがって、 - と同じオブジェクトになるため、itm単純に使用できますitm
  • hwsの要素ごとに、すべての形状を複数回削除していますitms。ただし、1 回で十分なので、削除ループを For Each ループの外に移動します。
  • クリップボードに何かを入れてからセルに貼り付ける代わりに、直接割り当てるだけです: hws.Cells(k, 1).Value = body - これでエラーが解決するはずです!
  • 「SetGlobals」で割り当てるワークシートにグローバル変数を使用する代わりに、Excel がネイティブで提供するシート オブジェクトを使用するだけです。VBE の右側のウィンドウでプロジェクト ツリーを見ると、ワークシート ノードSheet1 (sheetname)Sheet2 (sheetname)などが表示されます。これらのオブジェクトの名前を変更できます - それらのプロパティ ( F4) に移動し、意味のある名前に変更します - または、必要に応じて現在の名前 ( hwbmws、...) に変更します。その後、割り当てなしでコード全体でそれらにアクセスできます! Sheet3の名前を意味のあるものに変更しても、後で機能します。;-)

したがって、すべてを考慮に入れると、同じことを行う次のコードになります。

Option Explicit

Sub Import()

    'a bunch of code to do other stuff here.

    For Each shape In hws.Shapes
        shape.Delete
    Next shape

    For Each itm In itms
        Call hws.Cells(k, 1) = Replace(itm.HTMLBody, "<img border=""0"" src=""http://www.simplevoicecenter.com/images/svc_st_logo.jpg"">", "")

        'Some code to set the value of k 
        'and do a bunch of other stuff.
    Next itm
End Sub
于 2013-02-15T23:13:38.337 に答える