2016-09-15 1 views
-1

Excelでセルをコピーしてコピーしたことを忘れてしまい、新しい列/そのセルから新しい列/行全体に値を貼り付けますか?あなたがしている場合、これは超迷惑であることを知っている!特に大きなファイルを扱う場合やコピーしたセルに数式がある場合は、何度もExcelをクラッシュさせてしまいます。Excel VBA警告:セルが既にクリップボードにコピーされている場合に新しい行/列を追加する前に

セルが既にクリップボードにコピーされている(つまり、セルの内容を新しい列/行のすべてのセルに貼り付ける)場合、新しい行/列を追加する前に警告するマクロを書く方がいますか?

+1

私は確かに*可愛いですが、それは簡単ではありません。行が挿入されようとしているかどうかを知るためのイベントはありません。おそらく、Excelのメニューをフックする必要があります。これと比較すると、クリップボードの状態を調べることはそれほど難しくありません。 – Comintern

+2

'Ctrl + Z'だと:) – Zac

+0

私は' Application.CutCopyMode <> False'を使うことになると確信しています。イベントが質問です。 – Kevin

答えて

2

VBAソリューションに関する限り、以下はワークシートイベントです。

Excelのクリップボードに貼り付ける前に、ユーザーにメッセージは表示されませんが、複数の行/列/セルを選択しようとしている場合は、そうします。ユーザーエクスペリエンスの観点からは、これで十分です。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Application.CutCopyMode <> False And Target.Cells.Count > 5000 Then 
     MsgBox "Excel is in cut/copy mode..." 
    End If 
End Sub 

これは、警告が発生する各ワークシートに移動する必要があります。

EDIT:OR! ThisWorkBookで以下を使用してください

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
    If Application.CutCopyMode <> False And Target.Cells.Count > 5000 Then 
     MsgBox "Excel is in cut/copy mode..." 
    End If 
End Sub 

EDIT2:上記はアクティブブックのみで動作します。個人的なワークブックで使用するために、ピアソンは、このようなものがすべてのワークブック(マクロ以外のファイルでも)、hereのためにどのように機能するかを説明する良い仕事をしました。 私が期待する大きな変化は、以下に説明するときです。私は今、それをテストすることはできませんが、Workbook_SheetSelectionChange(...)が動作するようになると思います。

Private XLApp As CExcelEvents 

Private Sub Workbook_Open() 
    Set XLApp = New CExcelEvents 
End Sub 
+0

これは素晴らしいです - ありがとう! 「個人的な」このワークブック、個々のファイルだけでは動作しないようです。「個人的」で動作するようにする方法はありますか?すべてのファイルに適用されるでしょうか? – branden

+0

個別のブックからpersonal.xlsmにイベントを渡すことができます。作業中のコードを手に入れないでください。もし私がそれを見つければ、それがどう動くかを説明するのに役立つリンクを追加します。 Answerへのリンクを追加します。 – Kevin

関連する問題