【问题标题】:Error 1004 - Open a workbook错误 1004 - 打开工作簿
【发布时间】:2016-01-22 18:28:52
【问题描述】:

我尝试在用户通过输入 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

【问题讨论】:

  • 也许这是一个显而易见的问题,但是InputBox 中的手动输入是否可能是在'11400. 16.01.xlsm 中输入了额外的空格?您可能还希望通过使用If 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)) 没有改变问题...

标签: vba excel


【解决方案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

【讨论】:

  • @Jeeped 仅供参考,如果没有提供文件路径,VBA代码默认在哪里“寻找”文件名?
  • @IronMan - 一些快速测试证明,如果外部工作簿与活动工作簿位于同一文件夹中,则您不需要该路径,但这不是我想要依赖的。系统或 Excel 应用程序窗口认为的“当前默认目录”可能因多种原因而改变。在这些情况下最好是明确的,而不是依赖默认值。
  • @Jeeped 感谢您的解释。我同意,绝对不是可以依赖的东西,但仍然有用。这样,如果有人没有定义文件路径并且活动工作簿和外部工作簿位于同一目录中,它将起作用,但此信息可能会帮助某些人在某些时候将其中一个工作簿移动到另一个目录,然后无法弄清楚为什么他们的代码不起作用。
  • @IronMan - 以前从未发生过这样的事情!
猜你喜欢
  • 2017-01-22
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多