Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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 将所有类型的文件(cvs、xls、txt)从文件夹目录导入到一个主excel文件中_Vba_Excel - Fatal编程技术网

Vba 将所有类型的文件(cvs、xls、txt)从文件夹目录导入到一个主excel文件中

Vba 将所有类型的文件(cvs、xls、txt)从文件夹目录导入到一个主excel文件中,vba,excel,Vba,Excel,我正在处理一个宏,它需要选择我想要的任何文件夹,并导入该文件夹中的每种类型的文件,即cvs、xls、txt,然后将它们全部放入一个工作簿(而不是工作表)。所以所有导入的标签都会在那里。现在代码只能接受1种类型。我尝试将以下代码更改为: fileName = Dir(directory & "*.csv, *.xls,*.txt") 但什么也没发生 下面的宏现在有一个固定的目录路径,但我想弹出一个对话框,允许我灵活地选择要从中导入文件的任何文件夹。这是我到目前为止得到的,但请修改它或制作

我正在处理一个宏,它需要选择我想要的任何文件夹,并导入该文件夹中的每种类型的文件,即cvs、xls、txt,然后将它们全部放入一个工作簿(而不是工作表)。所以所有导入的标签都会在那里。现在代码只能接受1种类型。我尝试将以下代码更改为:

fileName = Dir(directory & "*.csv, *.xls,*.txt")
但什么也没发生

下面的宏现在有一个固定的目录路径,但我想弹出一个对话框,允许我灵活地选择要从中导入文件的任何文件夹。这是我到目前为止得到的,但请修改它或制作一个最有效的新版本

Sub Input_Sheets()

Dim directory As String, fileName As String, sheet As Worksheet, total As Integer
Dim WrdArray() As String

Application.ScreenUpdating = False
Application.DisplayAlerts = False

directory = "C:\Users\ktam\Desktop\New folder\"

'Switch to the preferred type the folders hold. (It cannot hold 2 types)
'fileName = Dir(directory & "*.xl??")
fileName = Dir(directory & "*.csv")

'As long as the file name is found in the folder, import the file.
Do While fileName <> ""
Workbooks.Open (directory & fileName) 'Opens a random file from the folder
    'WrdArray() = Split(fileName, ".")

    For Each sheet In Workbooks(fileName).Worksheets
    'Workbooks(fileName).ActiveSheet.Name = WrdArray(0) '0 Puts in the name of the document

                total = ThisWorkbook.Worksheets.Count
                Workbooks(fileName).Worksheets(sheet.Name).Copy After:=ThisWorkbook.Worksheets(total)
    Next sheet

Workbooks(fileName).Close
fileName = Dir()
Loop

Application.ScreenUpdating = True
Application.DisplayAlerts = True

MsgBox "Complete"

End Sub
子输入表单()
Dim目录为字符串,文件名为字符串,工作表为工作表,总计为整数
Dim WrdArray()作为字符串
Application.ScreenUpdating=False
Application.DisplayAlerts=False
directory=“C:\Users\ktam\Desktop\New folder\”
'切换到文件夹保存的首选类型。(它不能容纳2种类型)
'fileName=Dir(目录&“*.xl??”)
fileName=Dir(目录&“*.csv”)
'只要在文件夹中找到文件名,就导入该文件。
文件名“”时执行此操作
Workbooks.Open(目录和文件名)'从文件夹中打开一个随机文件
'WrdArray()=Split(文件名,“.”)
对于工作簿中的每张工作表(文件名)。工作表
“工作簿(文件名).ActiveSheet.Name=WrdArray(0)”0输入文档的名称
总计=ThisWorkbook.Worksheets.Count
工作簿(文件名).Worksheets(sheet.Name).Copy After:=此工作簿.Worksheets(总计)
下一页
工作簿(文件名)。关闭
fileName=Dir()
环
Application.ScreenUpdating=True
Application.DisplayAlerts=True
MsgBox“完成”
端接头

我有这段代码,它对于在文件夹中循环并根据文件名将文件加载到数组中非常有用:

Global sfolder As String

sub file_merger()

file = Dir(folderchooser)

dim trackerfiles(1 to 500) as variant

counter = 1

Do While file <> ""

    if instr(1,file,".xlsx") > 0 or instr(1,file,".csv") > 0 then   


    trackerfiles(counter) = sfolder & "\" & file
    file = Dir()
    counter = counter + 1

    If file = "" Then
        Exit Do
    End If

    End if

Loop


end sub

Function folderchooser() As String

With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Select a folder"
    .AllowMultiSelect = False
    .Show
    sfolder = .SelectedItems(1)
End With

folderchooser = sfolder & "\"

End Function
全局文件夹作为字符串
子文件_合并()
file=Dir(文件夹选择器)
变光跟踪器文件(1到500)作为变型
计数器=1
文件“”时执行此操作
如果instr(1,文件“.xlsx”)>0或instr(1,文件“.csv”)>0,则
TrackerFile(计数器)=s文件夹和“\”文件
file=Dir()
计数器=计数器+1
如果file=”“,则
退出Do
如果结束
如果结束
环
端接头
函数folderchooser()作为字符串
使用Application.FileDialog(msoFileDialogFolderPicker)
.Title=“选择一个文件夹”
.AllowMultiSelect=False
显示
sfolder=.SelectedItems(1)
以
folderchooser=sfolder&“\”
端函数

您可以使用它将文件加载到数组中,然后编写自己的代码将文件导入工作簿(棘手的部分是在文件夹中循环)。

我有一段代码,它非常有用,可以在文件夹中循环,并根据文件名将文件加载到数组中:

Global sfolder As String

sub file_merger()

file = Dir(folderchooser)

dim trackerfiles(1 to 500) as variant

counter = 1

Do While file <> ""

    if instr(1,file,".xlsx") > 0 or instr(1,file,".csv") > 0 then   


    trackerfiles(counter) = sfolder & "\" & file
    file = Dir()
    counter = counter + 1

    If file = "" Then
        Exit Do
    End If

    End if

Loop


end sub

Function folderchooser() As String

With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "Select a folder"
    .AllowMultiSelect = False
    .Show
    sfolder = .SelectedItems(1)
End With

folderchooser = sfolder & "\"

End Function
全局文件夹作为字符串
子文件_合并()
file=Dir(文件夹选择器)
变光跟踪器文件(1到500)作为变型
计数器=1
文件“”时执行此操作
如果instr(1,文件“.xlsx”)>0或instr(1,文件“.csv”)>0,则
TrackerFile(计数器)=s文件夹和“\”文件
file=Dir()
计数器=计数器+1
如果file=”“,则
退出Do
如果结束
如果结束
环
端接头
函数folderchooser()作为字符串
使用Application.FileDialog(msoFileDialogFolderPicker)
.Title=“选择一个文件夹”
.AllowMultiSelect=False
显示
sfolder=.SelectedItems(1)
以
folderchooser=sfolder&“\”
端函数

您可以使用它将文件加载到数组中,然后编写自己的代码将文件导入工作簿(棘手的部分是在文件夹中循环)。

使用
*.
,并在循环时通过检查扩展名筛选出所需的类型…太棒了!它负责将我想要的所有内容导入文档。现在只要我能从我选择的任何文件夹中选择它。查看页面上的最后一个函数use
*.*
并通过检查扩展名筛选出所需的类型…非常好!它负责将我想要的所有内容导入文档。现在只要我能从我选择的任何文件夹中选择它。请参阅本页上的最后一个函数