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
Excel 循环浏览目录中的所有xls文件,复制范围,并粘贴到docx文件?_Excel_Vba_Loops_Ms Word_Directory - Fatal编程技术网

Excel 循环浏览目录中的所有xls文件,复制范围,并粘贴到docx文件?

Excel 循环浏览目录中的所有xls文件,复制范围,并粘贴到docx文件?,excel,vba,loops,ms-word,directory,Excel,Vba,Loops,Ms Word,Directory,我在一个目录中有大约500个Excel文件。所有文件在第一张图纸上都有一个表(大小相同)。我的客户希望他们都在一个word文件中。我不是VBA专家,我不是在网上找到的一个代码的实验者。到目前为止,我已经在一个目录中的所有文件中进行了循环。它还选择并复制特定范围。但是我如何将数据传输到word文件呢 以下是我所做的: Sub LoopAllExcelFilesInFolder() Dim wb As Workbook Dim myPath As String Dim myF

我在一个目录中有大约500个Excel文件。所有文件在第一张图纸上都有一个表(大小相同)。我的客户希望他们都在一个word文件中。我不是VBA专家,我不是在网上找到的一个代码的实验者。到目前为止,我已经在一个目录中的所有文件中进行了循环。它还选择并复制特定范围。但是我如何将数据传输到word文件呢

以下是我所做的:

Sub LoopAllExcelFilesInFolder()
    Dim wb As Workbook
    Dim myPath As String
    Dim myFile As String
    Dim myExtension As String
    Dim FldrPicker As FileDialog
    'Optimize Macro Speed
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    'Retrieve Target Folder Path From User
    Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker)
    With FldrPicker
        .Title = "Select A Target Folder"
        .AllowMultiSelect = False
        If .Show <> -1 Then GoTo NextCode
        myPath = .SelectedItems(1) & "\"
    End With
    'In Case of Cancel
NextCode:
    myPath = myPath
    If myPath = "" Then GoTo ResetSettings
    'Target File Extension (must include wildcard "*")
    myExtension = "*.xls"
    'Target Path with Ending Extention
    myFile = Dir(myPath & myExtension)
    'Loop through each xls files dir
    Do While myFile <> ""
        'Set variable equal to opened workbook
        Set wb = Workbooks.Open(Filename:=myPath & myFile)
        'Select range and copy
        Range("G10:M25").Select
        Selection.Copy
        'Save and Close Workbook
        wb.Close SaveChanges:=True
        'Get next file name
        myFile = Dir
        DoEvents
    Loop
    'Message Box when tasks are completed
    MsgBox "Task Complete!"
ResetSettings:
    'Reset Macro Optimization Settings
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub
Sub-LoopAllExcelFilesInFolder()
将wb设置为工作簿
将myPath设置为字符串
将myFile设置为字符串
Dim myExtension作为字符串
Dim FldrPicker As FILE对话框
'优化宏速度
Application.ScreenUpdating=False
Application.EnableEvents=False
Application.Calculation=xlCalculationManual
'从用户检索目标文件夹路径
Set FldrPicker=Application.FileDialog(msoFileDialogFolderPicker)
用FldrPicker
.Title=“选择目标文件夹”
.AllowMultiSelect=False
如果.Show-1,则转到下一个代码
myPath=.SelectedItems(1)和“\”
以
"如果取消,
下一个代码:
myPath=myPath
如果myPath=”“,则转到重置设置
'目标文件扩展名(必须包含通配符“*”)
myExtension=“*.xls”
'具有结束扩展名的目标路径
myFile=Dir(myPath&myExtension)
'循环遍历每个xls文件目录
当我的文件“”时执行此操作
'将变量设置为等于打开的工作簿
设置wb=Workbooks.Open(文件名:=myPath&myFile)
'选择范围并复制
范围(“G10:M25”)。选择
选择,复制
'保存并关闭工作簿
wb.Close SaveChanges:=真
'获取下一个文件名
myFile=Dir
多芬特
环
'任务完成时的消息框
MsgBox“任务完成!”
重置设置:
'重置宏优化设置
Application.EnableEvents=True
Application.Calculation=xlCalculationAutomatic
Application.ScreenUpdating=True
端接头

以下代码来源于您提供的代码,并根据您提供的代码进行了调整。你应该通读链接的解释,因为它回答了你的问题。我对下面的代码所做的唯一添加就是放置了一个计数器(
I
),这样您可以在word文档中循环添加表格

Sub LoopAllExcelFilesInFolder()

Dim wb As Workbook
Dim myPath As String
Dim myFile As String
Dim myExtension As String
Dim FldrPicker As FileDialog

Dim tbl As Excel.Range
Dim WordApp As Word.Application
Dim myDoc As Word.Document
Dim WordTable As Word.Table

Dim i As Long

'Optimize Macro Speed
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

'Retrieve Target Folder Path From User
Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker)

With FldrPicker
    .Title = "Select A Target Folder"
    .AllowMultiSelect = False
    If .Show <> -1 Then GoTo NextCode
    myPath = .SelectedItems(1) & "\"
End With

'In Case of Cancel
NextCode:
myPath = myPath
If myPath = "" Then GoTo ResetSettings

'Target File Extension (must include wildcard "*")
myExtension = "*.xls"

'Target Path with Ending Extention
myFile = Dir(myPath & myExtension)

On Error Resume Next

'Is MS Word already opened?
Set WordApp = GetObject(class:="Word.Application")

'Clear the error between errors
Err.Clear

'If MS Word is not already open then open MS Word
If WordApp Is Nothing Then Set WordApp = CreateObject(class:="Word.Application")

'Handle if the Word Application is not found
If Err.Number = 429 Then
    MsgBox "Microsoft Word could not be found, aborting."
    GoTo EndRoutine
End If

On Error GoTo 0

'Make MS Word Visible and Active
WordApp.Visible = True
WordApp.Activate

'Create a New Document
Set myDoc = WordApp.Documents.Add


'Loop through each xls files dir
i = 1
Do While myFile <> ""
'Set variable equal to opened workbook
Set wb = Workbooks.Open(Filename:=myPath & myFile)

'Assign range and Copy
Set tbl = Range("G10:M25")
tbl.Copy

'Paste Table into MS Word
myDoc.Paragraphs(i).Range.PasteExcelTable _
                    LinkedToExcel:=False, _
                    WordFormatting:=False, _
                    RTF:=False

'Autofit Table so it fits inside Word Document
Set WordTable = myDoc.Tables(i)
WordTable.AutoFitBehavior (wdAutoFitWindow)

i = i + 1 'Incrementing paragraph and table number

'Save and Close Workbook
wb.Close SaveChanges:=True

'Get next file name
myFile = Dir

DoEvents

Loop

'Message Box when tasks are completed
MsgBox "Task Complete!"

ResetSettings:
'Reset Macro Optimization Settings
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub
Sub-LoopAllExcelFilesInFolder()
将wb设置为工作簿
将myPath设置为字符串
将myFile设置为字符串
Dim myExtension作为字符串
Dim FldrPicker As FILE对话框
尺寸tbl为Excel.Range
Dim WordApp作为Word.Application
将myDoc设置为Word.Document
将WordTable设置为Word.Table
我想我会坚持多久
'优化宏速度
Application.ScreenUpdating=False
Application.EnableEvents=False
Application.Calculation=xlCalculationManual
'从用户检索目标文件夹路径
Set FldrPicker=Application.FileDialog(msoFileDialogFolderPicker)
用FldrPicker
.Title=“选择目标文件夹”
.AllowMultiSelect=False
如果.Show-1,则转到下一个代码
myPath=.SelectedItems(1)和“\”
以
"如果取消,
下一个代码:
myPath=myPath
如果myPath=”“,则转到重置设置
'目标文件扩展名(必须包含通配符“*”)
myExtension=“*.xls”
'具有结束扩展名的目标路径
myFile=Dir(myPath&myExtension)
出错时继续下一步
“Word已经打开了吗?
Set WordApp=GetObject(类:=“Word.Application”)
'清除错误之间的错误
呃,明白了
'如果MS Word尚未打开,请打开MS Word
如果WordApp为空,则设置WordApp=CreateObject(类:=“Word.Application”)
'如果找不到Word应用程序,则处理
如果错误号=429,则
MsgBox“找不到Microsoft Word,正在中止。”
跳转结束程序
如果结束
错误转到0
'使MS Word可见并处于活动状态
可见=True
WordApp.Activate
'创建新文档
设置myDoc=WordApp.Documents.Add
'循环遍历每个xls文件目录
i=1
当我的文件“”时执行此操作
'将变量设置为等于打开的工作簿
设置wb=Workbooks.Open(文件名:=myPath&myFile)
'分配范围并复制
设置tbl=范围(“G10:M25”)
tbl.副本
'将表格粘贴到MS Word中
myDoc.段落(i).范围.表格_
LinkedToExcel:=False_
WordFormatting:=False_
RTF:=假
'自动调整表格,使其适合Word文档
Set WordTable=myDoc.Tables(一)
WordTable.AutoFitBehavior(wdAutoFitWindow)
i=i+1'递增段落和表格编号
'保存并关闭工作簿
wb.Close SaveChanges:=真
'获取下一个文件名
myFile=Dir
多芬特
环
'任务完成时的消息框
MsgBox“任务完成!”
重置设置:
'重置宏优化设置
Application.EnableEvents=True
Application.Calculation=xlCalculationAutomatic
Application.ScreenUpdating=True
端接头

以下代码来源于您提供的代码,并根据您提供的代码进行了调整。你应该通读链接的解释,因为它回答了你的问题。我对下面的代码所做的唯一添加就是放置了一个计数器(
I
),这样您可以在word文档中循环添加表格

Sub LoopAllExcelFilesInFolder()

Dim wb As Workbook
Dim myPath As String
Dim myFile As String
Dim myExtension As String
Dim FldrPicker As FileDialog

Dim tbl As Excel.Range
Dim WordApp As Word.Application
Dim myDoc As Word.Document
Dim WordTable As Word.Table

Dim i As Long

'Optimize Macro Speed
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual

'Retrieve Target Folder Path From User
Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker)

With FldrPicker
    .Title = "Select A Target Folder"
    .AllowMultiSelect = False
    If .Show <> -1 Then GoTo NextCode
    myPath = .SelectedItems(1) & "\"
End With

'In Case of Cancel
NextCode:
myPath = myPath
If myPath = "" Then GoTo ResetSettings

'Target File Extension (must include wildcard "*")
myExtension = "*.xls"

'Target Path with Ending Extention
myFile = Dir(myPath & myExtension)

On Error Resume Next

'Is MS Word already opened?
Set WordApp = GetObject(class:="Word.Application")

'Clear the error between errors
Err.Clear

'If MS Word is not already open then open MS Word
If WordApp Is Nothing Then Set WordApp = CreateObject(class:="Word.Application")

'Handle if the Word Application is not found
If Err.Number = 429 Then
    MsgBox "Microsoft Word could not be found, aborting."
    GoTo EndRoutine
End If

On Error GoTo 0

'Make MS Word Visible and Active
WordApp.Visible = True
WordApp.Activate

'Create a New Document
Set myDoc = WordApp.Documents.Add


'Loop through each xls files dir
i = 1
Do While myFile <> ""
'Set variable equal to opened workbook
Set wb = Workbooks.Open(Filename:=myPath & myFile)

'Assign range and Copy
Set tbl = Range("G10:M25")
tbl.Copy

'Paste Table into MS Word
myDoc.Paragraphs(i).Range.PasteExcelTable _
                    LinkedToExcel:=False, _
                    WordFormatting:=False, _
                    RTF:=False

'Autofit Table so it fits inside Word Document
Set WordTable = myDoc.Tables(i)
WordTable.AutoFitBehavior (wdAutoFitWindow)

i = i + 1 'Incrementing paragraph and table number

'Save and Close Workbook
wb.Close SaveChanges:=True

'Get next file name
myFile = Dir

DoEvents

Loop

'Message Box when tasks are completed
MsgBox "Task Complete!"

ResetSettings:
'Reset Macro Optimization Settings
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub
Sub-LoopAllExcelFilesInFolder()
将wb设置为工作簿
将myPath设置为字符串
将myFile设置为字符串
Dim myExtension作为字符串
Dim FldrPicker As FILE对话框
尺寸tbl为Excel.Range
Dim WordApp作为Word.Application
将myDoc设置为Word.Document
将WordTable设置为Word.Table
我想我会坚持多久
'优化宏速度
Application.ScreenUpdating=False
Application.EnableEvents=False
Application.Calculation=xlCalculationManual
'从用户检索目标文件夹路径
Set FldrPicker=Application.FileDialog(msoFileDialogFolderPicker)
用FldrPicker
.Title=“选择目标文件夹”
.AllowMultiSelect=False
如果.Show-1,则转到下一个代码
myPath=.SelectedItems(1)和“\”
以
"如果取消,
下一个代码:
myPath=myPath
如果myPath=”“,则转到重置设置
'目标文件扩展名(必须包含通配符“*”)
myExtension=“*.xls”
'具有结束扩展名的目标路径
myFile=Dir(myPath&myExtension)
出错时继续下一步
“Word女士已经打开了吗