2016-01-22 97 views
2

我尝试在用户通过输入Dateconso决定的文件夹中打开工作簿。在另一个工作簿中打开工作簿复制/粘贴。错误1004 - 打开工作簿

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

执行错误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 
+1

也许这是一个明显的问题,但是''InputBox'中的手动输入是否可以在11400中输入额外的空格。 16.01.xlsm'?您可能还希望通过使用'If myFile = Dateconso'来取代直接相等,而不是使用'Instr'。这将消除简单的手动类型页面。 –

+0

当我在Dateconso框中选择了16时没有空格。 的事情是我想我的文件重命名为11400 16.01.xlsm,我得到了同样的错误... – Florian

+0

我不能使用MYFILE = Dateconso因为Dateconso的名称是文件的一部分....用于为例,文件是1400.16.01 我想找到名称为16的文件。 – Florian

回答

1

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

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

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 
+0

天哪谢谢!!!!! – Florian

+0

@Jeeped仅供将来参考,如果未提供文件路径,默认情况下,VBA代码的“寻找”文件名在哪里? –

+1

@IronMan - 几个快速测试证明,如果外部工作簿与活动工作簿位于同一文件夹中,则不需要该路径,但这不是我想要依赖的东西。系统或Excel应用程序窗口认为“当前默认目录”可能因多种原因而改变。最好在这些情况下明确,不要依赖违约。 – Jeeped

相关问题