2017-03-17 119 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 - 現在選擇整個表格,而不僅僅是行。哎呀。

相關問題