Excel 基于条件逻辑的单元引用锁定/解锁
我正在用Excel创建一个报告请求表单,它基本上迫使请求者在文档中一步一步地进行,以确保我们已经填写了所有内容。作为一个控件,我希望在后续步骤中锁定输入,直到当前步骤完成(即,只需将文本放入单元格)。我已经在Excel中的名称管理器中输入了每个输入步骤的名称 为了我的生命,我不能让我的代码工作。我甚至刚刚尝试实现一个MsgBox,以确保IF正常工作,但什么也没有出现 名称管理器引用:Excel 基于条件逻辑的单元引用锁定/解锁,excel,vba,Excel,Vba,我正在用Excel创建一个报告请求表单,它基本上迫使请求者在文档中一步一步地进行,以确保我们已经填写了所有内容。作为一个控件,我希望在后续步骤中锁定输入,直到当前步骤完成(即,只需将文本放入单元格)。我已经在Excel中的名称管理器中输入了每个输入步骤的名称 为了我的生命,我不能让我的代码工作。我甚至刚刚尝试实现一个MsgBox,以确保IF正常工作,但什么也没有出现 名称管理器引用: 单元格参考IsRequestDetails填充=单元格O2。这个单元格有一个公式,它的逻辑将简单地表示“是”或
- 单元格参考IsRequestDetails填充=单元格O2。这个单元格有一个公式,它的逻辑将简单地表示“是”或“否”
- 单元格引用业务需求=合并单元格B13:F16
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的value属性(“IsRequestDetailsFilled”)是一个变量-可能是数字或字符串-但IsRequestDetailsFilled
是一个范围。其外观是将范围本身与其值混为一谈。value属性只是每个范围中的许多属性之一,如行、列、字体、填充等。碰巧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
如果使用工作表的作用域声明范围(“IsRequestDetailsFilled”),则只需指定工作表。默认情况下,Excel将创建具有工作簿范围的命名范围。您可以在名称管理器中检查和设置范围。如果名称是使用工作簿创建的,则VBA将在工作簿中的任何位置找到该名称,您无需在代码中提及该选项卡。删除
.Value
:Set IsRequestDetailsFilled=Range(“IsRequestDetailsFilled”)
和Set BusinessNeed=Range(“BusinessNeed”)
。最好在范围之前指定工作簿/工作表。