我有一个函数可以检查文件是否存在,如果文件存在,那么它会检查特定单元格中的特定值,如果为真,那么它会从给定单元格中提取值。
问题是,当我运行此代码时,会出现一个拨号框。我已插入
Application.DisplayAlerts = False
进入我的FileExists功能,但我仍然得到对话框,知道我做错了什么?
我的职能:
Function FileExists(FilePath As String) As Boolean
Application.DisplayAlerts = False
'Step 1: Declare your variables.
Dim FileName As String
'Step 2: Use the Dir function to get the file name
FileName = Dir(FilePath)
'Step 3: If file exists, return True else False
If FileName <> "" Then FileExists = True _
Else: FileExists = False
End Function
Sub FileExits()
End Sub
我在公式框中插入的内容:
=IF(FileExists("path\filename.xls"),IF('path\[filename.xls]Sheet'!D$13="16m8", 'path\[filename.xls]Sheet'!D40, ""),"false")
答案 0 :(得分:1)
我对OP的评论有点误。是的,您可以通过这种方式(类型)检索值,但是您看到的对话框是文件不存在时会发生的情况,因为Excel的布尔逻辑不会发生短路。
这意味着如果指定的文件不存在,Excel仍然必须评估完整的表达式,如果指定的文件没有& #39; t存在。
IF('path\[filename.xls]Sheet'!D$13="16m8", 'path\[filename.xls]Sheet'!D40, "")
正如上面提到的@pnuts,Application.DisplayAlerts = False
,
[Excel]将使用存在这些选项的默认选项(例如,不保存为关闭),但没有默认选项,我无法找到您告诉我使用的文件&#39; < / p>
注意如果指定的文件存在,如果指定的工作表名称不存在,您仍可能会收到对话框。
由于您已经在使用自定义函数FileExists
,因此只需使用此类内容(稍微修改一下Sid的答案here)即可从已关闭的工作簿中获取值:
Function GetVal(path$, shtName$, cellRef$)
Dim exists As Boolean, ret
Dim fileName$, directory$, sht$, addr$
exists = Dir(Trim(path)) <> vbNullString
If Not exists Then GoTo EarlyExit
'Else, if the file exists, get the values
path = Replace(path, "/", "\")
'Get the query substrings:
fileName = Dir(path)
directory = Left$(path, Len(path) - Len(fileName))
'Get the address of the cell, R1C1 style
addr = Range(cellRef).Address(True, True, -4150)
'Build the query string in the ExecuteExcel4Macro function
ret = ExecuteExcel4Macro("'" & directory & "[" & fileName & "]" & shtName & "'!" & addr)
GetVal = ret
EarlyExit:
ret = "File or sheetname doesn't exist!" '## Modify as needed
End Function
然后,修改你的逻辑,而不是:
=IF(FileExists("path\filename.xls"),IF('path\[filename.xls]Sheet'!D$13="16m8", 'path\[filename.xls]Sheet'!D40, ""),"false")
你这样做:
=IF(GetVal("path\filename.xls", "Sheet1", "D$13")="16m8", GetVal("path\filename.xls", "Sheet1", "D40"))
上述函数使用与FileExists
相同的逻辑,并在将查询交给ExecuteExcel4Macro
内置函数之前确保文件存在。