Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环代码错误Excel表示它可以';我找不到文件_Excel_Vba - Fatal编程技术网

循环代码错误Excel表示它可以';我找不到文件

循环代码错误Excel表示它可以';我找不到文件,excel,vba,Excel,Vba,我正在尝试编写一个代码来刷新文件夹中以“FY”开头的所有工作簿。使用当前代码,前两个工作簿会刷新,但当涉及到第三个工作簿时,会出现以下错误: 很抱歉,我们找不到FY20 11-15.xlsm\FY20 1-5.xlsm。是否可能已将其移动、重命名或删除?” 工作簿的路径是“C:\Documents\Database\Sales” 代码如下: 子刷新数据() 将文件设置为字符串 把书当作线 file=Application.ThisWorkbook.Path book=Dir(文件&“\FY*.x

我正在尝试编写一个代码来刷新文件夹中以“FY”开头的所有工作簿。使用当前代码,前两个工作簿会刷新,但当涉及到第三个工作簿时,会出现以下错误:

很抱歉,我们找不到FY20 11-15.xlsm\FY20 1-5.xlsm。是否可能已将其移动、重命名或删除?”

工作簿的路径是“C:\Documents\Database\Sales”

代码如下:

子刷新数据()
将文件设置为字符串
把书当作线
file=Application.ThisWorkbook.Path
book=Dir(文件&“\FY*.xlsm”)
文件“”时执行此操作
将wb设置为工作簿
设置wb=Workbooks.Open(文件&“\”&book)
呼叫刷新
wb.Close savechanges:=真
file=Dir
环
端接头

您没有清楚地命名变量,并且
文件实际上包含一个路径
file=Application。ThisWorkbook.path
因此您混淆了所有内容。让变量名更有意义!确保变量的名称与它们包含的内容一致,否则会让您感到困惑

Sub refreshdata()
    Dim Path As String
    Path = Application.ThisWorkbook.Path

    Dim FileName As String    
    FileName = Dir(Path & "\FY*.xlsm")

    Do While FileName <> vbNullString
        Dim wb As Workbook
        Set wb = Workbooks.Open(Path & "\" & FileName)

        Call Refresh
        wb.Close SaveChanges:=True
        FileName = Dir
    Loop
End Sub
子刷新数据()
将路径设置为字符串
Path=Application.ThisWorkbook.Path
将文件名设置为字符串
FileName=Dir(路径&“\FY*.xlsm”)
当文件名为vbNullString时执行
将wb设置为工作簿
设置wb=Workbooks.Open(路径和“\”文件名)
呼叫刷新
wb.Close SaveChanges:=真
FileName=Dir
环
端接头
怎么了?
在这里
file=Dir
设置
file
变量,该变量实际上是文件名的路径。在循环的下一次迭代中
set wb=Workbooks.Open(file&“\”&book)
是文件名的两倍,新文件名在
文件中,旧文件名在
书籍中,这是因为最初变量
文件
是文件夹路径,然后它变成了文件名。使用两个不同的变量-例如,
sPath
sFilename
只需替换
文件名即可“
with
Do While book”“
file=Dir
with
book=Dir
这不只是一个问题。打开(book)时,“book”已经是完整的字符串变量。@daveExcel否,
Dir(…)
只返回文件名
book=Dir(file&“\FY*.xlsm”)
在路径
file
中查找与
FY*.xlsm
匹配的第一个文件名,并仅返回文件名。@Pᴇ是的,
file&“\”book
只是复制了目录,这就是我要说的。