2012-03-14 227 views
0

我粘貼了工作表1。注意列。要監視的那個是標題描述和Healthman。一旦在列下發生更改,就會插入一個S。例如,Spectacle Frame更改爲Spec Frame,我們在Change下插入S.更改列是空的。在Healthman下面,當價格變化時,在變更欄中插入一個P.當要刪除產品時,即刪除行時,將在更改下插入X.當插入一行時,因爲我正在與一個隱藏表格單元格進行比較,這就是隱藏表格被更新的原因。我嘗試了以前的代碼,它不工作,並認爲粘貼表單進行審查。
圖例:P =價格漲跌
N = NEW X = DELETED S =說明
代碼變更說明HEALTHMANExcel單元格值的更改會在另一個單元格中插入「S」

40501  Spectacle Frame    
    40609  Sunglasses    
    40525 S Ready Made Optical    
    41008  Spectacle Case    
    43025 P Transfer - Zyl or Metal Frame 198.00   
    43126 P Transfer - Nylon Supra Frame 314.00   
    43136 P Transfer - Rimless Frame 359.00  

回答

0

可以使用Worksheet_Change事件。例如參見thisthat。 -

示例代碼添加到Workseet A3將自動當你改變另一個細胞如果改變細胞是A1改變,與特定行爲:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = Range("A1").Address Then 
     Range("A3") = "You changed A1" 
    ElseIf Target.Address <> Range("A3").Address Then 'to prevent a change of A3 to trigger an update 
     Range("A3") = "You changed another cell" 
    End If 
End Sub 
+0

我注意到,如果我只需單擊單元格,而不在它改變值或文本,它在下一個單元格中插入一個值「S」。有沒有一種方法可以將原始值保存或存儲在隱藏的工作表中,並將其與單元格出口處的單元格值進行比較。這樣我就可以從鼠標點擊中區分出真正的變化。 – Sithelo 2012-03-15 07:09:56

5

雖然與Worksheet_Change工作,你必須確保兩件事。

1)相應的錯誤處理是必須的

2)關閉.EnableEvents以避免無限循環的可能性。

的假設

1)要捕獲更改單元格A1

2)你想在A2顯示 「S」

所以,請更改爲適用於下面的代碼。

CODE

Private Sub Worksheet_Change(ByVal Target As Range) 
    On Error GoTo Whoa 

    If Not Intersect(Target, Range("A1")) Is Nothing Then 
     Application.EnableEvents = False 
     Range("A2").Value = "S" 
    End If 

LetsContinue: 
    Application.EnableEvents = True 
    Exit Sub 
Whoa: 
    MsgBox Err.Description 
    Resume LetsContinue 
End Sub 

隨訪

這是你想什麼呢?

這發生在「ThisWorkbook」代碼區域。

Private Sub Workbook_Open() 
    Dim hiddenSheet As Worksheet 

    Set hiddenSheet = Me.Worksheets.Add 
    hiddenSheet.Visible = xlSheetVeryHidden 

    On Error Resume Next 
    Application.DisplayAlerts = False 
    Sheets("HiddenSheet").Delete 
    Application.DisplayAlerts = True 
    On Error GoTo 0 

    hiddenSheet.Name = "HiddenSheet" 

    Sheet1.Range("A1:D15").Copy hiddenSheet.Range("A1:D15") 
End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    On Error Resume Next 
    Application.DisplayAlerts = False 
    Sheets("HiddenSheet").Delete 
    Application.DisplayAlerts = True 
    On Error GoTo 0 
End Sub 

和這正好在相關工作表區域

Private Sub Worksheet_Change(ByVal Target As Range) 
    On Error GoTo Whoa 

    If Not Intersect(Target, Range("A1:D15")) Is Nothing Then 
     Dim old_value 

     Application.EnableEvents = False 

     old_value = Sheets("HiddenSheet").Range(Target.Address).Value 

     If Target.Value <> old_value Then 
      '~~> Change 1 to whatever offset that you want. 
      Target.Offset(0, 1).Value = "S" 
     End If 
    End If 

LetsContinue: 
    Application.EnableEvents = True 
    Exit Sub 
Whoa: 
    MsgBox Err.Description 
    Resume LetsContinue 
End Sub 

HTH

希德

+0

EnableEvents的+1,比我的糟糕的黑客好得多... – assylias 2012-03-14 14:47:36

+0

http://wikisend.com/download/899026/sample.xlsm – Sithelo 2012-03-19 12:58:46

+0

我明白你想要做什麼。我提供的代碼將可用,但您必須對其進行修改以滿足您的需求。您上傳的文件沒有我提供的代碼。您必須使用上述代碼並進行必要的更改。一旦完成,然後重新上傳文件,以便我可以看到你理解代碼。這也是太長了。你可以刪除上面的所有評論,除​​了有鏈接的帖子嗎?我會做同樣的 – 2012-03-19 13:07:47

相關問題