2017-09-02 70 views
-3

我有一個宏,我試圖寫。我在工作表事件後面有這個宏,如果在單元格D2中沒有應用宏,宏應檢查範圍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'來避免'in-cell editing'。 – Jeeped

+0

@Jeeped我需要爲此編輯代碼以及謝謝 – James

+1

您的代碼與您的敘述沒有任何關係。 – Jeeped

回答

2

忘記Worksheet_BeforeDoubleClick廢話;看起來你想在D列中的每個單元格上運行一個子過程,其中列A,B和C中的單元格不是空白的。

這意味着您應該改用Worksheet_Change。每當某樣東西在列A,B或C更改,使用該行對列運行子過程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 

這是一個簡單的msgbox和時間戳操作,你應該已經能夠在自己的研究在任何一千個地方。

+0

雙重被使用,因爲用戶必須雙擊單元格.-感謝您的幫助和建議。上面的代碼是我的嘗試,我不是先進的VBA開發人員,但我仍然開始 – James

相關問題