2017-03-18 88 views
0

所以我想要啓動一個用戶表單,如果一個人選擇了一個有關聯的列表框的單元格,我該如何檢測它?如何檢查一個單元格是否有列表框

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
      'Check if Target cell has listbox? 
End Sub 
+2

你說的'ListBox'是什麼意思?自動完成列表框?數據驗證ListBox?或者你在考慮一個目前覆蓋單元格的表單控件列表框?或者,也許有一個ActiveX控件列表框,它具有(當前)單元格的大小並覆蓋一個或多個單元格?如果你正在談論後者,那麼你應該瀏覽'ListBoxes'集合,看看哪一個在'.TopLeft'角落有你的單元格:https:// msdn.microsoft.com/en-us/library/microsoft。 office.tools.excel.controls.listbox.topleftcell.aspx?cs-save-lang = 1&cs-lang = vb#code-snippet-1 – Ralph

+0

Data Vallidation listbox – Rohan

+0

通過本文,您可以驗證是否存在數據驗證爲您的單元格:http://stackoverflow.com/questions/18642930/determine-if-cell-contains-data-validation與本文可以讀取數據驗證規則/列表:http://stackoverflow.com/questions/18893436/excel-vba-read-validation-list-into-variable – Ralph

回答

1

,你可以使用此功能:

Function HasValidation(rng As Range) As Boolean 
    Dim validationType As Long 

    validationType = -1 
    On Error Resume Next 
    validationType = rng.Validation.Type 
    HasValidation = validationType >= 0 
End Function 

,並利用它在你的事件處理程序:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

    If HasValidation(Target) Then 
     ... your code 
    End If 
End Sub 
+0

當Target不止一個單元格時會發生什麼?爲什麼如果你檢索'ActiveCell.Validation.Type',爲了將'rng'傳入函數? Worksheet_Change上的活動單元格通常不是目標下的一行嗎? – Jeeped

+0

@Jeeped,你對多單元目標問題是正確的,但我會留給OP找到適當的處理。 'ActiveCell'是我即時窗口測試中的錯字...我將編輯代碼以將其刪除。事件處理程序是一個'SelectionChange'雖然...謝謝 – user3598756

+1

你是對的 - 當然是Worksheet_SelectionChange而不是Worksheet_Change。在這種情況下,Target.Cells(1,1)應該處理任何多項選擇。 – Jeeped

相關問題