【问题标题】:Macro Error - Microsoft Word - Run-time error '1004': Paste method of Worksheet class failed宏错误 - Microsoft Word - 运行时错误“1004”:工作表类的粘贴方法失败
【发布时间】:2017-04-13 14:37:46
【问题描述】:

我正在尝试运行一个脚本来搜索关键字,然后复制找到该关键字的整个句子,并将其粘贴到 Excel 电子表格中。

当我在 1-2 页的文档上运行脚本时,它运行良好,但是当我尝试更长的文档(100 多页)时,我收到以下错误:

运行时错误“1004”:Worksheet 类的粘贴方法失败。 当我点击“调试”时,它说“objsheet.paste”是问题所在。

您能帮我修改一下代码,让它也可以处理更长的文本吗?

Sub FindWordCopySentence()
    Dim appExcel As Object
    Dim objSheet As Object
    Dim aRange As Range
    Dim intRowCount As Integer
    intRowCount = 1
    Set aRange = ActiveDocument.Range
    With aRange.Find
        Do
            .Text = "Hair"
            .Execute
            If .Found Then
                aRange.Expand Unit:=wdSentence
                aRange.Copy
                aRange.Collapse wdCollapseEnd
                If objSheet Is Nothing Then
                    Set appExcel = CreateObject("Excel.Application")
                                         Set objSheet = appExcel.workbooks.Open("C:\Users\HNR\Desktop\hair.xlsx").Sheets("Sheet1")
                    intRowCount = 1
                End If
                objSheet.Cells(intRowCount, 1).Select
                objSheet.Paste
                intRowCount = intRowCount + 1
            End If
        Loop While .Found
    End With
    If Not objSheet Is Nothing Then
        appExcel.workbooks(1).Close True
        appExcel.Quit
        Set objSheet = Nothing
        Set appExcel = Nothing
    End If
    Set aRange = Nothing
End Sub

【问题讨论】:

  • 对不起,我尝试粘贴代码,结果都乱成一个段落。我不知道如何修复它(论坛新手,今天刚刚了解了“宏”是什么来尝试这段代码)。我不知道如何以正确的格式发布代码。 :\ 但是我用混乱的文本编辑了原始帖子(以及指向原始代码的链接,如果您单击它并向下滚动,它就会以正确的格式出现)。
  • 一旦将代码放入问题中,您需要将每行缩进 4 个空格以使其看起来不错。 Ctrl-K 是执行此操作的快捷键。
  • FWIW - 我猜测打开工作簿导致剪贴板被清除是不正确的。
  • 感谢您修复我的原始消息。代码现在在那里 :)
  • 我不是 Word-VBA 专家(我在删除不正确的“宏”标签时遇到了您的问题)但在真正的专家出现之前,您可以尝试将 aRange.Copy 更改为 myTempText = aRange.TextobjSheet.Cells(intRowCount, 1).Select objSheet.PasteobjSheet.Cells(intRowCount, 1).Value = myTempText - 这可能有助于确定它是与复制/粘贴相关的问题还是其他问题。 (我无法用我设置的一些虚拟数据复制问题,所以我认为您的文档本身可能存在导致复制/粘贴问题的问题)

标签: vba ms-word


【解决方案1】:

如果问题是由于复制/粘贴信息引起的,则可以通过直接分配文本来避免:

Sub FindWordCopySentence()
    Dim appExcel As Object
    Dim objSheet As Object
    Dim aRange As Range
    Dim intRowCount As Integer
    Dim myTempText As String
    intRowCount = 1
    Set aRange = ActiveDocument.Range
    With aRange.Find
        Do
            .Text = "Hair"
            .Execute
            If .Found Then
                aRange.Expand Unit:=wdSentence
                'Store the text into a variable
                myTempText = aRange.Text
                aRange.Collapse wdCollapseEnd
                If objSheet Is Nothing Then
                    Set appExcel = CreateObject("Excel.Application")
                    Set objSheet = appExcel.workbooks.Open("C:\Users\HNR\Desktop\hair.xlsx").Sheets("Sheet1")
                    intRowCount = 1
                End If
                'Set the destination cell to the text we stored
                objSheet.Cells(intRowCount, 1).Value = myTempText
                intRowCount = intRowCount + 1
            End If
        Loop While .Found
    End With
    If Not objSheet Is Nothing Then
        appExcel.workbooks(1).Close True
        appExcel.Quit
        Set objSheet = Nothing
        Set appExcel = Nothing
    End If
    Set aRange = Nothing
End Sub

问题的另一个潜在原因是您在处理大型文档时感到无聊,因此您在对其他内容执行其他复制/粘贴操作时让它在后台运行。

CopyPaste 与其他应用程序共享剪贴板,因此,如果您在代码执行Copy 和执行Paste 之间进行复制,它将尝试Paste 什么是你复制的,而不是它复制的。

因此,尽可能避免在代码中使用复制/粘贴。

【讨论】:

    猜你喜欢
    • 2016-06-16
    • 2022-08-14
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    相关资源
    最近更新 更多