I have several tables in an excel sheet. Each having unique table Name. I want to know if a table which has a name "Table123" exist or not in the current sheet.
Could some one help me on this?
Thanks Jeevan
I have several tables in an excel sheet. Each having unique table Name. I want to know if a table which has a name "Table123" exist or not in the current sheet.
Could some one help me on this?
Thanks Jeevan
TableExists = False
On Error GoTo Skip
If ActiveSheet.ListObjects("Table123").Name = "Table123" Then TableExists = True
Skip:
On Error GoTo 0
This code will work and avoid loops and errors
ListObjects and also when table isnt on sheet, you will get error. Not falseHere is an alternative function:
Function TableExistsOnSheet(ws As Worksheet, sTableName As String) As Boolean
TableExistsOnSheet = ws.Evaluate("ISREF(" & sTableName & ")")
End Function
sTableName and do TableExistsOnSheet = ThisWorkbook.ActiveSheet.Evaluate("ISREF(" & sTableName & ")") 3. Your function name TableExistsOnSheetis a misnomer as it will return true even if it is not on that sheet. It only has to be somewhere in the workbook.You can list shape collection and compare names like this
Sub callTableExists()
MsgBox tableExists("Table1", "Shapes")
End Sub
Function TableExists(tableName As String, sheetName As String) As Boolean
Dim targetSheet As Worksheet
Set targetSheet = Worksheets(sheetName)
Dim tbl As ListObject
With targetSheet
For Each tbl In .ListObjects
If tbl.Name = tableName Then TableExists = True
Next tbl
End With
End Function
Another option, using a bit lazy approach with error catching:
Public Sub TestMe()
If TableExists("Table1243", ActiveSheet) Then
MsgBox "Table Exists"
Else
MsgBox "Nope!"
End If
End Sub
Public Function TableExists(tableName As String, ws As Worksheet) As Boolean
On Error GoTo TableExists_Error
If ws.ListObjects(tableName).Name = vbNullString Then
End If
TableExists = True
On Error GoTo 0
Exit Function
TableExists_Error:
TableExists = False
End Function
Try this, use err to get data table status information also, consider testing the data table on an inactive sheet.
Sub Test_TableNameExists()
TableNm = "Table00"
MsgOutput = TableNm & vbTab & TableNameExists(TableNm)
End Sub
Private Function TableNameExists(nname) As Boolean '#Table #Exist
'Returns TRUE if the data table name exists
'Can test table on inactive sheet
Dim x As Object
On Error Resume Next
'use Range(nname).Parent to get data table sheet name.
'So the function can test data table on inactive sheet.
Set x = Range(nname).Parent.ListObjects(nname)
If Err = 0 Then TableNameExists = True _
Else TableNameExists = False
End Function
Without the use of GoTo, which is a lot more powerfull than appropriate.
Set TableExists = False
On Error Resume Next
If ActiveSheet.ListObjects("Table123").Name = "Table123" Then Set TableExists = True
Be aware that this applies to a single line, thus requiring the line continuation symbol _ to keep larger statements readable.
Lots of answers that work here. IMO though error trapping has its place, I dislike the notion of purposely generating and redirecting internal errors to programmatically return a value.
Here is a function that will find if a table exists in a Workbook or specific worksheet (if provided) without relying on error trapping. Admittedly, it's a little more complicated, but it does exactly what it should and nothing more.
Function TableExists(sTableName As String, Optional mySheet As Worksheet) As Boolean
Dim myListObject As ListObject
Dim numsheets As Long
Dim s, lo As Long
Dim found As Boolean
Dim passed As Boolean
passed = (mySheet Is Nothing)
If passed Then
s = 1
numsheets = Application.ActiveWorkbook.Sheets.Count
Else
s = mySheet.Index
numsheets = 1
End If
found = False
While ((Not found) And (s <= numsheets)) Or passed
If (numsheets > 1) Or (Not passed) Then
Set mySheet = Application.ActiveWorkbook.Worksheets(s)
End If
lo = 1
While (Not found) And (lo <= mySheet.ListObjects.Count)
Set myListObject = mySheet.ListObjects(lo)
found = (sTableName = myListObject.Name)
lo = lo + 1
Wend
passed = False 'Avoid any infinite loops from or clause
s = s + 1
Wend
TableExists = found
End Function