从Access VBA打开任意文件为只读

时间:2011-10-05 19:01:13

标签: shell ms-access vba

我有一个Access应用程序,当前正在使用fhandlefile()过程: http://access.mvps.org/access/api/api0018.htm ...打开任意文件。

我希望能够在我自己的程序中包装该例程,如OpenFile(strFilePath,bolReadOnly),以便我可以根据需要以只读方式打开文件。但是,我没有在Shell API调用中看到任何可以执行此操作的地方。我已经想到的两个替代解决方案(但有问题)是:

  1. 在打开文件之前将文件属性更改为只读,然后在打开文件后立即更改它们。这是一个奇怪的解决方案,因为用户必须具有足够的权限才能执行此操作,这通常与整个“打开文件作为只读”事物相矛盾。
  2. 使用依赖于文件类型的API以只读方式打开某些类型的文件(例如Word文档)。这是一个问题,因为我不想要排除所有不同的文件类型,我希望尽可能远离额外的库。
  3. 任何人都有任何关于我如何调整现有例程或用其它可以替代它的东西替换它的想法?

1 个答案:

答案 0 :(得分:0)

查看您称之为的API ...

  1. 尝试打开使用ShellExecte的调用来打开文件,使用默认动词(如果可用)。如果没有,则使用“打开”动词。

  2. 如果失败则尝试使用打开方式... 对话框打开文件,请参阅How To Invoke the "Open With..." Dialog Box Using _shellexecute

  3. 这两种方法都使用与文件关联的信息来打开正确的应用程序,但是没有办法传递“只读”。我的猜测是,这是因为并非所有文件类型都具有只读或甚至可写的上下文。

    您可以在Web浏览器中打开文件。

    例如(使用“Microsoft Internet Controls”的引用,通常位于c:\ windows \ system32 \ ieframe.dll)

    Dim ie As InternetExplorer
    set ie = New InternetExplorer
    
    ie.Navigate "file://yourFile"
    ie.Visible = True