Определить закрепленные последние файлы в (Excel 2007) VBA или другое? - PullRequest
4 голосов
/ 27 апреля 2011

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

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

Я могу видеть в Реестре (в пределах HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\File MRU), что там закреплен прикрепленный элемент, например ::

[F00000001][T01CC04D632020F50]*C:\Files\ThisOneIsPinned.xlsx
[F00000000][T01CBFB8F14408960]*C:\Files\ThisOneIsNot.xlsx

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

1 Ответ

3 голосов
/ 27 апреля 2011

Чтобы получить доступ к списку недавних файлов в 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_USER\Software\Microsoft\Office\14.0\Excel\File MRU\"

For Each rFile In objAllRecentFiles

    rKeyWord = WSHShell.RegRead(RegKey & "Item " & 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 & "Item " & rFile.Index), strPinned, "REG_SZ"

        End If
Next rFile

End Sub
...