检查文件夹是不是存在于 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】:您可以像这样为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
【讨论】:
谢谢,完成了!我花了一段时间才让它工作——我最终发现我需要添加 Microsoft Scripting Runtime 参考。现在工作正常(虽然速度很慢)。 啊,是的!很抱歉我没有提到这一点。很好地解决了这个问题。【参考方案2】:转到 VBA 中的“调试”窗口并键入 ? vbDirectory
。这将返回常量的值(实际上是 16)。
用控件源表达式中的值替换常量。
不确定 Dir 函数是否存在于 VBA 之外。如果不使用包装器(无论如何这可能是一个更好的主意)。
我怀疑在连续形式上使用如此慢的函数会使其非常慢。 如果这适合您的用例,我建议将控件放在表单的页眉或页脚中。这样,只计算当前记录(如果使用包装器版本也有效)。
【讨论】:
给出#Name
错误。很好的建议,但我认为 Dir 被认可是瓶颈以上是关于检查文件夹是不是存在于 Access Continuous Forms 中的主要内容,如果未能解决你的问题,请参考以下文章
NodeJs:fs.stat() 或 fs.access() 检查文件夹是不是存在?