如何确定是否在Excel VBA中选择了一个范围-多个范围
我在Excel 2012中创建了一个userform,当用户双击特定范围的单元格时,userform会弹出 这可以通过在特定页面模块中运行以下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
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