2014-01-20 111 views
-1

我在Excel 2012中創建了一個用戶表單,當用戶雙擊特定範圍的單元格時,用戶窗體彈出。如何確定在Excel VBA中是否選擇了一個範圍 - 多個範圍

這可以通過在特定頁面模塊中運行以下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當用戶單擊工作表中的不同部分條件,使這將顯示一系列的表單的功能

你知道如何啓用if語句來檢查是否單擊了不同的範圍,並且爲每個範圍顯示不同的用戶表單?

感謝

+1

爲什麼不是ElseIF? –

+0

我想你可能會在下面找到你的答案。 –

+0

@BernardSaucier:那是對我的評論? :) –

回答

1
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 
ElseIf Not Intersect(Target, Range("B1:B10")) Is Nothing Then 
     'condition to run when not clicked in range 
    Cancel = True 
     'condition to run if cell in range was clicked 
    userform2.show 
End If 
End Sub 
+0

我喜歡這個解決方案,因爲每個條件都會特別引發一個取消事件,從而迫使excel將beforeDoubleClick事件返回到取消狀態 - 如果未取消調用,Excel雙擊功能將在其他單元格中受到影響。 (如果這是有道理的) – Hightower

0

您可以在Intersect參數的多個範圍,然後測試Column看到單擊了哪個範圍。一個例子:

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 
0

就像我在評論中提到的爲什麼不是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 
0

沒有太多需求,在你的代碼進行修改,以達到你想要什麼。

試試這個!

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 
0

溶液(S)是按照問題的所有正確的,但是,基於的事實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