как скопировать последний диапазон столбца и перейти к следующему диапазону столбца в таблице Excel (динамически) - PullRequest
0 голосов
/ 30 ноября 2018

Я очень новичок в VBA, и мое требование - добавить новый столбец в конце всех таблиц в моей книге и скопировать последние использованные значения столбца в мой новый столбец с форматом.

Sub LoopThroughAllTablesinWorkbook()    
    Dim tbl As ListObject
    Dim sht As Worksheet
    Dim SheetName As String

    For Each sht In ThisWorkbook.Worksheets
        SheetName = sht.Name
        For Each tbl In sht.ListObjects  
           If (tbl.Name like ("TableSL_" & Right(SheetName,2)) = True or tbl.Name Like ("Table" & SheetName) = True) Then          
               With tbl.ListColumns(tbl.ListColumns.Count).Range
                   .Copy .Offset(0, 1)
               End With       
        Next tbl
    Next sht 
End Sub

Name  Vorname User id
Nag     Vad     123
Siv     VAd     456
Reddy   Tav     769
Ravi    Kakki   123

Результаты должны быть

Name  Vorname User id User id2
Nag    Vad    123     123
Siv    VAd    456     456
Reddy  Tav    769     769
Ravi   Kakki  123     123

1

1 Ответ

0 голосов
/ 30 ноября 2018

Ваши циклы по каждому листобъекту на каждом листе корректны - вам нужно изменить то, что вы делаете с таблицей, чтобы скопировать последний столбец, хотя:

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 становится очевидным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...