我面临着excel宏语法的复杂化。 我的工作簿包含几张,第一张标题为“参考表”。 其他工作表中有一些条目我不希望用户通过他们当前正在处理的工作表进行编辑,只能通过参考表进行编辑。
我锁定了单元格并使用了保护表,但是我希望用户在双击相关范围中的一个单元格时收到提示消息,询问他们是否要更改所选单元格但在参考中片。
我的目标是在参考表中选择的当前工作表中选择相同的单元格,以便能够对其进行编辑。
我在相应的表单VB中发布了以下代码,但显然在最后的Cells属性中存在错误 - >单元格(val1,val2)。选择
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("C2:C5,E2")) Is Nothing Then
Else
Dim Msg As String, Title As String
Dim Config As Integer, Ans As Integer
Msg = "Do not modify this entry from the current sheet."
Msg = Msg & vbNewLine
Msg = Msg & "This modification is only enabled in the Reference Sheet."
Msg = Msg & vbNewLine
Msg = Msg & "Would you like to go to the corresponding cell and modify it?"
Title = "Attention"
Config = vbYesNo + vbExclamation
Ans = MsgBox(Msg, Config, Title)
If Ans = vbYes Then
Dim val1 As Integer, val2 As Integer
val1 = ActiveCell.Row
val2 = ActiveCell.Column
Worksheets("Reference Sheet").Activate
Cells(val1, val2).Select
End If
End If
End Sub
非常感谢您的想法。
答案 0 :(得分:1)
您的代码失败的原因是Worksheet
模块中的非限定范围引用(在您的情况下为Cells(val1, val2)
)是指工作表模块,而不是 Active 工作表。由于您刚刚激活了另一个工作表,因此您尝试在非活动工作表上选择一个单元格,这会导致错误。
更好的方法是
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("C2:C5,E2")) Is Nothing Then
Else
Dim Msg As String, Title As String
Dim Config As Long, Ans As VbMsgBoxResult
Msg = "Do not modify this entry from the current sheet."
Msg = Msg & vbNewLine
Msg = Msg & "This modification is only enabled in the Reference Sheet."
Msg = Msg & vbNewLine
Msg = Msg & "Would you like to go to the corresponding cell and modify it?"
Title = "Attention"
Config = vbYesNo + vbExclamation
Ans = MsgBox(Msg, Config, Title)
If Ans = vbYes Then
With Worksheets("Reference Sheet")
.Activate
.Range(Target.Address).Select
End With
End If
End If
End Sub