选择excel表格(非工作表)上带VBA的所有行

选择excel表格(非工作表)上带VBA的所有行,vba,excel,Vba,Excel,我有一个连接到DB的表,我想做的是当用户单击该表中的单元格时:它选择表中的所有行。这是我的代码副本: Private Sub Worksheet_SelectionChange(ByVal Target As Range) If inTabRange(ActiveCell) Then ActiveSheet.ListObjects("tabRecherche").ListRows(ActiveCell.row).Range.Select Else

我有一个连接到DB的表,我想做的是当用户单击该表中的单元格时:它选择表中的所有行。这是我的代码副本:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If inTabRange(ActiveCell) Then
        ActiveSheet.ListObjects("tabRecherche").ListRows(ActiveCell.row).Range.Select
    Else
        MsgBox "Hello"
    End If
End Sub

Private Function inTabRange(cellRange As Range) As Boolean
    inRange = Not (Application.Intersect(cellRange, Range("Q14:AI700")) Is Nothing)
End Function
“tabRecherche”是我的表名,它的范围从Q14到AI700

我的问题是,当我调用函数“inTabRange”时,不管它是否返回True,代码都会进入Else部分并调用MsgBox

这可能与我如何使用应用程序有关。Intersect:我从互联网上复制了这一行


希望你能帮助我

此代码将用于工作表中的任何表格:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim LObj As ListObject
    Set LObj = ActiveCell.ListObject       

    If LObj Is Nothing Then
     MsgBox "Hello"
    Else
     Application.EnableEvents = False
      Application.Intersect(LObj.Range, ActiveCell.EntireRow).Select
     Application.EnableEvents = True
    End If       

End Sub

此代码将用于工作表中的任何表:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim LObj As ListObject
    Set LObj = ActiveCell.ListObject       

    If LObj Is Nothing Then
     MsgBox "Hello"
    Else
     Application.EnableEvents = False
      Application.Intersect(LObj.Range, ActiveCell.EntireRow).Select
     Application.EnableEvents = True
    End If       

End Sub
(此解决方案仅修复您的代码。Fadi的解决方案更优越。)

编辑:替换了ActiveSheet.Rows(Target.Row)。使用ActiveSheet.ListObjects(“tabRecherche”).Range.Rows.Select进行选择-因此现在它选择整个表,而不仅仅是行。哎呀

(此解决方案仅修复您的代码。Fadi的解决方案更优越。)


编辑:替换了ActiveSheet.Rows(Target.Row)。使用ActiveSheet.ListObjects(“tabRecherche”).Range.Rows.Select进行选择-因此现在它选择整个表,而不仅仅是行。哎呀。

从纯逻辑的角度来看,我会将那些
Application.EnableEvents
语句保留在
Application.Intersect.
条件块中。我还要补充一点,检查表名将完全符合OP的需要Hank You@user3598756,我也这么认为,但也许OP想要选择其他任何东西,而不是
msgbox
。是的,msgbox只是为了测试。从纯逻辑的角度来看,我会保留那些
应用程序。在
else
条件块中启用围绕
应用程序的事件
语句。Intersect…
。我还想补充一点,检查表名将完全符合OP的需要谢谢@user3598756,我也这么认为,但OP可能想选择其他任何东西,而不是
msgbox
。是的,msgbox只是用于测试