双击时避免在表单中select

在Excel 2007中,我有一个macros,当双击一个单元格,一个表单将打开。

当相关的单元格位于表单将出现的范围内时,将在表单中执行不希望的select。

我怎样才能避免这个select?


从barrowc回答的hammejdpbuild议编辑:

我使用这个(即BeforeDoubleClick事件)已经但没有解决问题

Private Sub Workbook_SheetBeforeDoubleClick(ByVal sh As Object, ByVal target As Range, cancel As Boolean) Call s_Click_DoubleClick(sh, target, cancel) End Sub Private Sub Workbook_SheetBeforeRightClick(ByVal sh As Object, ByVal target As Range, cancel As Boolean) Call s_Click_DoubleClick(sh, target, cancel) End Sub Private Sub s_Click_DoubleClick(sh, target, cancel) Application.ScreenUpdating = False If sh.Name <> "Legende" Then cancel = True ' Maak gebruik van een range vRowCount = target.Rows.Count vColumnCount = target.Columns.Count f_Input.TextBox1.Value = vColumnCount 

如果您正在使用BeforeDoubleClick事件,请尝试在事件处理程序中将“ Cancel设置为“True”

设置取消= True不能解决问题。 若要复制该错误,请使用列表框创build一个用户窗体,并将列表框行源设置为单元格范围。 在工作表的BeforeDoubleClick事件中,插入代码以启动表单(例如frmMyform.Show)。 现在双击工作表中心的某个地方,窗体将出现在屏幕上的区域。 会发生什么情况是您双击的第二次点击将被解释为试图在表单上进行select。

这是复制问题的另一种方法。 按照上述步骤操作,但在双击HOLD DOWN第二次单击时。 正如你将看到的,你的用户表单出现之前,你甚至发布第二次点击双击。 在按住鼠标的同时,可以拖动鼠标,看到放开第二次单击时,鼠标实际上会select鼠标指针所在列表框中的项目。

总而言之,海报的意图是双击单元格将启动一个表单。 其效果是它确实启动了窗体,但也解释了双击中的第二次点击以及该窗体上的单击。 设置取消= True不能解决问题。

设置取消= True将不起作用。 以下是一些可以解决问题的代码。 这不是很漂亮,但它的工作原理。 首先,当用户窗体初始化时禁用ListBox:

 Private Sub UserForm_Initialize() Me.listMyList.Enabled = False End Sub 

这将防止BeforeDoubleClick事件中的第二次单击被解释为用户表单上的列表框中的select(或者说,由于控件未启用,它将阻止第二次单击被解释的能力)。 接下来,启用用户窗体的MouseDown事件上的ListBox:

 Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Me.listMyList.Enabled = True End Sub 

这不是很漂亮,但它的工作原理。

到目前为止,我发现的最好的解决scheme是在表单代码的初始化例程中join一个小小的延迟,例如:

Private Sub UserForm_Initialize()

Application.Wait(现在+#12:00:01 AM#)

结束小组

时间的最小增量似乎是1秒。 如果有人有一个更清洁的解决scheme或能够减less延迟不到1秒,请分享。 请注意,“睡眠”function在这里无法阻止窗体单击(公共声明子睡眠库“kernel32”(ByVal dwMilliseconds As Long))。