在另一个工作表中选择当前活动的单元格

时间:2014-11-14 08:42:45

标签: excel excel-vba vba

我面临着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

非常感谢您的想法。

1 个答案:

答案 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