2011-10-05 289 views
1

我有一個當前正在使用fhandlefile()過程的Access應用程序: http://access.mvps.org/access/api/api0018.htm ...打開任意文件。從Access VBA以只讀方式打開任意文件

我希望能夠像OpenFile(strFilePath,bolReadOnly)一樣在自己的過程中包裝該例程,以便可以根據需要以只讀方式打開文件。但是,我沒有看到那個Shell API調用中的任何地方,我可以做到這一點。我已經想到的(但有問題)兩種可供選擇的解決方案是:

  1. 變化只是在打開文件之前的文件屬性爲只讀,然後打開它後改回正確的。這是一個奇怪的解決方案,不過因爲用戶必須擁有足夠的權限才能做到這一點,這通常與整個「以只讀方式打開文件」相矛盾。
  2. 使用依賴於文件類型的API以只讀方式打開某些類型的文件(例如Word文檔)。這是一個問題,因爲我不想排除所有不同的文件類型,並且我希望儘可能遠離額外的庫。

任何人有任何想法如何我可以調整我現有的例程或用其他可以允許這樣做的東西替代它?

回答

0

看着你調用它的API ...

  1. 試圖利用該向ShellExecte調用打開使用默認的動詞使用該文件,如果有打開。如果不是,則使用「打開」動詞。

  2. 如果失敗則嘗試使用打開方式打開文件...對話框中看到How To Invoke the "Open With..." Dialog Box Using _shellexecute

這兩種方法都使用與文件打開正確的應用程序相關的信息,但沒有辦法通過「只讀」。我的猜測是,這是因爲不是每個文件類型都有隻讀或甚至可寫的上下文。

您可以選擇在Web瀏覽器中打開文件。

例如(使用參考 「Microsoft Internet控制」 位於C通常發現:\ WINDOWS \ SYSTEM32 \ ieframe.dll)

Dim ie As InternetExplorer 
set ie = New InternetExplorer 

ie.Navigate "file://yourFile" 
ie.Visible = True 
+0

好主意!當我需要跳轉到PDF中的特定頁面時,我以前使用IE作爲我的文件首選項,但是我從未想過這是一個只讀文件查看器的事實。謝謝! – SteveShaffer