Как скопировать все имена листов на определенный лист в той же книге? - PullRequest
0 голосов
/ 24 января 2019

Я немного новичок в платформе stackoverflow и особенно в VBA, просто делаю свои первые шаги. Итак, у меня есть следующая проблема: В моей книге несколько листов, и мне нужно скопировать названия этих листов, кроме названия одного листа, на который я копирую эти имена. Имена должны быть скопированы в определенное место тоже. До сих пор я придумал это:

Sub passport_combining()

Dim i As Worksheet

For Each i In ActiveWorkbook

If i.Name <> "Sheetname_I_dont_need_to_copy_to" Then

    Range("G").Value = Range("G" & Rows.Count).End(xlUp).Offset(1).Select.i.Name

    ActiveSheet.paste

End If    

Next i

End Sub

Код должен циклически проходить по каждому листу, кроме того, на который я копирую, выводить имена из этих листов и копировать его в последнюю строку + 1 столбца G последнего листа Технически я понимаю, что мне нужно сделать, чтобы найти решение, но я действительно застрял в проблеме! Я даже пытался записать макрос, в который скопировал имена листов, но, к сожалению, все, что дает мне VBA, - это набор опций Select, которых рекомендуется избегать. Любые советы будут полезны! Спасибо!

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Просто попробуйте выполнить следующие действия:

Sub AllSheets()
Dim sht As Worksheet
Dim i As Long

    i = 1
    For Each sht In ThisWorkbook.Worksheets
        If sht.Name <> ActiveSheet.Name Then
            Cells(i, "G") = sht.Name
            i = i + 1
        End If
    Next sht

End Sub

Затем настройте коды в соответствии с вашими потребностями.

0 голосов
/ 24 января 2019

Приведенный ниже код импортирует все имена листов в столбце 1 листа A.

Option Explicit

Sub Get_Sheets_Name()

    Dim ws As Worksheet
    Dim Lastrow As Long

    'Loop all sheets in this workbook
    For Each ws In ThisWorkbook.Worksheets

        With ThisWorkbook.Worksheets("Sheet1")
            'Find of Sheet1 & Column A lastrow
            Lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row

            'Import Sheet name in Sheet 1 & Column A
            .Cells(Lastrow + 1, 1).Value = ws.Name

        End With

    Next

End Sub
0 голосов
/ 24 января 2019

Вот один из вариантов:

With ThisWorkbook.Sheets("Summary")
    Set nextEntry = .Range("G4")
    For Each wsheet In ThisWorkbook.Sheets
        If wsheet.Name <> "Summary" Then
            nextEntry.Value = wsheet.Name
            Set nextEntry = nextEntry.Offset(1, 0)
        End If
    Next wsheet
End With

Где «Сводка» - это имя листа, на котором вы хотите указать все имена, а .Range("G4") - это исходное место для данных.

Обновление: Приведенный ниже код проверит значение в столбце G перед вставкой имен листов

Ссылка: https://stackoverflow.com/a/12648557/9167318

With ThisWorkbook.Sheets("Summary")
    For Each wsheet In ThisWorkbook.Sheets
        If wsheet.Name <> "Summary" Then
            Set nextEntry = .Cells(.Rows.Count, "G").End(xlUp).Offset(1, 0)
            If IsError(Application.Match(wsheet.Name, .Range("G:G"), 0)) Then nextEntry.Value = wsheet.Name
        End If
    Next wsheet
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...