I'm not sure I think this is the BEST way, but it works.
Option Explicit
Sub FindPivot()
Dim myPivot As Excel.PivotTable
Dim mySourceData As String
Dim mySheetName As String
Dim myRangeAddress As String
Dim myVal As Long
Dim myWS As Excel.Worksheet
Dim myWB As Excel.Workbook
Dim mySelection As Excel.Range
Dim myWBPath As String
Dim myWBName As String
Dim myWSName As String
Dim aWS As Excel.Worksheet
Dim myAddress As String
Set aWS = ActiveSheet
Set mySelection = Selection
Application.ScreenUpdating = False
For Each myPivot In ActiveSheet.PivotTables
Debug.Print myPivot.Name, myPivot.SourceData
mySourceData = myPivot.SourceData
myVal = InStr(mySourceData, "!")
If myVal > 0 Then
Application.Goto (mySourceData)
myRangeAddress = Selection.Address
Set myWS = Selection.Parent
Set myWB = myWS.Parent
myWBPath = myWB.FullName
myWBName = myWB.Name
myWSName = myWS.Name
Debug.Print myPivot.Name, myWBPath, myWBName, myWSName, myRangeAddress
End If
Next myPivot
aWS.Select
Application.ScreenUpdating = True
End Sub
HTH,
Barb Reinhardt