2016-12-13 13 views
0

私はサードパーティのプログラムからデータをコピーして私の仕事でExcelシートに貼り付けるプログラムを書いています。すべて私はマクロを実行している5台のコンピュータのうち4台で完璧に動作します。ただし、この最後のコンピュータは、pastespecialはあるコンピュータでマクロを失敗させますが、他のコンピュータでは失敗します

を生成します。実行時エラー '1004':範囲クラスのPasteSpecialメソッドが失敗しました。

最後にこのエラーが発生したのは、スクリプトでCell.Activateを使用していたためです。私はそれ以来、これを使用することを避けるために書きましたが、一方のコンピュータはまだ問題を抱えています。なぜこれができますか?

プログラムは基本的に、入力としてキーボード入力のみを受け付ける第三者プログラムにウィンドウを切り替えます。私はセンドキーを使って必要なデータにアクセスし、それをコピーして貼り付けて、データを扱うことができる場所をExcelに貼り付けます。

私はプログラムの中ではるかに早くRQWBを設定していますが、ここではそのための行です。

Dim RQWB As Workbook 
Set RQWB = Workbooks("Excel workbook") 

ここにはforループがあります。

  'find missing emails 
For count3 = 0 To 200 
    If IsEmpty(RQWB.Worksheets("Email_List").Range("D1").End(xlDown).Offset(1, -3).Value) = True Then 

    Else 

     RQWB.Worksheets("Email_List").Range("D1").End(xlDown).Offset(1, -3).Copy 

     AppActivate "Other program" 
     Sleep 500 
     SendKeys "~", True 
     Sleep 70 
     SendKeys "~", True 
     Sleep 70 
     SendKeys "~", True 
     Sleep 70 
     SendKeys "~", True 
     Sleep 70 
     SendKeys "~", True 
     Sleep 70 
     SendKeys "~", True 
     Sleep 70 
     SendKeys "~", True 
     Sleep 70 
     SendKeys "1", True 
     Sleep 70 
     SendKeys "~", True 
     Sleep 70 
     SendKeys "2", True 
     Sleep 70 
     SendKeys "~", True 
     Sleep 70 
     SendKeys "1", True 
     Sleep 70 
     SendKeys "~", True 
     Sleep 70 
     SendKeys "c ", True 
     Sleep 70 
     SendKeys "^v", True 
     Sleep 70 
     SendKeys "^x", True 
     Sleep 70    
     SendKeys "^a", True 
     Sleep 70    
     SendKeys "^c", True 
     Sleep 70 
     RQWB.Worksheets("Data").Cells.Delete 
     RQWB.Worksheets("Data").Range("A1").PasteSpecial 
     Sleep 500 
     If RQWB.Worksheets("Data").Range("A24").Value = "CONDITION" Then 
      RQWB.Worksheets("Email_List").Range("D1").End(xlDown).Offset(1, 0).EntireRow.Delete 
      AppActivate "OTHER PROGRAM" 
      Sleep 500 
      SendKeys "~", True 
      Sleep 70 
     ElseIf RQWB.Worksheets("Data").Range("A24").Value = "CONDITION" Then 
      RQWB.Worksheets("Data").Range("D24").Value = "=LEFT(A6, 6)" 
      RQWB.Worksheets("Data").Range("D24").Copy 
      AppActivate "OTHER PROGRAM" 
      Sleep 500 
      SendKeys "^v", True 
      Sleep 70 
      SendKeys "30", True 
      Sleep 70 
      SendKeys "~", True 
      Sleep 70 
      SendKeys "^x", True 
      Sleep 70 
      SendKeys "^a", True 
      Sleep 70 
      SendKeys "^c", True 
      Sleep 70 
      RQWB.Worksheets("Data").Cells.Delete 
      RQWB.Worksheets("Data").Range("A1").PasteSpecial 
      If RQWB.Worksheets("Data").Range("A8").Value = "CONDITION" Then 
       Sleep 70 
       AppActivate "OTHER PROGRAM" 
       Sleep 500 
       SendKeys ("3") 
       Sleep 70 
       SendKeys ("~") 
       Sleep 70 
       SendKeys "^x", True 
       Sleep 70 
       SendKeys "^a", True 
       Sleep 70 
       SendKeys "^c", True 
       Sleep 70 
       RQWB.Worksheets("Data").Cells.Delete 
       RQWB.Worksheets("Data").Range("A1").PasteSpecial 
       Sleep 70 
       If IsEmpty(RQWB.Worksheets("Data").Range("A21").Value) = True Then 
        RQWB.Worksheets("Email_List").Range("D1").End(xlDown).Offset(1, 0).EntireRow.Delete 
       Else 
        RQWB.Worksheets("Email_List").Range("D1").End(xlDown).Offset(1, 0).Value = RQWB.Worksheets("Data").Range("A21").Value 
       End If 
      End If 
     ElseIf RQWB.Worksheets("Data").Range("A2").Value = "===============================================================================" Then 
      AppActivate "OTHER PROGRAM" 
      Sleep 500 
      SendKeys "30", True 
      Sleep 70 
      SendKeys "~", True 
      Sleep 70 
      SendKeys "^x", True 
      Sleep 70 
      SendKeys "^a", True 
      Sleep 70 
      SendKeys "^c", True 
      Sleep 70 
      RQWB.Worksheets("Data").Cells.Delete 
      RQWB.Worksheets("Data").Range("A1").PasteSpecial 
      Sleep 500 
      If RQWB.Worksheets("Data").Range("A8").Value = "CONDITION" Then 
       Sleep 70 
       AppActivate "OTHER PROGRAM" 
       Sleep 500 
       SendKeys ("3") 
       Sleep 70 
       SendKeys ("~") 
       Sleep 70 
       SendKeys "^x", True 
       Sleep 70 
       SendKeys "^a", True 
       Sleep 70 
       SendKeys "^c", True 
       Sleep 70 
       RQWB.Worksheets("Data").Cells.Delete 
       RQWB.Worksheets("Data").Range("A1").PasteSpecial 
       Sleep 70 
       If IsEmpty(RQWB.Worksheets("Data").Range("A21").Value) = True Then 
        RQWB.Worksheets("Email_List").Range("D1").End(xlDown).Offset(1, 0).EntireRow.Delete 
       Else 
        RQWB.Worksheets("Email_List").Range("D1").End(xlDown).Offset(1, 0).Value = RQWB.Worksheets("Data").Range("A21").Value 
       End If 
      End If 
     End If 
    End If 
Next count3 

私はどこ.activateなしでペーストに秀でる伝えるためにRQWBを追加するために必要なので、隠されたワークブックでこのスクリプトを実行しています。

ご協力いただきますようお願い申し上げます。

編集:コードを残して申し訳ありません。それは仕事関連のプログラムなので、どのくらい私が投稿する必要があるか分からなかった。それはちょっと長く、私はどれくらい関連性があるのか​​わかりません。ここにいくつかのコードがあります。それでももっと必要な場合は、重要なビットを編集するだけで全部を投稿することができます。

+1

もっとコード=より多くの手がかり –

+0

Timが書いたように、私たちがどのように手助けすると思いますか? 'RQWB'はどこに定義され、設定されていますか?関連コードの残りの部分を投稿してください。 –

+0

編集されました。より多くのコードと少し説明が追加されました。 – AutomateMyJob

答えて

0

私はエラーがこの行から来ていると思います:

RQWB.Worksheets("Email_List").Range("D1").End(xlDown).Offset(1, -3).Copy 

あなたが何をしたいのか明確にもらえますか?

+0

この行で私はアカウント番号をコピーし、他のプログラムで使用してアカウントを開きます。 "sendkeys"が "^ x、^ A、^ C"になると、他のプログラムの画面をコピーしていて、 'RQWB.Worksheets(" Data ")、Range(" A1 ")。PasteSpecialはその画面を上に貼り付けることができます。 – AutomateMyJob

+0

いいえ、私が投稿した行は私がExcelでそれを試してみるとエラーになります – snibbo

関連する問題