2015-04-01 46 views
1

我有一個(簡化示例)由輸入和警報組成的矩陣。每個動作(X)應具有一個輸入和一個報警即不行動應在6強制粘貼值以遵守數據驗證規則

我使用的數據驗證,以實現此塔E或行被插入和它的工作原理。

然而,如果我粘貼到這些細胞中,它們不遵守驗證規則的數據。我插入這個VBA代碼以防止這種(來自www.j-walk.com/ss/excel/tips/tip98.htm萃取):

Private Sub Worksheet_Change(ByVal Target As Range) 
    'Does the validation range still have validation? 
    If HasValidation(Range("ValidationRange")) Then 
     Exit Sub 
    Else 
     Application.EnableEvents = False 
     Application.Undo 
     MsgBox "Your last operation was canceled." & _ 
     " It would have deleted data validation rules.", vbCritical 
    End If 
End Sub 

Private Function HasValidation(r) As Boolean 
' Returns True if every cell in Range r uses Data Validation 
    On Error Resume Next 
    x = r.Validation.Type 
    If Err.Number = 0 Then HasValidation = True Else HasValidation = False 
End Function 

然而,該代碼也防止了粘貼到細胞值甚至當他們不打破驗證規則例如如果我粘貼一個X來輸入;警報1,我收到一條錯誤消息。有沒有什麼方法可以防止值僅在違反驗證規則時才被粘貼?

編輯:

我已經改變了代碼:

Private Sub Worksheet_Change(ByVal Target As Range) 

With Range("D4:H8").Validation 
     .Delete 
     .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:="=OR(ISBLANK(D4),AND(NOT(ISBLANK($C4)),NOT(ISBLANK(D$3))))" 
     .IgnoreBlank = False 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "Stop" 
     .InputMessage = "" 
     .ErrorMessage = "Actions Must Have Input and Output" 
     .ShowInput = True 
     .ShowError = True 
    End With 

Me.CircleInvalid 

Count = 0 
Dim shp As Shape 
For Each shp In ActiveSheet.Shapes 
    If Not Intersect(shp.TopLeftCell, Range("D4:H8")) Is Nothing Then Count = Count + 1 
Next 

If Count > 0 Then 
MsgBox "Actions Must Have Input and Output" 
End If 

End Sub 

現在這圈子無效細胞,如果發現產生味精盒。這是基於無效圓是形狀的事實而完成的。我可以通過搜索整個工作表來獲取代碼,但我試圖將搜索範圍縮小到指定的範圍。但是,由於shp.TopLeftCell,我得到錯誤「1004 - 應用程序定義或對象定義的錯誤」。有任何想法嗎?

+0

有太多的答案需要解決這個問題。 J-Walk的代碼是防止單元格粘貼到數據驗證範圍的具體示例。你是否重新進行驗證並檢查整個範圍內的無效條目;定義複製範圍然後測試它;顯示消息或突出顯示無效單元格;在允許用戶編輯並替換它們的表單中列出無效單元格? – 2015-04-01 09:52:20

+0

第一或第三條建議是我正在尋找的。我希望讓用戶知道他粘貼的數據是否違反了數據驗證規則。這可以通過錯誤/警告消息或突出顯示無效單元格,無論哪個可能。 – oliveirano25 2015-04-01 10:02:43

+0

你將不得不嘗試它,當你遇到你無法解決的事情時回來。 SO不是代碼寫入服務。我會幫助你在正確的方向,但只有到目前爲止。 – 2015-04-01 10:06:50

回答

0

決定不下去形狀的路線,而是搜索驗證值:

Dim Cell As Range 
For Each Cell In Range("D4:H8") 
    If Not Cell.Validation.Value Then 
     MsgBox "Actions Should Have Input and Output" 
     Exit Sub 
    End If 
Next 
-1

嘗試做一個特殊的粘貼;普通的粘貼覆蓋單元格的格式屬性。

+1

這個想法是爲沒有VBA知識或數據驗證的人按照自己的意願進行復制和粘貼而被告知他們正在違反規則。 – oliveirano25 2015-04-02 09:02:12

-1

而是單擊該單元格,打糊,單擊單元格並粘貼數據代入公式欄的頂部Excel中。然後按回車。這使我可以從剪貼板粘貼文本,但保留數據驗證。

我只用excel和外部來源的文本和數字來測試它,從來沒有使用高級公式等,所以它可能無法滿足所有需求。

這是每貼一個額外的步驟,但它爲我在需要檢查字符數的特定項目上節省了大量時間。