【问题标题】:Open Arbitrary File from Access VBA as Read-Only从 Access VBA 以只读方式打开任意文件
【发布时间】:2011-10-08 06:39:49
【问题描述】:

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

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

  1. 在打开文件之前将文件属性更改为只读,然后在打开文件后立即将其更改回来。这是一个奇怪的解决方案,因为用户必须拥有足够的权限才能执行此操作,这通常与整个“以只读方式打开文件”相矛盾。
  2. 使用与文件类型相关的 API 以只读方式打开某些类型的文件(例如 Word 文档)。这是一个问题,因为我不想区分所有不同的文件类型,并且我想尽可能远离额外的库。

有人对我可以如何调整我现有的例程或用其他允许这样做的方法替换它有任何想法吗?

【问题讨论】:

    标签: shell ms-access vba


    【解决方案1】:

    查看您正在调用的 API...

    1. 尝试使用对ShellExecte 的调用打开文件,并使用默认动词(如果可用)。如果不是,则使用“开放”动词。

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

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

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

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

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

    【讨论】:

    • 好主意!当我需要在打开的 PDF 中跳转到特定页面时,我以前使用 IE 作为文件打开器,但我从未想过它是文件的只读查看器这一事实。谢谢!
    猜你喜欢
    • 2018-11-29
    • 2010-12-10
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    相关资源
    最近更新 更多