2017-04-12 155 views
1

我試圖運行腳本來搜索關鍵字,然後複製找到該關鍵字的整個句子,並將其粘貼在Excel電子表格上。宏錯誤 - Microsoft Word - 運行時錯誤'1004':工作表類錯誤的粘貼方法失敗

當我運行一個文件是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 
+0

對不起,我嘗試粘貼代碼,它都混雜在一個段落。我不知道如何解決這個問題(剛剛接觸論壇,剛剛學會了今天的'宏'來試試這段代碼)。我不知道如何以正確的格式發佈代碼。 :\但我編輯原始文章與混亂的文本(和原始代碼的鏈接,如果你點擊它,並以正確的格式向下滾動它)。 – IrisRose

+0

一旦你將代碼加入問題中,你需要將每行縮進4個空格,使其看起來不錯。 Ctrl-K是一個快捷鍵。 – YowE3K

+0

FWIW - 我猜測打開工作簿導致剪貼板被清除是不正確的。 – YowE3K

回答

2

如果該問題是由於複製/粘貼的信息,可以通過只需直接分配文本回避:

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你複製,而不是它所複製之間的副本。

因此,儘可能避免在代碼中使用複製/粘貼。