Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.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 Excel目录返回意外的空值_Vba_Excel - Fatal编程技术网

Vba Excel目录返回意外的空值

Vba Excel目录返回意外的空值,vba,excel,Vba,Excel,我正在尝试编写一个简单的例程,将所有Excel工作表放在一个目录中,并将它们复制到主工作表的选项卡中。以下是我正在尝试的: Sub GetSheets() myPath = "C:\Users\Brian.Scott\Documents\2017_INVENTORY\TestInv" Filename = Dir(myPath) MsgBox (Filename) Do While Filename <> "" Workbook

我正在尝试编写一个简单的例程,将所有Excel工作表放在一个目录中,并将它们复制到主工作表的选项卡中。以下是我正在尝试的:

Sub GetSheets()
      myPath = "C:\Users\Brian.Scott\Documents\2017_INVENTORY\TestInv"
      Filename = Dir(myPath)
      MsgBox (Filename)
    Do While Filename <> ""
      Workbooks.Open Filename:=myPath & Filename, ReadOnly:=True
      For Each Sheet In ActiveWorkbook.Sheets
      Sheet.Copy After:=ThisWorkbook.Sheets(1)
      Next Sheet
      Workbooks(Filename).Close
      Filename = Dir()
    Loop
  End Sub
Sub-GetSheets()
myPath=“C:\Users\Brian.Scott\Documents\2017\u INVENTORY\TestInv”
Filename=Dir(myPath)
MsgBox(文件名)
文件名“”时执行此操作
工作簿。打开文件名:=myPath&Filename,只读:=True
对于ActiveWorkbook.Sheets中的每个工作表
Sheet.Copy After:=此工作簿.Sheets(1)
下一页
工作簿(文件名)。关闭
Filename=Dir()
环
端接头
当什么都没发生的时候,我把它放进了MsgBox。它返回空值。myPath返回正确的名称-我从资源管理器复制并粘贴了该名称以避免拼写错误。我的目录中只有excel文件,所以我不会检查错误。这是一个一次性的需求,但是目录中有200多个文件,所以我想我可以在代码上花点时间。
如果有任何想法,我将不胜感激,因为我对此非常熟悉。

声明所有变量-在每个模块的顶部指定
Option Explicit
,然后声明您使用的每个变量,直到代码再次编译。不这样做只会自找麻烦;VBA很乐意编译和运行一个打字错误,调试一点也不有趣。使用选项显式。总是

Option Explicit

Public Sub GetSheets()
    Const myPath As String = "C:\Users\Brian.Scott\Documents\2017_INVENTORY\"
    Const myFilter As String = "TestInv*.xls?"

    Dim myFilename As String
    myFilename = Dir(myPath & myFilter)

    Do While myFilename <> vbNullString
        MsgBox myFilename
        With Workbooks.Open(Filename:=myPath & myFilename, ReadOnly:=True)
            Dim sh As Worksheet
            For Each sh In .Worksheets
                sh.Copy After:=ThisWorkbook.Sheets(1)
            Next
            .Close
        End With
        Filename = Dir
    Loop
End Sub

这就是为什么我将
myPath
字符串拆分为一个路径和一个过滤器:您将过滤器提供给
Dir
函数,并提供
工作簿。打开
函数时,使用返回的
Dir
文件名的路径。

类似的东西应该可以工作

   Sub GetSheets()
      myPath = "C:\Users\Brian.Scott\Documents\2017_INVENTORY\TestInv\"
      Filename = Dir(myPath, vbNormal)
      MsgBox (Filename)
    Do While Filename <> ""
      Workbooks.Open Filename:=myPath & Filename, ReadOnly:=True
      For Each Sheet In ActiveWorkbook.Sheets
      Sheet.Copy After:=ThisWorkbook.Sheets(1)
      Next Sheet
      Workbooks(Filename).Close
      Filename = Dir()
    Loop
  End Sub
Sub-GetSheets()
myPath=“C:\Users\Brian.Scott\Documents\2017\u INVENTORY\TestInv\”
Filename=Dir(myPath,vbNormal)
MsgBox(文件名)
文件名“”时执行此操作
工作簿。打开文件名:=myPath&Filename,只读:=True
对于ActiveWorkbook.Sheets中的每个工作表
Sheet.Copy After:=此工作簿.Sheets(1)
下一页
工作簿(文件名)。关闭
Filename=Dir()
环
端接头

您忘记文件通配符了吗?-<代码>“C:\Users\Brian.Scott\Documents\2017\u INVENTORY\TestInv\*.XLS*”
在myPath和文件名之间还需要一个反斜杠。对于记录,
Null
不是
vbNullString
Null
是一个非常特殊的值,在针对Excel对象模型编写的VBA代码中,您不太可能需要它,甚至不会遇到它。请发布答案,不要在注释中回答;-)文件是xlsx,这是第二个的原因*我可能需要一些小的修改(我想我的解释是不够的),它就像一个魅力!我需要重命名选项卡-我可以使用特定的单元格作为名称。我应该在进门的路上,还是在我把它们写进母版纸之后再做呢?你可以用你想用的任何方式来做——只要你永远不会得到两张同名的纸,一切都会顺利的。我会尝试在循环体中进行。我想
sh.Copy
会激活创建的工作表,所以你应该去
ActiveSheet.Name=whateverYouMakeItBe
出于某种原因,我没有得到目录中的所有工作表-只有4/6检查你的过滤器,比较缺少的文件名,相应地调整。如果它们看起来相同,请注意前导/尾随空格。我是否将过滤器设置为*.xls?我想这会抓住一切。名字之间唯一的区别是前导日期。“1-3-2017库存”未被使用,但“1-9-2017库存”正在被提取
   Sub GetSheets()
      myPath = "C:\Users\Brian.Scott\Documents\2017_INVENTORY\TestInv\"
      Filename = Dir(myPath, vbNormal)
      MsgBox (Filename)
    Do While Filename <> ""
      Workbooks.Open Filename:=myPath & Filename, ReadOnly:=True
      For Each Sheet In ActiveWorkbook.Sheets
      Sheet.Copy After:=ThisWorkbook.Sheets(1)
      Next Sheet
      Workbooks(Filename).Close
      Filename = Dir()
    Loop
  End Sub