如何确定是否在Excel VBA中选择了一个范围-多个范围

如何确定是否在Excel VBA中选择了一个范围-多个范围,vba,excel,Vba,Excel,我在Excel 2012中创建了一个userform,当用户双击特定范围的单元格时,userform会弹出 这可以通过在特定页面模块中运行以下vba代码来完成 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Not Intersect(Target, Range("A1:A10")) Is Nothing Then 'condition to

我在Excel 2012中创建了一个userform,当用户双击特定范围的单元格时,userform会弹出

这可以通过在特定页面模块中运行以下vba代码来完成

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
            'condition to run when not clicked in range
         Cancel = True
            'condition to run if cell in range was clicked
         userform1.show
    End If
End Sub
这很好用

唯一的问题是,由于您正在检查if-not条件,因此我无法运行许多if条件来启用当用户单击工作表的不同部分时将显示一系列表单的功能

您知道如何启用if语句来检查是否单击了不同的范围,并为每个范围显示不同的用户窗体吗


谢谢

您可以将
参数中的多个范围相交
并测试
以查看单击了哪个范围。例如:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("A1:A10, C1:C10")) Is Nothing Then
        If Target.Column = 1 Then
            useform1.show //Show userform1 if A1:A10 clicked
        ElseIf Target.Column = 3 Then
            useform2.show //Show userform2 if C1:C10 clicked
        End If
    End If
End Sub

就像我在评论中提到的,为什么不是一个
ElseIf

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("A1:A10")) Is Nothing Then

    ElseIf Not Intersect(Target, Range("B1:B10")) Is Nothing Then

    '
    '`~> And So on
    '
    End If
End Sub

代码中不需要太多修改就可以实现您想要的

试试这个

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

    If Not Intersect(Target, Range("A1:A10")) Is Nothing Then

        MsgBox "Column A"

    ElseIf Not Intersect(Target, Range("B1:B10")) Is Nothing Then

        MsgBox "Column B"

    ElseIf Not Intersect(Target, Range("C1:C10")) Is Nothing Then

        MsgBox "Column C"

    End If

End Sub
根据问题,解决方案都是正确的,但是,基于实际为特定列标题调用userdialog这一事实,我决定选择一个案例对我更有效(工作表的扩展不会影响显示的表单)

因此,下面的代码查找特定的列名(其中列是行上的第一条记录),并显示基于该列名的表单

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Check the columName to determine which Form to Show
  Select Case Cells(1, Target.Column)
      Case "Column1"
         UserForm1.Show
      Case "Column2"
        UserForm2.Show
      Case Else
        Cancel = True
  End Select
End Sub

我想你可能会在下面找到答案。@BernardSaucier:这是我的评论吗?:)@悉达多不,这是为了OP;他/她有很多答案可供选择:p我只是希望我们没有误解这个问题,否则答案可能不会在下面。。。呵呵。@SiddharthRout因为某种原因ElseIF没有在2012年工作。。。但是谢谢,现在就看不见答案了。@BernardSaucier:我的,用户2140261的,你的答案是一样的…:)我喜欢这种解决方案,因为每个条件都会专门引发一个cancel事件,从而迫使excel将beforeDoubleClick事件返回到cancel状态——如果不调用cancel,excel双击函数将在其他单元格中受到影响。。(如果有道理的话)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Check the columName to determine which Form to Show
  Select Case Cells(1, Target.Column)
      Case "Column1"
         UserForm1.Show
      Case "Column2"
        UserForm2.Show
      Case Else
        Cancel = True
  End Select
End Sub