检查文件夹是不是存在于 Access Continuous Forms 中

Posted

技术标签:

【中文标题】检查文件夹是不是存在于 Access Continuous Forms 中【英文标题】:Check folder exists in Access Continous Forms检查文件夹是否存在于 Access Continuous Forms 中 【发布时间】:2014-06-11 13:42:10 【问题描述】:

我正在修改一个现有的 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() 不能用于控制源。

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

谢谢!

【问题讨论】:

【参考方案1】:

您可以像这样为FileSystemObjecFolderExists 函数制作包装器

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

【讨论】:

谢谢,完成了!我花了一段时间才让它工作——我最终发现我需要添加 Microsoft Scripting Runtime 参考。现在工作正常(虽然速度很慢)。 啊,是的!很抱歉我没有提到这一点。很好地解决了这个问题。【参考方案2】:

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

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

【讨论】:

给出#Name 错误。很好的建议,但我认为 Dir 被认可是瓶颈

以上是关于检查文件夹是不是存在于 Access Continuous Forms 中的主要内容,如果未能解决你的问题,请参考以下文章

NodeJs:fs.stat() 或 fs.access() 检查文件夹是不是存在?

C语言 检查文件是不是存在

VBA脚本检查MS ACCESS上是不是存在表,如果存在则删除

检查文件是不是存在

检查文件是不是存在

如何通过VBscript检查MS Access中是不是存在表