Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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 如何基于可变条件从多个工作簿复制数据行,然后粘贴到主工作簿中_Excel_Vba - Fatal编程技术网

Excel 如何基于可变条件从多个工作簿复制数据行,然后粘贴到主工作簿中

Excel 如何基于可变条件从多个工作簿复制数据行,然后粘贴到主工作簿中,excel,vba,Excel,Vba,我对VBA非常陌生,经过数小时的搜索,我找到了一个代码,可以将多个工作簿中的所有数据行复制到主工作簿中。用户工作簿中的数据每天更新。但是,我不希望从用户工作簿中删除数据,因此当我再次运行宏以捕获新数据时,它会再次复制所有行,从而复制主工作簿中的数据。工作簿的T列包含数据行条目的周数。我想使用输入框指定要搜索的周数,然后复制整行。这样,我可以每周运行一次宏,但只能使用前几周的数据而不是整个工作表更新主控。这是我目前拥有的宏。有人能帮我修改一下吗 Sub copyDataFromMultip

我对VBA非常陌生,经过数小时的搜索,我找到了一个代码,可以将多个工作簿中的所有数据行复制到主工作簿中。用户工作簿中的数据每天更新。但是,我不希望从用户工作簿中删除数据,因此当我再次运行宏以捕获新数据时,它会再次复制所有行,从而复制主工作簿中的数据。工作簿的T列包含数据行条目的周数。我想使用输入框指定要搜索的周数,然后复制整行。这样,我可以每周运行一次宏,但只能使用前几周的数据而不是整个工作表更新主控。这是我目前拥有的宏。有人能帮我修改一下吗

    Sub copyDataFromMultipleWorkbooksIntoMaster()

    Dim FolderPath As String, Filepath As String, Filename As String

    FolderPath = "C:\Users\25dbrown\Desktop\Prototypes\"

    Filepath = FolderPath & "*.xlsx*"

    Filename = Dir(Filepath)

    Dim lastrow As Long, lastcolumn As Long

    Do While Filename <> ""
     Workbooks.Open (FolderPath & Filename)
     lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
     lastcolumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
     Range(Cells(2, 1), Cells(lastrow, lastcolumn)).Copy
     Application.DisplayAlerts = False
     ActiveWorkbook.Close

     erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
     lastcolumn = ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
     ActiveSheet.Paste Destination:=Worksheets("2015").Rang(Cells(erow,1),  Cells(erow, lastcolumn))                


     Filename = Dir

     Loop

     End Sub
Sub-copyDataFromMultipleWorkbooksIntoMaster()
Dim FolderPath为字符串,Filepath为字符串,Filename为字符串
FolderPath=“C:\Users\25dbrown\Desktop\prototype\”
Filepath=FolderPath&“*.xlsx*”
Filename=Dir(文件路径)
将lastrow变长,lastcolumn变长
文件名“”时执行此操作
工作簿.打开(文件夹路径和文件名)
lastrow=ActiveSheet.Cells(Rows.Count,1).End(xlUp).Row
lastcolumn=ActiveSheet.Cells(1,Columns.Count).End(xlToLeft).Column
范围(单元格(2,1),单元格(lastrow,lastcolumn))。复制
Application.DisplayAlerts=False
活动工作簿。关闭
erow=Sheet1.单元格(Rows.Count,1).结束(xlUp).偏移量(1,0).行
lastcolumn=ActiveSheet.Cells(1,Columns.Count).End(xlToLeft).Column
ActiveSheet.Paste目标:=工作表(“2015”).范围(单元格(erow,1),单元格(erow,lastcolumn))
Filename=Dir
环
端接头

未测试。For循环主要是您要查找的内容

Sub copyDataFromMultipleWorkbooksIntoMaster()

Dim FolderPath As String, Filepath As String, Filename As String

FolderPath = "C:\Users\25dbrown\Desktop\Prototypes\"
Filepath = FolderPath & "*.xlsx*"
Filename = Dir(Filepath)

Dim week As Long
Dim tag As Long
Dim lastrow As Long
Dim sourcewb As Workbook
Dim ws2015 As Worksheet

week = InputBox("Which week?")
Set ws2015 = ThisWorkbook.Worksheets("2015")

Do While Filename <> ""

erow = ws2015.Cells(Rows.Count, 1).End(xlUp).Row

Set sourcewb = Workbooks.Open(FolderPath & Filename)
lastrow = sourcewb.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row   'suggest changing activesheet to worksheet("name")

'loop through column T for the specified week
For i = 1 To lastrow
    If sourcewb.ActiveSheet.Cells(i, 20).Value = week Then  'suggest changing activesheet to worksheet("name")
    'upon match store that row to a variable for copying
    tag = i
    Exit For
    End If
Next

sourcewb.Worksheets(1).Rows(tag).Copy   'suggest changing worksheet to worksheet("name")
ws2015.Cells(erow, 1).PasteSpecial

sourcewb.close

Filename = Dir

Loop

End Sub
Sub-copyDataFromMultipleWorkbooksIntoMaster()
Dim FolderPath为字符串,Filepath为字符串,Filename为字符串
FolderPath=“C:\Users\25dbrown\Desktop\prototype\”
Filepath=FolderPath&“*.xlsx*”
Filename=Dir(文件路径)
漫长的一周
模糊标签一样长
最后一排一样长
将sourcewb设置为工作簿
Dim ws2015作为工作表
周=输入框(“哪一周?”)
设置ws2015=此工作簿。工作表(“2015”)
文件名“”时执行此操作
erow=ws2015.Cells(Rows.Count,1).End(xlUp).Row
设置sourcewb=Workbooks.Open(FolderPath和Filename)
lastrow=sourcewb.ActiveSheet.Cells(Rows.Count,1).End(xlUp).Row'建议将ActiveSheet更改为工作表(“名称”)
'在指定的一周内循环通过T列
对于i=1到最后一行
如果sourcewb.ActiveSheet.Cells(i,20).Value=week,则“建议将ActiveSheet更改为工作表(“名称”)
'匹配时,将该行存储到变量以进行复制
tag=i
退出
如果结束
下一个
sourcewb.Worksheets(1).行(标记).Copy'建议将工作表更改为工作表(“名称”)
ws2015.细胞(erow,1).特殊
sourcewb.close
Filename=Dir
环
端接头