我有一个产品表,其中有一个特定产品用户手册的pdf。我将模型名称及其文件路径存储在我的产品表中(在Access中)。我在Access中创建了一个表单,允许用户按产品名称进行搜索,缩小文件数量,并在列表框中显示搜索结果。然而,我最大的问题是打开实际的PDF。它会打开文件,但我必须准确存储文件路径,文件的路径很长。有没有办法打开PDF超链接而不使用Followhyperlink命令?或者有一种方法,我只能在列表框中显示pdf的文件名而不是整个路径名?如果我更改了我的产品表中的显示文本,它没有打开超链接,我收到一个错误。任何帮助将不胜感激!
答案 0 :(得分:1)
Application.FollowHyperLink()存在安全性问题,尤其是在网络驱动器上打开文件时。参见例如在这里:http://blogannath.blogspot.de/2011/04/microsoft-access-tips-tricks-opening.html
更好的方法是ShellExecute()API函数。 基本上它看起来像这样(从http://access.mvps.org/access/api/api0018.htm修剪):
$re = "/(\n\s\d{2}\W\d{2}\W\d{2})/";
$str = "";//the string
preg_match($re, $str, $matches);
print_r($matches);
现在为您的列表框: 将其设置为2列,第一列是模型名称,第二列是文件路径。 将第二列的列宽设置为0,因此它将不可见。
在doubleclick事件中,使用第二列(文件路径)调用fHandleFile:
' This code was originally written by Dev Ashish.
' http://access.mvps.org/access/api/api0018.htm
Private Declare Function apiShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" _
(ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) _
As Long
Public Const WIN_NORMAL = 1 'Open Normal
Private Const ERROR_SUCCESS = 32&
Public Function fHandleFile(stFile As String) As Boolean
Dim lRet As Long
lRet = apiShellExecute(hWndAccessApp(), "Open", stFile, vbNullString, vbNullString, WIN_NORMAL)
If lRet > ERROR_SUCCESS Then
' OK
fHandleFile = True
Else
Select Case lRet
' Handle various errors
End Select
fHandleFile = False
End If
End Function