Ваши циклы по каждому листобъекту на каждом листе корректны - вам нужно изменить то, что вы делаете с таблицей, чтобы скопировать последний столбец, хотя:
Sub foo()
Dim sht As Worksheet
Dim tbl As ListObject
For Each sht In ThisWorkbook.Worksheets
For Each tbl In sht.ListObjects
With tbl.ListColumns(tbl.ListColumns.Count).Range
.Copy .Offset(0, 1)
End With
Next tbl
Next sht
End Sub
РЕДАКТИРОВАТЬ:
Если вы хотите проверить имя таблицы перед копированием последнего столбца, добавьте раздел IF
... END IF
:
Sub AddNewColumn()
Dim tbl As ListObject
Dim sht As Worksheet
For Each sht In ThisWorkbook.Worksheets
For Each tbl In sht.ListObjects
If tbl.Name Like ("TableSL_" & Right(sht.Name, 2)) Or tbl.Name Like ("Table" & sht.Name) Then
With tbl.ListColumns(tbl.ListColumns.Count).Range
.Copy .Offset(0, 1)
End With
End If
Next tbl
Next sht
End Sub
Я отредактировал ваш вопрос, чтобы улучшить форматирование кода - надеюсь, вы сможетеобратите внимание, что при внимательном рассмотрении отступа пропущенное выражение End If
становится очевидным.