Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA错误1004-范围类的特殊方法_Vba_Excel 2007 - Fatal编程技术网

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)。选择
  • 为什么
    设置mitm=itm
    <因此,code>mitm将与
    itm
    是相同的对象,因此您可以简单地使用
    itm
  • 您多次删除
    hws
    中的所有形状-针对
    itms
    中的每个元素。但是,一次就足够了,所以将delete循环移到For-Each循环之外
  • 与其将某些内容放入剪贴板,然后将其粘贴到单元格中,不如直接指定它:
    hws.Cells(k,1).Value=body
    -这应该可以解决您的错误
  • 不要对在“SetGlobals”中指定的工作表使用全局变量,只需使用Excel提供的工作表对象即可:如果查看VBE中带有项目树的右侧窗口,则会看到工作表节点
    Sheet1(sheetname)
    Sheet2(sheetname)
    ,等等。。如果需要,您可以重命名这些对象-转到其属性(F4)并将其更改为有意义的名称-或您当前的名称(
    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)。选择
  • 为什么
    设置mitm=itm
    <因此,code>mitm将与
    itm
    是相同的对象,因此您可以简单地使用
    itm
  • 您多次删除
    hws
    中的所有形状-针对
    itms
    中的每个元素。但是,一次就足够了,所以将delete循环移到For-Each循环之外
  • 与其将某些内容放入剪贴板,然后将其粘贴到单元格中,不如直接指定它:
    hws.Cells(k,1).Value=body
    -这应该可以解决您的错误
  • 不要对在“SetGlobals”中指定的工作表使用全局变量,只需使用Excel提供的工作表对象即可:如果查看VBE中带有项目树的右侧窗口,则会看到工作表节点
    Sheet1(sheetname)
    Sheet2(sheetname)
    ,等等。。您可以重命名这些对象-转到它们的属性(F4)并将其更改为有意义的名称-或