[英]Lock/Unlock Cell References Based on Conditional Logic
我正在 Excel 中創建一個報告請求表,它基本上強制請求者在文檔中逐步進行,以確保我們填寫了所有內容。 作為控件,我希望在后續步驟中鎖定輸入,直到當前步驟完成(即,只需將文本放入單元格中)。 我已經在 Excel 的名稱管理器中為每個輸入步驟輸入了名稱。
對於我的生活,我無法讓我的代碼工作。 我什至試圖實現一個 MsgBox 以確保 IF 正常工作,但什么也沒出現。
名稱管理器參考:
目標是讓宏引用 IsRequestDetailsFilled。 如果為“否”,則鎖定 BusinessNeed。 如果是“是”,則解鎖 BusinessNeed。
我的代碼:
Private Sub Is_RequiredRequesterDetails_Filled()
'Dim CurrentWorksheet As Worksheet
Dim IsRequestDetailsFilled As Range
Dim BusinessNeed As Range
'Set CurrentWorksheet = Worksheets("New Report Request")
Set IsRequestDetailsFilled = Range("IsRequestDetailsFilled").Value
Set BusinessNeed = Range("BusinessNeed").Value
If IsRequestDetailsFilled = "No" Then
MsgBox Prompt:="Locked"
'CurrentWorksheet.BusinessNeed.Locked = True
Else
MsgBox Prompt:="Unlocked"
'CurrentWorksheet.BusinessNeed.Locked = False
End If
End Sub
也許我快瘋了,因為我從早上 6 點開始就沒有停止工作,現在是晚上 10 點 30 分……但我似乎無法從谷歌搜索中找到這個答案。 我已經嘗試了幾種替代方法。 我希望代碼可讀,所以理想情況下我想使用我指定的參考名稱。
如果有更好的方法來實現我所說的,也請隨時提出建議。
謝謝!
考慮這段代碼摘錄的邏輯。
Dim IsRequestDetailsFilled As Range
Set IsRequestDetailsFilled = Range("IsRequestDetailsFilled").Value
Range("IsRequestDetailsFilled") 的 value 屬性是一個變體 - 可能是數字或字符串 - 但IsRequestDetailsFilled
是一個范圍。 外觀是您將范圍本身與其值混為一談。 value 屬性只是每個范圍具有的眾多屬性之一,如 Row、Column、Font、Fill 等。 碰巧 Value 屬性是默認值,因此可以省略,這使得它成為無數誤解的根源。
下面是將范圍對象分配給聲明為范圍的變量的正確語法。
Dim IsRequestDetailsFilled As Range
Set IsRequestDetailsFilled = Range("IsRequestDetailsFilled")
在實踐中,您可能不需要那個。 下面的代碼也能正常工作,而且可能更容易閱讀。
Private Sub Is_RequiredRequesterDetails_Filled()
If Range("IsRequestDetailsFilled").Value = "No" Then
MsgBox Prompt:="Locked"
'CurrentWorksheet.BusinessNeed.Locked = True
Else
MsgBox Prompt:="Unlocked"
'CurrentWorksheet.BusinessNeed.Locked = False
End If
End Sub
如果使用工作表的范圍聲明 Range("IsRequestDetailsFilled"),則僅必須指定工作表。 默認情況下,Excel 將創建具有工作簿范圍范圍的命名區域。 您可以在名稱管理器中檢查和設置范圍。 如果名稱是使用工作簿范圍的范圍創建的,則 VBA 將在工作簿中的任何位置找到它,您無需在代碼中提及該選項卡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.