2016-06-15 78 views
0

このコードの目的は、ワードドキュメントからExcelスプレッドシートに数値を検索してコピーすることです。すべての時間に起こるわけではありませんが、このスクリプトを実行すると時々1004エラーが発生します。デバッガは、の最初の "ActiveSheet.Paste"ステートメントを強調表示します。ステートメントは、コードの問題として "Do While Loop"の下にあります。私はスクリプトの他の部分との競合を見ていません。誰でも間違った点を見つけますか? TOR_Tracker.Worksheetsは(「シート1」)doesnのインスタンスは、これまでエラー1004ワークシートクラスの貼り付け方法が失敗した、断続的

Sub TorCopy() 

    ' Set variables 
    Dim Word As New Word.Application 
    Dim WordDoc As New Word.Document 
    Dim i As Integer 
    Dim j As Integer 
    Dim r As Word.range 
    Dim Doc_Path As String 
    Dim TOR_Tracker As Excel.Workbook 
    Dim TOR_Tracker_Path As String 
    Dim Whiteboard_Path As String 
    Dim Whiteboard As Excel.Workbook 
    Dim n As Integer 

    ' Set File Path that contains TOR 
    ' Open File 
    Doc_Path = "C:\Word_File.doc" 
    Set WordDoc = Word.Documents.Open(Doc_Path) 

    TOR_Tracker_Path = "C:\Tracker_Spreadsheet.xlsm" 
    Set TOR_Tracker = Workbooks.Open(TOR_Tracker_Path) 

    Whiteboard_Path = "C:\Excel_Spreadsheet_Acting_As_A_Whiteboard.xlsm" 
    Set Whiteboard = Workbooks.Open(Whiteboard_Path) 

    Whiteboard.Worksheets("Sheet1").Activate 

    ' Create a range to search 
    Set r = WordDoc.Content 

    j = 1 

    ' Find TOR numbers and copy them to whiteboard spreadsheet 
    With r 
     .Find.ClearFormatting 
     With .Find 
      .Text = "TP[0-9]{4}" 
      .Format = False 
      .MatchCase = False 
      .MatchWholeWord = False 
      .MatchWildcards = True 
     End With 
     Do While .Find.Execute = True 
      .Copy 
      ActiveSheet.Cells(j, 1).Select 
      ActiveSheet.Paste 
      j = j + 1 
     Loop 
    End With 

    ' Filter out duplicate TOR numbers 
    n = Cells(Rows.Count, "A").End(xlUp).Row 
    ActiveSheet.range("A1:A" & n).RemoveDuplicates Columns:=1, Header:=xlNo 

    ' Copy TOR numbers from whiteboard 
    With ActiveSheet 
     .range("A1").Select 
     .range(Selection, Selection.End(xlDown)).Select 
     Selection.Copy 
    End With 

    ' Paste to TOR Tracker 
    TOR_Tracker.Worksheets("Sheet1").Activate 
    With ActiveSheet 
     .range("A1").Select 
     Selection.End(xlDown).Select 
     Selection.End(xlDown).Select 
     Selection.End(xlDown).Select 
     ActiveCell.Offset(1, 4).Select 
     ActiveSheet.Paste 
    End With 

    Whiteboard.Close 
    WordDoc.Close 
    Word.Quit 

End Sub 
+0

あります存在しない?また、.Pasteを置くだけで、WithはすでにActiveSheetを指定しています。 –

+1

可能であれば、 '.Select'と' ActiveSheet'の使用を避けてください。あなたは本当にどちらかを使う必要はありません。ファイル内で使用する特定のワークシートへのオブジェクト参照を設定し、その参照を代わりに参照します。より迅速で信頼性の高いものです。 – Dave

+0

私は自分の投稿を編集したばかりで、2つのActiveSheet.Pasteステートメントがあり、最初のステートメントにのみ問題があります。 @Dave、特定のワークシートへのオブジェクト参照を設定することによって何を意味するのかを示すことができますか? – electronicaneer

答えて

1

コメントを1として、私は.Selectの使用を削除するには、コードを変更した、.Activateなど種類文

Sub TorCopy() 

    ' Set variables 
    Dim Word As New Word.Application 
    Dim WordDoc As New Word.Document 
    Dim i As Integer 
    Dim j As Integer 
    Dim r As Word.range 
    Dim Doc_Path As String 
    Dim TOR_Tracker As Excel.Workbook 
    Dim TOR_Tracker_Path As String 
    Dim Whiteboard_Path As String 
    Dim Whiteboard As Excel.Workbook 
    Dim whiteSheet as Worksheet 
    Dim torSheet as Worksheet 
    Dim n As Integer 

    ' Set File Path that contains TOR 
    ' Open File 
    Doc_Path = "C:\Word_File.doc" 
    Set WordDoc = Word.Documents.Open(Doc_Path) 

    TOR_Tracker_Path = "C:\Tracker_Spreadsheet.xlsm" 
    Set TOR_Tracker = Workbooks.Open(TOR_Tracker_Path) 
    Set torSheet = TOR_Tracker.Worksheets("Sheet1") 

    Whiteboard_Path = "C:\Excel_Spreadsheet_Acting_As_A_Whiteboard.xlsm" 
    Set Whiteboard = Workbooks.Open(Whiteboard_Path) 
    Set whiteSheet = Whiteboard.Worksheets("Sheet1") 

    ' Create a range to search 
    Set r = WordDoc.Content 

    j = 1 

    ' Find TOR numbers and copy them to whiteboard spreadsheet 
    With r 
     .Find.ClearFormatting 
     With .Find 
      .Text = "TP[0-9]{4}" 
      .Format = False 
      .MatchCase = False 
      .MatchWholeWord = False 
      .MatchWildcards = True 
     End With 
     Do While .Find.Execute = True 
      .Copy 
      whiteSheet.Cells(j, 1).PasteSpecial 
      j = j + 1 
     Loop 
    End With 

    ' Filter out duplicate TOR numbers 
    n = whiteSheet.Cells(whiteSheet.Rows.Count, "A").End(xlUp).Row 
    whiteSheet.range("A1:A" & n).RemoveDuplicates Columns:=1, Header:=xlNo 
    n = whiteSheet.Cells(whiteSheet.Rows.Count, "A").End(xlUp).Row ' re-getting the last row now duplicates are removed 

    lastRowTor = torSheet.Cells(torSheet.Rows.Count, "A").End(xlUp).Row 

    torSheet.Range("A" & lastRowTor & ":A" & (lastRowTor + n)-1).Value = whiteSheet.Range("A1:A" & n).Value ' sets values in Tor from White without Select, Copy or Paste 

    Whiteboard.Close 
    WordDoc.Close 
    Word.Quit 

End Sub 
+0

こんにちは私はこれを実行しようとし、 "オブジェクトは、このプロパティまたはメソッドをサポートしていません"というエラーが発生し、デバッガは "whiteSheet.Cells(j、1).Paste"行のためだと言いました。 – electronicaneer

+0

Whoops - Excel VBAは 'Paste'ではなく' PasteSpecial'を使います。私の悪い、更新されたコード – Dave

+0

残念ながら、私は今 "範囲クラスのPasteSpecialメソッドが失敗しました"エラーを取得しています。あなたは同じことをしていますか? – electronicaneer

関連する問題