0
如何使用VBA創建G1只讀,如果某範圍內的任何單元格表示爲A4:E50有值?我的目的是在用戶填入區域A4:E50中的任何單元格後立即禁用G1中的選項,該選項是一個下拉列表。如果用戶刪除範圍內的所有值,那麼只有在G1中的選項可用。我如何實現這一目標?使用VBA渲染包含下拉列表的單元格,只讀範圍有值時爲只讀
如何使用VBA創建G1只讀,如果某範圍內的任何單元格表示爲A4:E50有值?我的目的是在用戶填入區域A4:E50中的任何單元格後立即禁用G1中的選項,該選項是一個下拉列表。如果用戶刪除範圍內的所有值,那麼只有在G1中的選項可用。我如何實現這一目標?使用VBA渲染包含下拉列表的單元格,只讀範圍有值時爲只讀
這是一個快速解決方案,我只是想出了...不漂亮,但它會做的伎倆:
首先運行該宏只有一次:
Sub LockOneTime()
ActiveSheet.Cells.Locked = False
ActiveSheet.Range("G1").Locked = True
End Sub
然後把這個工作表代碼:
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.WorksheetFunction.CountA(Range("A1:E40")) > 0 Then
ActiveSheet.Protect contents:=True
Else
ActiveSheet.Protect contents:=False
End If
End Sub
這是一個快速和骯髒的方式來獲得你希望達到什麼樣的...
編輯基於其他細胞被鎖定:
給您不能使用工作表保護avhieve你的目標,只要把你的工作表的代碼模塊中的代碼(您不再需要第一LockOneTime
宏):
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, Range("G1")) Is Nothing) Then
If Application.WorksheetFunction.CountA(Range("A4:E50")) > 0 Then
Application.EnableEvents = False
MsgBox "You cannot change the value in cell G1"
Application.Undo
Application.EnableEvents = True
End If
End If
End Sub
這不會讓細胞G1
發生變化,但它的缺點是,假設你改變了很多細胞而G1是其中之一,它不會讓任何變化發生......在換句話說,如果G1是被改變的單元之一,那麼沒有一個單元將被允許改變。
希望這可以由你,否則,代碼變得更復雜一點,涉及....
我在哪裏放置LockOneTime子?我將把Worksheet_Change子放在「thisWorkbook」部分。 –
在VBA中添加一個新模塊,並將'LockOneTime'放在那裏,然後運行它,然後你就可以擺脫它(或者只是手動解鎖表格中除'G1之外的所有單元格) - 另一個子模塊放入代碼模塊爲這張紙 - 不是工作簿! –
太好了,謝謝哥們。現在嘗試... –