Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Vba 错误1004-打开工作簿_Vba_Excel - Fatal编程技术网

Vba 错误1004-打开工作簿

Vba 错误1004-打开工作簿,vba,excel,Vba,Excel,我尝试在一个文件夹中打开一个工作簿,用户通过输入Dateconso来决定。在另一个工作簿中打开工作簿副本/粘贴 问题是代码在打开文件时中断 执行错误1004:'11400。16.01.未找到xlsm 在这里,工作簿的名称是11400.16.01.xlsm,11400之间没有空格。和16(即Dateconso) 我知道它无法打开此工作簿,因为它不存在…但这不是我要打开的工作簿 Sub consolidation() ' ' Macro ' Décl

我尝试在一个文件夹中打开一个工作簿,用户通过输入Dateconso来决定。在另一个工作簿中打开工作簿副本/粘贴

问题是代码在打开文件时中断

执行错误1004:'11400。16.01.未找到xlsm

在这里,工作簿的名称是11400.16.01.xlsm,11400之间没有空格。和16(即Dateconso)

我知道它无法打开此工作簿,因为它不存在…但这不是我要打开的工作簿

Sub consolidation()
        '
        ' Macro

        ' Déclaration des variables
          Dim wb As Workbook
          Dim myPath As String
          Dim myFile As String
          Dim Dateconso As String


         'Optimisation de la Macro Speed
         Application.ScreenUpdating = True
         Application.EnableEvents = True


        'Sélection de la date
          Dateconso = InputBox("Quelle date souhaitez-vous consolider?","Question")
         If Dateconso = "" Then Exit Sub 'Si rien exit le  programme


         'Trouve les fichiers qui on la date associée
         myFile = Dir("Z:\7. Personnel\Florian\Projet_BDC\Test\*.xlsm")

    While myFile <> ""
        If InStr(myFile, Dateconso) > 0 Then 'si tu trouve la date recherchée, alors ouvre le fichier puis copie toute puis colle
           Set wb = Workbooks.Open(Filename:=myFile)
           wb.Worksheets(1).Range("A1").Select
           Range(Selection, Selection.End(xlToRight)).Select
           Range(Selection, Selection.End(xlDown)).Select
           Selection.Copy
           Workbooks("Consolidation.xlsm").Worksheets(2).Activate
           ActiveSheet.Paste
           wb.Close
           Else: MsgBox "Fichiers introuvables, vérifiez le format de date entré" 'Si il ne trouve rien, préviens l'utilisateur
           Exit Sub
        End If
        myFile = Dir()
    Wend


End Sub
子合并()
'
"宏
“Déclaration des variables
将wb设置为工作簿
将myPath设置为字符串
将myFile设置为字符串
Dim Dateconso作为字符串
'宏观速度优化'
Application.ScreenUpdating=True
Application.EnableEvents=True
日期选择
Dateconso=输入框(“请问您的合并日期是多少?”,“问题”)
如果Dateconso=“”,则退出子“Si-rien”退出le程序
“在约会协会上的浮躁之旅”
myFile=Dir(“Z:\7.personals\Florian\Projet\u BDC\Test\*.xlsm”)
而我的文件“”
如果InStr(myFile,Dateconso)>0,则“日期记录”为0,这是一个很好的例子
设置wb=Workbooks.Open(文件名:=myFile)
wb.工作表(1).范围(“A1”)。选择
范围(选择,选择。结束(xlToRight))。选择
范围(选择,选择。结束(xlDown))。选择
选择,复制
工作簿(“Consolidation.xlsm”)。工作表(2)。激活
活动表。粘贴
wb.关闭
其他:MsgBox“Fichiers introvables,vérifiez le format de date entré”是一个简单的例子,使用率较高
出口接头
如果结束
myFile=Dir()
温德
端接头

这实际上与VBA误读文件名的方式无关。事实上,出于某种原因,修复(例如额外空格字符)在包含句点的文件名中是必要的。不要使用文件名

问题是您没有提供路径和文件名。仅返回文件名,而不是完整路径。在使用该路径之前,需要将其重新添加

Dim fp As String, fn As String

fp = "Z:\7. Personnel\Florian\Projet_BDC\Test\"
fn = Dir(fp & "*.xlsm")

While fn <> ""
    If InStr(fn, Dateconso) > 0 Then 'si tu trouve la date recherchée, alors ouvre le fichier puis copie toute puis colle
       Set wb = Workbooks.Open(Filename:=fp & fn)
            'do stuff
       wb.Close
       Else: MsgBox "Fichiers introuvables, vérifiez le format de date entré" 'Si il ne trouve rien, préviens l'utilisateur
       Exit Sub
    End If
    fn = Dir()
Wend
Dim fp作为字符串,fn作为字符串
fp=“Z:\7.personal\Florian\Projet\u BDC\Test\”
fn=Dir(fp&“*.xlsm”)
而fn“
如果InStr(fn,Dateconso)>0,则日期记录的时间越长,时间越长
设置wb=Workbooks.Open(文件名:=fp&fn)
“做事
wb.关闭
其他:MsgBox“Fichiers introvables,vérifiez le format de date entré”是一个简单的例子,使用率较高
出口接头
如果结束
fn=Dir()
温德

也许这是一个明显的问题,但是否可能
输入框中的手动输入在
'11400中带有额外的空格。16.01.xlsm
?如果myFile=Dateconso
,您可能还需要使用
而不是使用
Instr
来实现直接相等。这将使您摆脱简单的手动类型页面。当我在Dateconso框中选择16时,没有空格。问题是我试图将我的文件重命名为11400。16.01.xlsm和我得到相同的错误…我不能使用myFile=Dateconso,因为Dateconso是名称文件的一部分。。。。例如,文件是1400.16.01,我想找到名称为16的文件。我尝试了trim,得到了相同的错误myFile=replace(myFile,chr(46)&chr(32),chr(46))没有改变问题…@Jeeped仅供将来参考,如果没有提供文件路径,VBA代码“looking”在哪里对于默认文件名?@IronMan-几个快速测试证明,如果外部工作簿与活动工作簿位于同一文件夹中,则不需要该路径,但这不是我想要依赖的。系统或Excel应用程序窗口认为“当前默认目录”可能因多种原因而更改。“在这些情况下最好是明确的,不要依赖默认值。”Jeeped感谢您的解释。我同意,这肯定不是什么可以依靠的东西,但还是有用的。这样,如果任何人不定义文件路径,并且活动工作簿和外部工作簿位于同一目录中,则可以工作,但此信息可能会帮助某些人在某个时候将其中一个工作簿移动到另一个目录,然后无法找出其代码不工作的原因。@IronMan-这不是以前从未发生过的情况!