2012-03-14 12 views
0

worksheet1を貼り付けました。列に注目してください。監視されるものはヘッダの説明と健康管理の下にあります。列変更の変更が発生すると、Sが挿入されます。たとえば、Spectacle FrameがSpec Frameに変更された場合、変更の下にSを挿入します。変更列は元の空です。 Healthmanの場合、価格が変更されるとPがChangeカラムに挿入されます。製品を削除する、すなわち行を削除する場合、変更の下にXが挿入されます。なぜなら、私は隠されたシートが更新された理由は、セルによって隠されたシートセルと比較していたからです。私はそれが動作していないとあなたのレビューのためにシートを貼り付けることを考えて、前のコードを試してみました。
凡例:P =価格変更
N = NEW X = DELETED S = DESCRIPTION
コードの変更内容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イベントを使用することができます。例えば、thisおよびthatを参照してください。 Workseetに追加する

サンプルコード - あなたが別のセルを変更するときに変更されたセルがA1であればA3は、自動的に特定の動作で、変更されます。

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

5

Worksheet_Changeで作業しているときには、2つのことを確認する必要があります。

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

+1のEnableEventsは、私のひどいハックよりもはるかに優れています... – assylias

+0

http://wikisend.com/download/899026/sample.xlsm – Sithelo

+0

私はあなたが何をしようとしているのか見ています。私が与えたコードは動作しますが、あなたのニーズに合わせて修正する必要があります。あなたがアップロードしたファイルには、私が与えたコードはありません。上記のコードを使用して必要な変更を加えなければなりません。一度やり直してからファイルをアップロードして、コードを理解できることを確認してください。また、これは長すぎます。リンクがある投稿を除いて上記のコメントをすべて削除できますか?そして、私も同じことをします –

関連する問題