Vba 如何通过双击动态单元格区域中的任意位置来打开userform?

Vba 如何通过双击动态单元格区域中的任意位置来打开userform?,vba,excel,Vba,Excel,我试图做的是通过双击行中的任何单元格,打开一个userform(称为UserForm1),其中包含活动单元格的相应行中已经填充到组合框/文本框中的数据。这也是一个带有密码的受保护工作表 我已经创建了userform,并且通过VBA编辑器的“播放”按钮成功地使用活动行中的数据填充它。但是,我无法通过双击行中的单元格使其工作 其他有用信息:此列表是动态的,将随机添加到其中并缩短,因此它需要找到包含数据的最后一行,并将可单击的范围从第2行(第一行有标题)到包含数据的最后一行 下面是我尝试过但失败的代码

我试图做的是通过双击行中的任何单元格,打开一个userform(称为UserForm1),其中包含活动单元格的相应行中已经填充到组合框/文本框中的数据。这也是一个带有密码的受保护工作表

我已经创建了userform,并且通过VBA编辑器的“播放”按钮成功地使用活动行中的数据填充它。但是,我无法通过双击行中的单元格使其工作

其他有用信息:此列表是动态的,将随机添加到其中并缩短,因此它需要找到包含数据的最后一行,并将可单击的范围从第2行(第一行有标题)到包含数据的最后一行

下面是我尝试过但失败的代码。我知道可能有一种更符合逻辑的方法来做这件事,但我一直没有在网上找到它

此代码已放置在专用图纸区域中:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Sheets("Orders").Protect Password:="maintenance", userinterfaceonly:=True

Dim Lastrow As Integer
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Set Range("A2:K" & Lastrow).Select = Rng

If Target.Address = Rng Then UserForm1.Show

End Sub
**编辑** 为了重申我试图实现的目标:当我双击任何包含数据的行时(可能有2行,可能有50行,这取决于),我需要一个名为UserComment的用户表单弹出,以便用户可以输入注释。我需要它始终找到最后一行数据,并将其全部包含在可单击的范围内。现在发生的一切基本上都是空穴来风。工作表保持锁定状态,但当我双击时,仅当我尝试键入内容时,才显示“此工作表受保护…”。因此,下面的代码可以识别一些东西,但不会弹出userform。我几乎可以肯定,它与下面发布的验证答案完全相同(不包括工作表名称和用户表单名称的更改),但由于某种原因,它不起作用

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Sheets("Open_Orders").Protect Password:="maintenance", userinterfaceonly:=True

Dim Lastrow As Integer
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Set Rng = Range("A2:K" & Lastrow)

If Not Intersect(Target, Rng) Is Nothing Then UserComment.Show

End Sub

我想这会引起一个错误,你的赋值语句是反向的。将对象分配给变量,如
Rng
,而不是相反

设置范围(“A2:K”和最后一行)。选择=Rng

另外,
Target.Address
只会是一个单元格范围,因此不能进行如下等价性测试:

如果Target.Address=Rng,则UserForm1.Show

请尝试以下方法:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Sheets("Orders").Protect Password:="maintenance", userinterfaceonly:=True

Dim Lastrow As Integer
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

Set Rng = Range("A2:K" & Lastrow)

If Not Intersect(Target, Rng) Is Nothing Then UserForm1.Show

End Sub
我已经在谷歌硬盘上公开的示例工作簿中验证了这一点。双击任何突出显示的黄色单元格,用户窗体应显示如下所示:


这会引起错误吗<代码>设置范围(“A2:K”&Lastrow)。选择=Rng当我按下播放按钮/尝试并双击一个单元格时,它会将我带到代码的第三行,并说“下标超出范围”@DavidZemens我已经用我拥有的代码尽我所能编辑了它。当我双击包含数据的单元格(可以随时添加行)时,仍在试图让名为UserComment的userform显示出来。您知道如何在代码中放置断点,然后逐行遍历它吗?在行
Cancel=True
上放置一个断点,然后在范围内双击。VBE将允许您使用F8键逐行遍历代码。您需要检查用于检查不一致性的变量的值。罪魁祸首可能是您的
If Not Intersect
语句的计算结果为
False
,因此没有显示表单。但是您需要找出
Rng.Address
是什么,以及
lastRow
变量的值。编辑:我的工作表名称有一个输入错误。现在它运行了,但除了有时将活动单元格的位置更改为列中的第一个单元格外,什么都没有发生?你的密码?还是我的密码?我的代码中没有任何内容应该更改任何选择。请使用我的代码。我复制并粘贴了它。但我认为这只是改变了选择,当我不小心点击了分隔两个单元格的线。因此,当我双击包含数据的单元格时,不会发生任何情况。但当我双击任何单元格时,无论其中是否包含数据,它都不再告诉我单元格已锁定。之前代码中也没有任何内容“告诉我单元格已锁定”。你为什么期望它现在这样做?