2016-06-28 5 views
0

列(V)が「はい」とマークされたら、アーカイブブックを作成しようとしています。私はマクロ機能を持っていましたが、私はこの午後再びテストしたときに、範囲外のエラーを受けました。ワークブック/ワークシートの名前を確認しましたが、両方のワークブックが同じフォルダにあります。トラブルシューティングを試みましたが、両方のブックが開いているときにのみ実行されることがわかりました。これは、アーカイブワークブックが開かれることなく実行できるという方法はありますか?(私はVBAに新しいブランドだと自分自身を教えていますので、任意のヘルプは大歓迎です!)VBAの別のブックへのアーカイブ

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 22 Then 
    If Target = "Yes" Then 
Application.EnableEvents = False 
    nxtRow = Workbooks("FPPE Archive.xlsm").Worksheets("EUHM Onboard").Range("V" & Rows.Count).End(xlUp).Row + 1 
    Target.EntireRow.Copy _ 
Destination:=Workbooks("FPPE Archive.xlsm").Worksheets("EUHM Onboard").Range("A" & nxtRow) 
    Target.EntireRow.Delete 
End If 
End If 
Application.EnableEvents = True 
End Sub 
+0

どのようにあなたのマクロを実行しませんか? – findwindow

答えて

1

の方法は、あなたの質問内のコードがあります書かれているのは、それが機能するためにはアーカイブワークブックが開いている必要があります。

以下のリファクタリングされたコードでは、必要な場合があります。必要になるたびにアーカイブワークブックを開き、更新して閉じます。

最初にブックが開いているかどうかを確認することで、もっとうまくできます。ブックそれを保持が閉じている場合(関数はすべてそのためのインターネット上である)

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Column = 22 and Target = "Yes" Then 

     Application.EnableEvents = False 

     Dim wb as Workbook 
     Set wb = Workbooks.Open(ThisWorkbook.Path & "\FPPE Archive.xlsm" 

     Dim ws as Worksheet 
     Set ws = wb.Worksheets("EUHM Onboard") 

     nxtRow = ws.Range("V" & Rows.Count).End(xlUp).Row + 1 

     Target.EntireRow.Copy Destination:=ws.Range("A" & nxtRow) 

     Target.EntireRow.Delete 

     wb.Close True 

     Application.EnableEvents = True  

    End If 

End Sub 
+0

スコット、私は他のものの上にいくつかのねじれを働いていたとき、私はあなたのコードを使用していると私は再び、私は範囲エラーのうちを受け、この日の午後にそれをテストしました。私は自分のワークブック/ワークシートの名前をチェックしており、正しいものです。トラブルシューティングを試みましたが、V列で「はい」を選択すると、マクロはまったく登録されません。何が問題なの?強調表示された行は、「WBを設定= ...」 –

+0

'マクロはALL'で登録しない - ことを確認してください' Application.EnableEvents = true'を。イミディエイトウィンドウを使用してこれを元に戻すことができます。コードが途中で途切れた場合、コードが再びオンになっていない可能性があります。エラーについては、ブックのパスと名前がディレクトリで有効であることを確認してください。 –