#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 года, я с нетерпением буду ждать этого разочарования. Ну что ж.