【问题标题】:Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) and Range errorWorksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 和 Range 错误
【发布时间】:2012-06-13 12:39:57
【问题描述】:

希望有人可以帮助解决我遇到的 VBA 问题。

当用户双击单元格时,我想更改命名范围的值。有两个工作表,一个是在单元格中包含值的初始工作表,另一个是包含命名范围 Account_Number 的目标工作表。

这是我的代码:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    [Account_Number] = ActiveCell.Value 'assign the value to the Named Range

    Range([Account_Number]).Select ' go to the Named Range on the other worksheet

   'Sheets("Transaction Listing_LINKS").Select 'the workaround to the problem below
End Sub

我期望填充和选择命名范围。

问题是我得到了一个

“1004 错误:对象 '_Worksheet' 的方法 'Range' 失败”

双击单元格时出错。

奇怪的是,如果我只使用一个工作表,它就可以正常工作。

谁能向我解释为什么会发生这种情况以及如何避免它?

我能想到的唯一修复/解决方法是对工作表的选择进行编码以强制它选择它。

谢谢

【问题讨论】:

    标签: excel double-click vba


    【解决方案1】:

    试试:

    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
      'assign the value to the Named Range
      Sheet2.Range("Account_Number").Value = ActiveCell.Value
      ' go to the Named Range on the other worksheet
      Application.GoTo Reference:="Account_Number" 
     'Sheets("Transaction Listing_LINKS").Select 'the workaround to the problem below
    End Sub
    

    当然,您需要将“Sheet2”更改为包含命名范围的目标工作表名称。

    【讨论】:

    • + 1 用于使用Application.GoTo 而不是.Select ;)
    • 感谢您,无需参考工作表即可使用。知道为什么它适用于单个工作表而不是涉及两个工作表时吗?
    • 作为新手能否解释一下 .Goto 优先于 .Select 吗?
    • Select 更笨重且语义更少(为此)。它比较笨拙,因为您需要选择工作表,然后选择范围,而不是一步完成。换句话说,如果您执行Sheet2.Range("A2").Select 并且Sheet2 未处于活动状态,则会出现错误。它更具语义性,因为它清楚地表达了您将用户导航到单元格的意图,而 Select 可用于其他目的。
    • 这很好,但你应该真正解释为什么.Select 不起作用。如果我没记错的话,.Select 仅适用于活动工作表。这就是发生错误的原因,以及如果只有一个工作表时它会起作用的原因。供参考:VBA Excel Select vs Activate
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 2021-08-15
    • 1970-01-01
    • 2019-04-04
    • 2012-12-25
    • 2022-11-07
    • 1970-01-01
    相关资源
    最近更新 更多