我要做的是打开一个用户表单(称为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
答案 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上公开提供的示例工作簿中。双击黄色突出显示的单元格的任何,用户表单应显示为: