Just answering the second part of your question about getting the name of the sheet where a table is:
Dim name as String
name = Range("Table1").Worksheet.Name
Edit:
To make things more clear: someone suggested that to use Range on a Sheet object. In this case, you need not; the Range where the table lives can be obtained using the table's name; this name is available throughout the book. So, calling Range alone works well.