excel:如果FileExists,如果文件中的给定值是x,则从给定单元格中提取数据

时间:2016-09-12 15:47:36

标签: excel excel-vba excel-formula excel-2010 vba

我有一个函数可以检查文件是否存在,如果文件存在,那么它会检查特定单元格中的特定值,如果为真,那么它会从给定单元格中提取值。

问题是,当我运行此代码时,会出现一个拨号框。我已插入

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")

从这里继续:https://stackoverflow.com/questions/39452159/excel-pull-data-from-one-excel-file-to-another-if-the-file-exists

1 个答案:

答案 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内置函数之前确保文件存在。