2017-03-15 48 views
2

我有一個工作簿,並需要對被切割和插入的行運行宏Excel中,如果選擇切開,然後做的事情

我已經有一個運行的代碼時改變顏色的行更改一個單元格一個單元格在另一個表單中具有相同的值。

該代碼位於worksheet_Change子項中。

我的問題是我如何檢測目標是否被剪切和插入而不是輸入?

編輯**

感謝馬克·菲茨傑拉德,我意識到我需要提供更多的信息。

我有2片之一具有的數據的行以空白行然後爲每個組數據

另一片被設置在列,以便每一列具有的標題信息,然後從每個第一單元的報頭組中的行。

當某人剪切並插入行表中某一組的某些行時,列表中的相關單元將移動到相關列。

行將永遠不會被複制和粘貼,也不會獨立於行移動值。

下面的代碼

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

你能告訴你的現有'Worksheet_Change'代碼?另外,我想我理解你的牀單是如何佈置的,但是希望在兩張牀單的圖像之前和之後都能看到。我認爲你所要求的可能可以做到。 –

+0

我想我幾乎擁有它。您是在Process.xls中監測工作表中的工作表還是單獨的工作簿? –

+0

與之相同的工作簿 – Liamck27

回答

0

我解決這個問題的方法是通過檢查,如果選擇了一整行

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

有3點潛在的方法,但不包括宏,以改變一個單元格的值,而無需實際的細胞鍵入任何:

  1. 拖放來自其他小區在片材上
  2. 複製和其他小區,片甚至工作簿
  3. 剪切粘貼,如果你想從拖放到一個單元格或區域阻止用戶從其他細胞,表或工作簿

粘貼,你可以在紙張激活時禁用該功能。請確保在禁用表單時重新啓用它,因爲它是一個應用程序設置,適用於所有打開的工作簿中的所有工作表。

Private Sub Worksheet_Activate() 
    Application.CellDragAndDrop = False 
End Sub 

Private Sub Worksheet_Deactivate() 
    Application.CellDragAndDrop = True 
End Sub 

當鼠標懸停在非空白單元格邊框上時,您會注意到鼠標指針不會更改爲4個箭頭。我發現一個無證的副作用,禁用CellDragAndDrop也會清除剪貼板,如果您試圖從其他工作表或工作簿中複製某些內容。

爲了防止在工作表內切割和粘貼,您需要在它發生之前通過檢查CutCopyMode(即選區周圍是否有前進的螞蟻)在單元格選擇更改時爲true來捕獲它。

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

對不起,如果我不清楚,但我不想阻止用戶剪切和粘貼,我想要在切割和插入將單元格移動到另一個工作表上的行時運行一些代碼(我已經擁有了代碼,因此我只需要知道何時運行它) – Liamck27

相關問題