簡體   English   中英

基於條件邏輯的鎖定/解鎖單元格引用

[英]Lock/Unlock Cell References Based on Conditional Logic

我正在 Excel 中創建一個報告請求表,它基本上強制請求者在文檔中逐步進行,以確保我們填寫了所有內容。 作為控件,我希望在后續步驟中鎖定輸入,直到當前步驟完成(即,只需將文本放入單元格中)。 我已經在 Excel 的名稱管理器中為每個輸入步驟輸入了名稱。

對於生活,我無法讓我的代碼工作。 我什至試圖實現一個 MsgBox 以確保 IF 正常工作,但什么也沒出現。

名稱管理器參考:

  • 單元格引用 IsRequestDetailsFilled = 單元格 O2。 該單元格具有公式,其邏輯將簡單地說明“是”或“否”。
  • 單元格參考 BusinessNeed = 合並單元格 B13:F16

目標是讓宏引用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM