2017-03-17 86 views
1

我有一个表连接到一个数据库,我想要做的是当用户点击这个表中的一个单元格:它选择表中的所有行。下面是我的代码的副本:选择excel表(不是工作表)上的所有行w/VBA

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。

这可能是我如何使用Application.Intersect的一个问题:我从Internet复制了这一行。

希望你能帮助我!

回答

2

此代码将在工作表中所有工作表中:(该解决方案只是解决您的代码的Fadi的解决方案是卓越的。)

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 
+1

从纯粹逻辑的角度来看,我会在'Else'条件块内保留'Application.Intersect ...'的'Application.EnableEvents'语句。我还会补充一点,检查表名将完全符合OP的需求 – user3598756

+0

谢谢@ user3598756,我也是这么想的,但也许OP想选择其他任何东西而不是'msgbox'。 – Fadi

+1

谢谢你完美的作品! – NattyRoots

1
Option Explicit 

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

Private Function inTabRange(cellRange As Range) As Boolean 
    inTabRange = Not Application.Intersect(cellRange, ActiveSheet.ListObjects("tabRecherche").Range) Is Nothing 
End Function 

编辑:更换ActiveSheet.Rows( Target.Row)。选择ActiveSheet.ListObjects(“tabRecherche”)。Range.Rows.Select - 现在选择整个表格,而不仅仅是行。哎呀。

相关问题