Определить закрепленные недавние файлы в (Excel 2007) VBA или другом?

#vba #excel #excel-2007 #ribbon

#vba #excel #excel-2007 #лента

Вопрос:

Есть ли способ, кроме сканирования реестра, определить, что RecentFile объект закреплен в списке «Последние документы»? Из VBA для предпочтения, что-то, что может находиться в надстройке.

Справочная информация: Я пытаюсь убедить Excel «переместить» закрепленные элементы в верхнюю (или нижнюю) часть списка, чего можно было бы достичь, повторно Add добавив их в RecentFiles, если бы только я мог идентифицировать интересующие элементы.

Я вижу в реестре (внутри HKEY_CURRENT_USERSoftwareMicrosoftOffice12.0ExcelFile MRU ), что закрепленный элемент идентифицирован там, например:

 [F00000001][T01CC04D632020F50]*C:FilesThisOneIsPinned.xlsx
[F00000000][T01CBFB8F14408960]*C:FilesThisOneIsNot.xlsx
  

… я полагаю, это способ подойти к этому. Я бы предпочел что-нибудь менее, э-э, захватывающее..

Ответ №1:

Для доступа к списку недавних файлов в VBA используйте

 Sub test()
Dim objAllRecentFiles As Object
  Set objAllRecentFiles = Application.recentfiles
End Sub
  

Я не верю, что существует альтернативный способ, кроме использования реестра, чтобы определить, закреплены последние файлы или нет. Приведенный ниже пример позволяет вам циклически просматривать все последние файлы, определять те, которые не закреплены, и изменять реестр, чтобы сделать их закрепленными. Закомментированный способ удаления

 Sub test2()
Dim objAllRecentFiles As Object
Dim WSHShell, RegKey, rKeyWord
Set WSHShell = CreateObject("WScript.Shell")
Set objAllRecentFiles = Application.recentfiles

RegKey = "HKEY_CURRENT_USERSoftwareMicrosoftOffice14.0ExcelFile MRU"

For Each rFile In objAllRecentFiles

    rKeyWord = WSHShell.RegRead(RegKey amp; "Item " amp; rFile.Index)
        If InStr(1, rKeyWord, "[F00000000]") Then

        'Delete registry
        'rFile.Delete

        'Change registry setting to make recent file pinned
        strPinned = Replace(rKeyWord, "[F00000000]", "[F00000001]")
        WSHShell.Regwrite (RegKey amp; "Item " amp; rFile.Index), strPinned, "REG_SZ"

        End If
Next rFile

End Sub
  

Комментарии:

1. Похоже, что (несколько) расширенная поддержка ленты в 2010 году не распространяется так далеко. 🙁 Поскольку мы, вероятно, не увидим Excel 2010 примерно до 2015 года, я с нетерпением буду ждать этого разочарования. Ну что ж.