2017-09-29 6 views
0

私は、マーコを介して反対に(情報を入力することによって)手作業で修正された細胞を強調することが可能であれば、少し研究してきました。私が本当に出会ったことは、このような状況では適用されない場合がありますトラックの変更ハイライトセルは手動で変更され、マクロでは実行されません。

シナリオ

私は特定のセルがダブルクリックされるたびに実行されるマクロを持っていました。セルがダブルクリックされるとタイムスタンプが提供されますが、これは完全に問題ありません。私は状況をaviodしようとしています

問題は、ユーザーが手動でタイムスタンプを修正しようとし、またはその関連するセル内の情報のいずれかでした。私は一度更新すると細胞をロックする方法を使うことを試みています。

達成すべき解決策。

ユーザーがセルを手動で更新して強調表示している可能性はありますか?しかし、マクロの使用によって更新されている場合は、それは大丈夫です。

コード

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 

    Application.EnableEvents = False 

    With Target 
     If .Column = 4 Then 
      Select Case .Row 
       Case 20, 24, 25, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 40, 42, 43, 44, 54, 55, 56, 58, 59, 61, 62, 63, 64, 65 

        .Value2 = "Prepared By" & " " & Environ("Username") 
        .Value2 = .Value2 & " " & Format(Now, "yyyy-MM-dd hh:mm:ss") 

        End Select 
        End If 
    End With 
+0

なぜこれらのセルを保護しないのですか? – FunThomas

+0

おそらく、マクロが調整するが、手動調整ではないパブリックブール変数をフラグとして使用します。このイベントは、このフラグをチェックして別の動作をすることができます。 – Zerk

+0

@FunThomas私はページ上にある署名行をロックするので、私は保護セルを使用していません – James

答えて

0

これに対する最も簡単な解決策は、単に変更イベントを使用して、選択したセルへの変更を強制されるでしょう。私は、ダブルクリックのアスペクトは、入力をよりユーザーフレンドリーにすることを前提としているので、それを削除せず、重複しないようにしてください:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
With Target 
    If .Column = 4 Then 
     Select Case .Row 
      Case 20, 24, 25, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 40, 42, 43, 44, 54, 55, 56, 58, 59, 61, 62, 63, 64, 65 
       .Value2 = "Prepared By" & " " & Environ("Username") & " " & Format(Now, "yyyy-MM-dd hh:mm:ss") 
     End Select 
    End If 
End With 
End Sub 
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim cell As Range 
If Target.Cells.Count = 1 Then 
    With Target 
     If .Column = 4 Then 
      Select Case .Row 
       Case 20, 24, 25, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 40, 42, 43, 44, 54, 55, 56, 58, 59, 61, 62, 63, 64, 65 
        .Value2 = "Prepared By" & " " & Environ("Username") & " " & Format(Now, "yyyy-MM-dd hh:mm:ss") 
      End Select 
     End If 
    End With 
Else 
    For Each cell In Target.Cells 
    With cell 
     If .Column = 4 Then 
      Select Case .Row 
       Case 20, 24, 25, 27, 28, 30, 31, 32, 33, 34, 35, 37, 38, 40, 42, 43, 44, 54, 55, 56, 58, 59, 61, 62, 63, 64, 65 
        .Value2 = "Prepared By" & " " & Environ("Username") & " " & Format(Now, "yyyy-MM-dd hh:mm:ss") 
      End Select 
     End If 
    End With 
    Next cell 
End If 
End Sub 
関連する問題