2015-01-07 13 views
6

ExcelとVBAでの私の経験は、私が学校で見たものに限られていると言って始めます。私はプログラミング経験がありますが、他の言語でもあります。Excel VBA何かがワークシートに貼り付けられたかどうかを検出する方法

私には毎週ファイルがあります。このファイルの構造は常に同じです: ID、名前、日付、1〜4の値、関連性のないデータ。

このデータは、 'すべて選択'ボタン(ワークシートの左上隅、MS Excel 2013のセル名の下にある小さな三角形)で選択され、データを再表示する別のデフォルトファイルにコピーされ、 1-4の値と日付に基づいて異なるシート。

私の質問:データが貼り付けられているかどうかを検出するにはどうすればよいですか? Worksheet.Changeイベントを試しましたが、貼り付けコマンド(CTRL + V)はChangeイベントをトリガーしません。 また、データはどのようにコピーされますか?行ごとに、セルごとに(どちらの方向に)更新されますか? コピーコマンドを検出できれば、最後の質問に対する回答を簡単にデバッグすることができますが、誰かが答えを知っているかどうかはわかりません。

これを行うにはもっと簡単な方法がありますか?

必要に応じてさらに多くのデータと情報を与えることができます。

ありがとうございました。

EDIT: '...はコピーされていますか?'それはされていたはずだったペーストに変更されました。

+0

なぜデータがコピーされているか知りたいですか?何か特別な理由はありますか?あなたは何を達成したいですか?このデータを別のワークブック/ワークシートに取り込みますか? –

+0

あなたはこれを見たことがありますか:http://www.siddharthrout.com/2011/08/15/vba-excelallow-paste-special-only/? –

+0

@MaciejLosファイルを使用する人々が毎週大きなデータリストを取得するためです。彼らは私が現在取り組んでいるファイルの最初のワークシートにこのリストを貼り付け、関連するデータをフィルタリングし、行ごとに特定の値に基づいて他のワークシートに表示する必要があります。 RE:あなたの他のコメント:私は休憩前にそれを開いていましたが、それを読み終えていませんでした。私は現在それを試しているし、私が望むことをするように見えます。答えがあれば投稿します。 – Nahbyr

答えて

8
Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim UndoList As String 

    '~~> Get the undo List to capture the last action performed by user 
    UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1) 

    '~~> Check if the last action was not a paste nor an autofill 
    If Left(UndoList, 5) = "Paste" Then 
    'Do stuff 
    End If 
End Sub 

をこれはトリックをしました。似たようなものが必要で、リストのサイズを知っている人のために、@MaciejLosの答えもうまくいくでしょう。

1

Worksheet_Change上書きされないセルに式を追加すると、イベントが実行されます。あなたのデータがA1セルに貼り付けられ、5列を占めているとしましょう。だから、今、あなたはpasteイベントを検出/取り扱うことができるしている6行と列の1

=COUNTBLANK(A1:A1048576) 

に数式の下に入力します。)

+0

インポートするデータリストの量がわからないという事実がなければ、それはうまくいくでしょう。あなたが以前に送ったリンクの私の問題の修正を見つけました。コードを投稿します。 – Nahbyr

関連する問題