2017-09-02 14 views
-3

私はマクロを書いています。私はこのマクロの背後にワークシートイベントを持っています。マクロは範囲A2、B2、C2が空でないかどうかをチェックする必要があります。これは、次の行A3、B3、C3に適用され、マクロをD3に適用する必要があります。コードは、私は上記のようにそれを望むように実行されていないマクロは、セルセルが空でないかどうかを確認するVBA - Lastrowに

問題にダブルクリックして適用されます。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 
    With Target 
     If .Column = 4 Then 
     Select Case .Row 
       Case 1, 2, 3, 4, 5, 6 
Dim CheckCell As Range 

    For Each CheckCell In Sheets("Dates").Range("A1,B2,C2").Cells 
     If Len(Trim(CheckCell.Value)) = 0 Then 
      CheckCell.Select 
      MsgBox "Cell " & CheckCell.Address(0, 0) & " is empty. Click OK and populate it.", , "Missing Information" 
      Exit Sub 
     End If 
    Next CheckCell 

     .Value2 = "Prepared By" & " " & Environ("Username") 

    End Select 
        End If 
    End With 
End Sub 
+0

'セル内編集'を避けるために、 'cancel = true'を設定していません。 – Jeeped

+0

@Jeepedそのコードを編集する必要があります。 – James

+1

あなたのコードにはあなたの物語とは関係ない**何も**ありません。 – Jeeped

答えて

2

「Worksheet_BeforeDoubleClickナンセンス」は忘れてください。列A、B、Cのセルが空白でない列Dのすべてのセルに対して、サブプロシージャを実行すると思われます。

つまり、代わりにWorksheet_Changeを使用する必要があります。いつでも何かの列A、BまたはCに変更されます、列にSubプロシージャを実行するには、その行を使用D.

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Not Intersect(Target, Range("A:C"), Target.Parent.UsedRange) Is Nothing Then 
     On Error GoTo safe_exit 
     Application.EnableEvents = False 
     Dim trg As Range, trgD As Range 
     For Each trg In Intersect(Target, Range("A:C"), Target.Parent.UsedRange) 
      If CBool(Application.CountA(Cells(trg.Row, "A").Resize(1, 3))) Then 
       Set trgD = Cells(trg.Row, "D") 
       MsgBox trgD.Address(False, False) 
       trgD = Now 
      End If 
     Next trg 
    End If 

safe_exit: 
    Application.EnableEvents = True 
End Sub 

これは、あなた自身の研究することができたはずですシンプルなメッセージボックスとタイムスタンプの操作です何千もの場所で

+0

ユーザーがセルをダブルクリックしなければならないため、ダブルが使用されていました.-あなたの助けと助言に感謝します。上記のコードは私の試みでしたが、私は高度なVBA開発者ではありませんが、まだ始まっています – James

関連する問題