如何通过双击动态范围的单元格中的任何位置来打开用户窗体?

时间:2014-06-19 17:24:32

标签: vba excel-vba excel

我要做的是打开一个用户表单(称为UserForm1),通过双击该行中的任何单元格,将活动单元各自行中的数据填充到组合框/文本框中。这也是带有密码的受保护工作表。

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

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

以下是我尝试过但失败的代码。我知道可能有更合理的方法来做到这一点,但我没有成功找到它/在网上找到它。

此代码已放置在私人工作表区域中:

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

1 个答案:

答案 0 :(得分:1)

我认为这会引发错误,你的作业声明是倒退的。您将对象分配给变量,如Rng,而不是相反。

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

此外,Target.Address只会是一个单细胞范围,因此您无法进行等效测试:

If Target.Address = Rng Then 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

我已经确认这是在我的Google云端硬盘here上公开提供的示例工作簿中。双击黄色突出显示的单元格的任何,用户表单应显示为:

enter image description here