найти последний добавленный лист (VBA)? - PullRequest
0 голосов
/ 28 января 2019

Как получить последний лист, созданный в Excel?Я использовал GetSheets.Last, и он работает, но он нашел мне последний лист, в котором он находится в очереди, это правильно, но если мой последний лист не соответствует порядку очереди, например, он находится посередине, функция GetSheets.Последний не работаетЕсть какая-нибудь функция, где робот может найти или понять, какой лист был создан за последний раз?

С уважением

Ответы [ 2 ]

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

Когда вы программно добавляете лист, функция Worksheets.Add дает ссылку на только что добавленный объект Worksheet: обычно это код VBA, который обрабатывает «последний созданный лист».

Dim newSheet As Worksheet
Set newSheet = book.Worksheets.Add
'use newSheet object to refer to the newly added worksheet.

Если мы говорим о вручную добавленных рабочих листах, вещи должны стать более ... вовлеченными.

При условии, что вам нужно отслеживать все листы добавлены в все рабочие книги, у вас может быть надстройка Excel, которая обрабатывает события всего приложения, например:

Private WithEvents app As Excel.Application

Private Sub Workbook_Open()
    Set app = ThisWorkbook.Application
End Sub

Private Sub app_WorkbookNewSheet(ByVal Wb As Workbook, ByVal Sh As Object)
    If Not TypeOf Sh Is Excel.Worksheet Then Exit Sub

    Dim ws As Worksheet
    Set ws = Sh

    ws.CustomProperties.Add "DateCreated", Now

End Sub

За исключением Application.EnableEvents = False, я не на 100%Я убежден, что обработчик будет запускаться в каждом возможном случае, который может создать рабочий лист, но я думаю, что это лучше, чем ничего.

Тогда у вас может быть функция, которая возвращает вам пользовательское свойство DateCreated с учетом экземпляра Worksheet:

Public Function GetDateCreated(ByVal ws As worksheet) As Date
    Dim p As CustomProperty
    For Each p In ws.CustomProperties
        If p.Name = "DateCreated" Then
            GetDateCreated = p.Value
            Exit Function
        End If
    Next
    GetDateCreated = 0 ' unknown
End Function

И все, что осталось сделать, - это написать процедуру, которая может сортировать листы на основе связанных с ними DateCreated значений пользовательских свойств.

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

Вы можете попытаться получить доступ к кодовому имени рабочего листа.К нему добавляется последовательный номер.

Следует отметить, что если вы а) удалите лист и б) закроете, затем снова откроете книгу и в) добавите новый лист, новому листу может быть назначен старыйкодовое имя делает этот метод ненадежным.

Хотя это не так часто, как изменение имени рабочего листа, кодовое имя рабочего листа также можно изменить вручную.

function getLastAddedWorksheet()

    dim i as long, mx as long, ws as worksheet

    on error resume next

    for i = 1 to worksheets.count
        if mx < val(mid(worksheets(i).codename, 6)) then
             set ws = worksheets(i)
             mx = val(mid(ws.codename, 6))
        end if
    next i

    getLastAddedWorksheet = ws.name

    on error goto 0

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