Access连续表单中存在Check文件夹

时间:2014-06-11 13:42:10

标签: ms-access ms-access-2003

我正在修改现有的Access 2003应用程序,有些机器使用Access 2010而不是2003.

我有一个连续的表单,其中包含一个未绑定的文本框,其中包含"文件夹"。文本框有一个onClick事件,用于打开与当前记录相关的文件夹。

对于每一行,我想向用户表明该行是否存在文件夹。我喜欢这样做的方式是,如果一行没有文件夹,那么该文件夹就是'文本框是空白的,如下所示:

Quote Ref   Customer   Cust.Ref

14-243    | Smiths    |CR342   | Folder |
14-269    | Cox & Son |0002634 |        |
14-314    | RedBox    |436R    | Folder |
14-314    | JTG PRs   |63462   |        |

文件夹名称由前3个字段组成: " S:/ path / 14-243 Smiths CR342 / "

我最初尝试在 form_current 事件上添加一些代码来更改文本框的可见性,但这会将所有行设置为相同。

Private Sub Form_Current()
  If Len(Dir("S:/path/" & [quote_no] & " " & [customer] & " " & [cust_ref], vbDirectory) = 0) Then
     Me.txtFolder.Visible = False
  Else
     Me.txtFolder.Visible = True
  End If
End Sub

所以我尝试将此代码放入控件源

=iif(Len(Dir("S:/path/" & [quote_no] & " " & [customer] & " " & [cust_ref],vbDirectory)) =0,"","Folder")

但Access假设vbDirectory是一个控件并在其周围放置方括号,这会破坏语法。因此我假设dir()不能用在控制源上。

你能建议我如何实现我的目标吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

你可以像这样FileSystemObjec FolderExists函数制作包装器

Dim fso As FileSystemObject   'So a new object is not created on every call to FolderExists

Private Sub Form_Load()
    Set fso = New FileSystemObject
End Sub

Function FolderExists(folderPath As String) As Boolean
    FolderExists = fso.FolderExists(folderPath)
End Function

要使用FileSystemObject,您需要添加对Microsoft Scripting Runtime

的引用

然后在文本框的控件源中有一个像这样的函数调用

=FolderExists("S:/path/" & [quote_no] & " " & [customer] & " " & [cust_ref])

甚至

=IIF(FolderExists("S:/path/" & [quote_no] & " " & [customer] & " " & [cust_ref]),"Click","")

然后在文本框的点击事件中检查它是否可点击

Private Sub Text1_Click()
    If Text1.Text = "Click" Then
        Debug.Print "Do some work"
    Else
        Debug.Print "Do nothing"
    End If
End Sub

答案 1 :(得分:0)

转到VBA中的“调试”窗口,然后键入? vbDirectory。这将返回常量的值(实际上是16) 将常量替换为控制源表达式中的值 不确定Dir功能是否存在于VBA之外。如果不使用包装(无论如何这可能是一个更好的主意)。

我怀疑在连续表格上使用这么慢的功能会使它非常慢 如果这适合您的用例,我建议将控件放在表单的页眉或页脚中。这样,只计算当前记录(如果使用包装器版本,则也有效)。