2011-04-27 98 views
4

除掃描註冊表以外,是否有其他方法來確定RecentFile對象是否固定到「最近的文檔」列表中?從VBA的偏好來看,可以生活在一個附加的東西。識別(Excel 2007)VBA或其他版本中的固定的RecentFiles?

背景:我期待說服Excel將固定項目「浮動」到列表的頂部(或底部),如果我只能識別項目,可以通過將它們重新設置爲RecentFiles來實現Add出於興趣。

我可以在註冊表中看到(內HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\File MRU)的固定項目被確定存在,例如:

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

......所以這是一個辦法的辦法吧,我想。我喜歡的東西少一點,呃,激動人心 ..

回答

3

要訪問recentfile列表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 
+0

所以看起來像2010年的(某種程度上)功能區的擴展支持並沒有延伸到那麼遠。 :-(因爲我們可能直到2015年左右纔會看到Excel 2010,所以我很期待失望。 – 2011-04-28 07:48:42