VBA错误1004-范围类的特殊方法
最近我开始出现错误VBA错误1004-范围类的特殊方法,vba,excel-2007,Vba,Excel 2007,最近我开始出现错误1004:Paste Range类的特殊方法失败。我知道以前有人说过,它可能试图在没有活动工作表的情况下粘贴到活动工作表,但是,正如您所看到的,所有内容都基于此工作簿,所以这不应该是问题所在。当Excel没有焦点时,这种情况会发生得更多 'references the Microsoft Forms Object Library Sub SetGlobals() Set hwb = ThisWorkbook' home workbook Set mws = hw
1004:Paste Range类的特殊方法失败
。我知道以前有人说过,它可能试图在没有活动工作表的情况下粘贴到活动工作表,但是,正如您所看到的,所有内容都基于此工作簿
,所以这不应该是问题所在。当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
”引用了Microsoft窗体对象库
亚集全局()
设置hwb=此工作簿的主工作簿
设置mws=hwb.工作表(“代码编号”)主工作表
设置hws=hwb.工作表(“Sheet3”)主工作表(便笺簿)
设置sws=hwb.工作表(“状态”)状态表
设置aws=hwb.工作表(“地址”)地址表
端接头
次级进口()
调用SetGlobals
选择
“这里有一堆代码来做其他事情。
对于itms中的每个itm
设置mitm=itm
正文=替换(mitm.HTMLBody,“,”)
调用Buf.SetText(body)
呼叫Buf.PUTINCLIBPORD
调用硬件单元(k,1)。选择
调用硬件单元(k,1)
对于hws.Shapes中的每个形状
形状。删除
下一个形状
'一些设置k值的代码
“还要做一些其他的事情。
下一个itm
端接头
更新:mitm和itm有两种不同的类型,所以我为intellisense做了这件事,谁知道还有什么。此代码获取电子邮件列表并将其粘贴到excel中,以便excel解析html(其中包含表格)并将其直接粘贴到excel中。因此,数据直接进入工作表,我可以对其进行排序和解析,以及我想要的任何其他内容
我想我基本上是在要求任何人,除了把它放在一个html文件中发布外,还知道其他方法。谢谢这可能无法准确回答您的问题-但我注意到您的源代码中有一些内容太长,无法放在注释中,所以请看这里。其中一些原因当然是因为您在示例中省略了它,但我还是要提到它,以防万一:
- 使用
-这将避免许多错误,因为它会强制您声明每个变量选项Explicit
可以简化为Call SetGlobals
-与SetGlobals
=Call Buf.SetText(body)
等相同Bof.SetText body
- 无需“选择”任何内容-直接通过工作表/范围/形状对象访问所有内容(这是最佳做法),因此不要选择(
,hws.Select
)hws.Cells(k,1)。选择
- 为什么
<因此,code>mitm将与设置mitm=itm
是相同的对象,因此您可以简单地使用itm
itm
- 您多次删除
中的所有形状-针对hws
中的每个元素。但是,一次就足够了,所以将delete循环移到For-Each循环之外itms
- 与其将某些内容放入剪贴板,然后将其粘贴到单元格中,不如直接指定它:
-这应该可以解决您的错误强>hws.Cells(k,1).Value=body
- 不要对在“SetGlobals”中指定的工作表使用全局变量,只需使用Excel提供的工作表对象即可:如果查看VBE中带有项目树的右侧窗口,则会看到工作表节点
,Sheet1(sheetname)
,等等。。如果需要,您可以重命名这些对象-转到其属性(F4)并将其更改为有意义的名称-或您当前的名称(Sheet2(sheetname)
,hwb
,…)。然后,您可以在整个代码中访问它们,而无需任何分配!即使您将mws
的名称更改为有意义的名称,它也会在以后起作用!;-)李>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
选项显式
次级进口()
“这里有一堆代码来做其他事情。
对于hws.Shapes中的每个形状
形状。删除
下一个形状
对于itms中的每个itm
调用hws.Cells(k,1)=替换(itm.HTMLBody,“,”)
'一些设置k值的代码
“还要做一些其他的事情。
下一个itm
端接头
这可能无法准确回答您的问题-但我注意到您的源代码中有一些内容太长,无法放在注释中,所以就在这里。其中一些原因当然是因为您在示例中省略了它,但我还是要提到它,以防万一:
- 使用
-这将避免许多错误,因为它会强制您声明每个变量选项Explicit
可以简化为Call SetGlobals
-与SetGlobals
=Call Buf.SetText(body)
等相同Bof.SetText body
- 无需“选择”任何内容-直接通过工作表/范围/形状对象访问所有内容(这是最佳做法),因此不要选择(
,hws.Select
)hws.Cells(k,1)。选择
- 为什么
<因此,code>mitm将与设置mitm=itm
是相同的对象,因此您可以简单地使用itm
itm
- 您多次删除
中的所有形状-针对hws
中的每个元素。但是,一次就足够了,所以将delete循环移到For-Each循环之外itms
- 与其将某些内容放入剪贴板,然后将其粘贴到单元格中,不如直接指定它:
-这应该可以解决您的错误强>hws.Cells(k,1).Value=body
- 不要对在“SetGlobals”中指定的工作表使用全局变量,只需使用Excel提供的工作表对象即可:如果查看VBE中带有项目树的右侧窗口,则会看到工作表节点
,Sheet1(sheetname)
,等等。。您可以重命名这些对象-转到它们的属性(F4)并将其更改为有意义的名称-或Sheet2(sheetname)