最近我开始收到错误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有两种不同的类型,所以我为intellisense做了它,谁知道还有什么。此代码获取电子邮件列表并将它们粘贴到excel中,以便excel解析html(包含表格)并将其直接粘贴到excel中。因此,数据直接进入工作表,我可以对其进行排序并解析它以及我想要的任何其他内容。
我想我基本上要求任何知道另一种方法的人除了把它放在一个html文件中发布之外。感谢
答案 0 :(得分:4)
这可能无法准确回答您的问题 - 但我注意到您的源代码中的一些内容太长而无法放入评论中,所以现在就是这样。其中一些肯定是因为你省略了它的例子,但无论如何我都会提到它,以防万一:
Option Explicit
- 这会避免很多错误,因为它会强制您声明每个变量Call SetGlobals
可以简化为SetGlobals
- 同样适用于Call Buf.SetText(body)
= Bof.SetText Body
等。hws.Select
,hws.Cells(k,1).Select
)< / LI>
Set mitm = itm
?因此,mitm
与itm
的对象相同 - 因此您只需使用itm
hws
多次删除itms
中的所有形状 - 对于hws.Cells(k, 1).Value = body
中的每个元素。但是,一旦足够,所以将删除循环移到For Each循环之外Sheet1 (sheetname)
- 这可以解决您的错误! Sheet2 (sheetname)
, hwb
,...)如果你愿意的话。然后您可以在整个代码中访问它们而无需任何分配!即使您将mws
的名称更改为有意义的内容,它也会在以后工作! ; - )因此,考虑到这一切,我最终得到以下代码,做同样的事情:
Sheet3