2017-03-15 8 views
2

私は、ブックを持っているとカットとは、Excelは、その後の事は

を挿入された行でマクロを実行する必要があります私はすでにの色を変更する行の変更で一つのセルで実行するコードを持っています同じ値を持つ別のシートのセル。

そのコードはworksheet_Changeサブです。

私の質問はどうやってターゲットが切り抜かれて挿入されたかどうかを調べるにはどうすればよいですか?マーク・フィッツジェラルドへ

EDIT **

おかげで私はより多くの情報を与える必要が実現しました。

私は1つは、空白行とデータの行データ

の各グループのヘッダを有する2シートが他のシートの列に設定されているので、各列はそれぞれの最初のセルのヘッダ情報を有しますグループに含まれる行の

誰かが行シートの1つのグループからいくつかの行をカットして挿入すると、列シート内の関連するセルが関連する列に移動します。

行はコピーおよび貼り付けされることはなく、値は行とは独立して移動しません。

彼らはそれがより雑然と作られているため、コードが

Private Sub Worksheet_Change(ByVal Target As Range) 
Application.ScreenUpdating = False 
Dim KeyCells As Range 
Dim batchNo 
' The variable KeyCells contains the cells that will 
' cause an alert when they are changed. 
Set KeyCells = Range("m1:m5000") 
Set batchNo = Range("A" & ActiveCell.Row) 

If Target.count = 1 Then 
    Select Case Target.Value 
     Case "x" 

     Case "y" 

     Case Else 
      ActiveCell.Interior.Color = RGB(255, 255, 255) 
      ActiveCell.Font.Color = RGB(0, 0, 0) 
    End Select 

    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then 

     Dim c 
     With Sheets("columnsheet").Range("d12:fz144") 
      Set c = .Find(batchNo, LookIn:=xlValues) 
      If Not c Is Nothing Then 
       Workbooks("Work In Process.xls").Activate 
       Worksheets("columnsheet").Activate 
       ActiveSheet.Range(c.Address).Activate 
       Select Case Target.Value 
       Case "x" 

       Case "y" 

       Case Else 
        ActiveCell.Interior.Color = RGB(255, 255, 255) 
        ActiveCell.Font.Color = RGB(0, 0, 0) 
       End Select 
       Workbooks("Work In Process.xls").Activate 
       Worksheets("rowsheet").Activate 
      End If 
     End With 
    End If 
ElseIf (Target.count > 1) Then 
             'if entire row or rows are selected 
End If 
Application.ScreenUpdating = True 
End Sub 

の下には、私はほとんどの場合に削除されますが、彼らはすべての変更テキストの色と背景色

+0

だった場合、私はこれを解決する方法

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Application.CutCopyMode <> False Then Application.CutCopyMode = False MsgBox "Cut or Copy & Paste is not allowed on this sheet", vbExclamation End If End Sub 

+0

私はほとんどそれを持っていると思う。 Process.xlsのワークシートで行シートを監視しているのですか、それとも別のワークブックですか? –

+0

同じブック – Liamck27

答えて

0

をチェックすることにより、でしたか?また、あなたのシートがどのように配置されているかを理解していると思いますが、両方のシートの画像を前後に見たいと思うだけです。私はあなたが尋ねていることはおそらく実行できると思います。
0

でマクロを除く3個の潜在的な方法、とがあります。実際のセルに何も入力せずにセルの値を変更:シート上の別のセルから

  1. ドラッグ&ドロップ
  2. コピーして、あなたを別のセル、シートあるいはワークブック
  3. カットから貼り付け、あなたがセルまたはセル範囲の中にドラッグ&ドロップするからユーザーを停止する場合は、別のセル、シートやワークブックから

を貼り付けシートがアクティブになるたびにその機能を無効にすることができます。開いているすべてのブックのすべてのシートに適用されるアプリケーション設定であるため、シートを非アクティブ化するときには必ず再度有効にしてください。

空白でないセルの枠線の上にマウスポインタを置くと、マウスポインタが4つの矢印に変わらないことがわかります。私は別のシートまたはブックから何かをコピーしようとしている場合、CellDragAndDropを無効にするとクリップボードもクリアされるという文書化されていない副作用があることがわかりました。

シート内からの切り取りと貼り付けを防ぐには、セル選択が変更されたときに、CutCopyMode(つまり、選択範囲を囲むアタッチメントがある)がチェックされているかどうかを確認する必要があります。選択が行全体、既存の `Worksheet_Change`コードを示すことができ

If Target.count > 0 Then 
    Dim r As Range 
    If Target.Columns.count = ActiveSheet.Columns.count Then  ' if entire row 
     If Target.rows.count > 1 Then        ' multiple rows 
      For Each r In Target.rows        
       DoStuff r 
      Next r 
     Else              'single row 
      DoStuff Target 
     End If 
    ElseIf Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then 
     If Target.rows.count > 1 Then        ' multiple items 
      For Each r In Target.rows        ' do stuff for each item 
       DoOtherStuff r 
      Next r 
     Else              'single item 
      DoOtherStuff Target 
     End If 
    End If 
End If 
+0

申し訳ありませんがわかりませんでしたが、ユーザーの切り取りと貼り付けをやめたくないいくつかのコードをカットし、別のシート上のセルを移動する行を挿入するときに実行したい(私はすでにこれを実行していることを知る必要がある) – Liamck27