2017-04-06 47 views
0

我正在使用以下代碼在用戶表格中選擇單元格時打開一個用戶窗體,其中每個表格有一行中有多個表格的30行。我將不得不一次寫100多行。在選擇表格中的任何單元格後打開用戶窗體

我知道這不是一個有效的方法。如何讓這段代碼更簡單,更短,而不影響功能?

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

If Target.Address = "$D$31:$E$31" Then 
Open_Text_Form 
End If 

If Target.Address = "$D$32:$E$32" Then 
Open_Text_Form 
End If 

If Target.Address = "$D$33:$E$33" Then 
Open_Text_Form 
End If 

If Target.Address = "$D$34:$E$34" Then 
Open_Text_Form 
End If 

If Target.Address = "$D$35:$E$35" Then 
Open_Text_Form 
End If 

If Target.Address = "$D$36:$E$36" Then 
Open_Text_Form 
End If 

If Target.Address = "$D$37:$E$37" Then 
Open_Text_Form 
End If 

End Sub 
+1

堆棧概述題爲一段代碼審查將是效率工作的最佳場所。 http://codereview.stackexchange.com/ – Cyril

回答

0

您可以使用Intersect函數來查找範圍(單元格)是否在給定範圍內。不知道如何在表單中設置數據,我不能說最好的檢查方法是什麼。如果工作表中的多個「表格」實際上是Excel表格,則可以執行此類操作,以檢查它是否已在其中一個表格中單擊。

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

Dim tableRange As Range 

For i = 1 To ListObjects.Count 

    If i = 1 Then 
     Set tableRange = ListObjects(i).DataBodyRange 
    Else 
     Set tableRange = Application.Union(tableRange, ListObjects(i).DataBodyRange) 
    End If 

Next 

If tableRange Is Nothing Then Exit Sub 

If Not Application.Intersect(Target, tableRange) Is Nothing Then 
    Open_Text_Form 
End If 

End Sub 

但是,如果在你的手冊中的「表」只是正常的數據範圍,你可以在一個名爲範圍定義它們,所有你需要做的是

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

If Not Application.Intersect(Target, Range("MyNamedRange")) Is Nothing Then 
    Open_Text_Form 
End If 

End Sub 
+0

親愛的Wedge,巨大的擁抱和非常感謝您的幫助,是的,您的第二個建議的解決方案爲我工作,並將整個35行代碼轉換爲2-3行!是的,這正是我所要求的!非常感謝,並且非常感謝! – user7828601

相關問題