Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 VBA-循环文件夹中的文件,复制范围,粘贴到此工作簿中_Vba_Excel_Loops_Copy Paste - Fatal编程技术网

Excel VBA-循环文件夹中的文件,复制范围,粘贴到此工作簿中

Excel VBA-循环文件夹中的文件,复制范围,粘贴到此工作簿中,vba,excel,loops,copy-paste,Vba,Excel,Loops,Copy Paste,我有500个excel文件和数据。我会将所有这些数据合并到一个文件中 实现此目标的任务列表: 我想循环一个文件夹中的所有文件 打开文件 复制此范围“B3:I102” 将其粘贴到活动工作簿的第一页 重复,但将新数据粘贴到下面 我已经完成了任务1-4,但我需要任务5的帮助,最后一点-将数据粘贴到现有数据下并使其动态化。我在代码中用“#####突出显示了这一点 这是我从别人的问题中整理出来的代码:) 有什么建议吗 Sub LoopThroughFiles() Dim MyObj As Object,

我有500个excel文件和数据。我会将所有这些数据合并到一个文件中

实现此目标的任务列表:

  • 我想循环一个文件夹中的所有文件
  • 打开文件
  • 复制此范围“B3:I102”
  • 将其粘贴到活动工作簿的第一页
  • 重复,但将新数据粘贴到下面
  • 我已经完成了任务1-4,但我需要任务5的帮助,最后一点-将数据粘贴到现有数据下并使其动态化。我在代码中用“#####突出显示了这一点

    这是我从别人的问题中整理出来的代码:)

    有什么建议吗

    Sub LoopThroughFiles()
    Dim MyObj As Object, 
    MySource As Object, 
    file As Variant
    Dim wbThis                  As Workbook     'workbook where the data is to be pasted, aka Master file
    Dim wbTarget                As Workbook     'workbook from where the data is to be copied from, aka Overnights file
    Dim LastRow As Long
    Dim sht1 As Worksheet
    Dim sht2 As Worksheet
    
    'set to the current active workbook (the source book, the Master!)
    Set wbThis = ActiveWorkbook
    Set sht1 = wbThis.Sheets("Sheet1")
    
    Folder = "\\dne\ldc\research-dept\3 CEEMEA\15. EMB\Turkey\TLC Overnight & Weekly Reports\weekly (majeed)\"
    Fname = Dir(Folder)
    
    While (Fname <> "")
    
      Set wbTarget = Workbooks.Open(Filename:=Folder & Fname)
      wbTarget.Activate
      Range("b3:i102").Copy
    
      wbThis.Activate
    
      '################################
      'NEED HELP HERE. I GET A ERROR HERE. NEEDS TO BE MORE DYNAMIC.
      sht1.Range("b1:i100").PasteSpecial
    
     Fname = Dir
    
     'close the overnight's file
      wbTarget.Close
     Wend
    
    End Sub
    
    Sub-LoopThroughFiles()
    将MyObj作为对象,
    MySource作为对象,
    文件作为变体
    将此作为要粘贴数据的工作簿,也称为主文件
    将wbTarget作为工作簿的工作簿,从中复制数据,也称为文件
    最后一排一样长
    Dim sht1作为工作表
    将sht2变暗为工作表
    '设置为当前活动工作簿(源工作簿,主工作簿!)
    设置wbThis=ActiveWorkbook
    设置sht1=wbThis.Sheets(“Sheet1”)
    Folder=“\\dne\ldc\research dept\3 CEEMEA\15.EMB\Turkey\TLC隔夜和每周报告\Weekly(majeed)\”
    Fname=Dir(文件夹)
    While(Fname“”)
    设置wbTarget=Workbooks.Open(文件名:=文件夹&Fname)
    wbTarget,激活
    范围(“b3:i102”)。副本
    这个,激活
    '################################
    “这里需要帮助。我这里有个错误。需要更具活力。
    sht1.范围(“b1:i100”).特殊
    Fname=Dir
    '关闭过夜的文件
    wbTarget,关闭
    温德
    端接头
    
    我看到您已经为此添加了一个长变量,所以请在粘贴之前查找最后一行。此外,如果数据量不同,请粘贴到单个单元格中

    我修改了你的剧本如下

    Sub LoopThroughFiles()
    Dim MyObj As Object, 
    MySource As Object, 
    file As Variant
    Dim wbThis                  As Workbook     'workbook where the data is to be pasted, aka Master file
    Dim wbTarget                As Workbook     'workbook from where the data is to be copied from, aka Overnights file
    Dim LastRow As Long
    Dim sht1 As Worksheet
    Dim sht2 As Worksheet
    
    'set to the current active workbook (the source book, the Master!)
    Set wbThis = ActiveWorkbook
    Set sht1 = wbThis.Sheets("Sheet1")
    
    Folder = "\\dne\ldc\research-dept\3 CEEMEA\15. EMB\Turkey\TLC Overnight & Weekly Reports\weekly (majeed)\"
    Fname = Dir(Folder)
    
    While (Fname <> "")
    
      Set wbTarget = Workbooks.Open(Filename:=Folder & Fname)
      wbTarget.Activate
      Range("b3:i102").Copy
    
      wbThis.Activate
    
     'Just add this line:
      lastrow = sht1.Range("b1").End(xlDown).Row + 1
     'And alter this one as follows:
      sht1.Range("B" & lastrow).PasteSpecial
    
     Fname = Dir
    
     'close the overnight's file
      wbTarget.Close
     Wend
    
    End Sub
    
    Sub-LoopThroughFiles()
    将MyObj作为对象,
    MySource作为对象,
    文件作为变体
    将此作为要粘贴数据的工作簿,也称为主文件
    将wbTarget作为工作簿的工作簿,从中复制数据,也称为文件
    最后一排一样长
    Dim sht1作为工作表
    将sht2变暗为工作表
    '设置为当前活动工作簿(源工作簿,主工作簿!)
    设置wbThis=ActiveWorkbook
    设置sht1=wbThis.Sheets(“Sheet1”)
    Folder=“\\dne\ldc\research dept\3 CEEMEA\15.EMB\Turkey\TLC隔夜和每周报告\Weekly(majeed)\”
    Fname=Dir(文件夹)
    While(Fname“”)
    设置wbTarget=Workbooks.Open(文件名:=文件夹&Fname)
    wbTarget,激活
    范围(“b3:i102”)。副本
    这个,激活
    '只需添加这一行:
    lastrow=sht1.范围(“b1”).结束(xlDown).行+1
    "并将此修改如下:
    sht1.Range(“B”和lastrow).PasteSpecial
    Fname=Dir
    '关闭过夜的文件
    wbTarget,关闭
    温德
    端接头
    
    我看到您已经为此添加了一个长变量,所以请在粘贴之前查找最后一行。此外,如果数据量不同,请粘贴到单个单元格中

    我修改了你的剧本如下

    Sub LoopThroughFiles()
    Dim MyObj As Object, 
    MySource As Object, 
    file As Variant
    Dim wbThis                  As Workbook     'workbook where the data is to be pasted, aka Master file
    Dim wbTarget                As Workbook     'workbook from where the data is to be copied from, aka Overnights file
    Dim LastRow As Long
    Dim sht1 As Worksheet
    Dim sht2 As Worksheet
    
    'set to the current active workbook (the source book, the Master!)
    Set wbThis = ActiveWorkbook
    Set sht1 = wbThis.Sheets("Sheet1")
    
    Folder = "\\dne\ldc\research-dept\3 CEEMEA\15. EMB\Turkey\TLC Overnight & Weekly Reports\weekly (majeed)\"
    Fname = Dir(Folder)
    
    While (Fname <> "")
    
      Set wbTarget = Workbooks.Open(Filename:=Folder & Fname)
      wbTarget.Activate
      Range("b3:i102").Copy
    
      wbThis.Activate
    
     'Just add this line:
      lastrow = sht1.Range("b1").End(xlDown).Row + 1
     'And alter this one as follows:
      sht1.Range("B" & lastrow).PasteSpecial
    
     Fname = Dir
    
     'close the overnight's file
      wbTarget.Close
     Wend
    
    End Sub
    
    Sub-LoopThroughFiles()
    将MyObj作为对象,
    MySource作为对象,
    文件作为变体
    将此作为要粘贴数据的工作簿,也称为主文件
    将wbTarget作为工作簿的工作簿,从中复制数据,也称为文件
    最后一排一样长
    Dim sht1作为工作表
    将sht2变暗为工作表
    '设置为当前活动工作簿(源工作簿,主工作簿!)
    设置wbThis=ActiveWorkbook
    设置sht1=wbThis.Sheets(“Sheet1”)
    Folder=“\\dne\ldc\research dept\3 CEEMEA\15.EMB\Turkey\TLC隔夜和每周报告\Weekly(majeed)\”
    Fname=Dir(文件夹)
    While(Fname“”)
    设置wbTarget=Workbooks.Open(文件名:=文件夹&Fname)
    wbTarget,激活
    范围(“b3:i102”)。副本
    这个,激活
    '只需添加这一行:
    lastrow=sht1.范围(“b1”).结束(xlDown).行+1
    "并将此修改如下:
    sht1.Range(“B”和lastrow).PasteSpecial
    Fname=Dir
    '关闭过夜的文件
    wbTarget,关闭
    温德
    端接头
    
    您如何将
    sht1.Range(“b1:i102”)
    定义为变量而不是常量

    比如:

    Dim x As Long
    Dim y As Long
    x = 1
    y = 1
    Dim rng As Range
    Set rng = Range("b"&x ,"i"&y)
    
    然后使用:

    sht1.rng
    

    请记住在while语句的末尾添加
    x=x+100和y=y+100
    (这样它会在每次粘贴之间更新新值)。

    如何将
    sht1.Range(“b1:i102”)
    定义为变量而不是常量

    比如:

    Dim x As Long
    Dim y As Long
    x = 1
    y = 1
    Dim rng As Range
    Set rng = Range("b"&x ,"i"&y)
    
    然后使用:

    sht1.rng
    

    只需记住在while语句末尾添加
    x=x+100和y=y+100
    (这样它会在每次粘贴之间更新新值)。

    为什么不放置一个计数器?像这样:

    Dim counter As Long
    counter = 1
    
    然后:

    While (Fname <> "")
    
          Set wbTarget = Workbooks.Open(Filename:=Folder & Fname)
          wbTarget.Activate
          Range("b3:i102").Copy
    
          wbThis.Activate
    
    
          'Solution:
    
          sht1.Range("b" & counter & ":i" & counter + 99).PasteSpecial
          counter = counter + 100
    
          Fname = Dir
    
         'close the overnight's file
         wbTarget.Close
    Wend
    
    While(Fname“”)
    设置wbTarget=Workbooks.Open(文件名:=文件夹&Fname)
    wbTarget,激活
    范围(“b3:i102”)。副本
    这个,激活
    “解决办法:
    sht1.范围(“b”和计数器&“i”和计数器+99).特殊粘贴
    计数器=计数器+100
    Fname=Dir
    '关闭过夜的文件
    wbTarget,关闭
    温德
    
    你为什么不放个柜台呢?像这样:

    Dim counter As Long
    counter = 1
    
    然后:

    While (Fname <> "")
    
          Set wbTarget = Workbooks.Open(Filename:=Folder & Fname)
          wbTarget.Activate
          Range("b3:i102").Copy
    
          wbThis.Activate
    
    
          'Solution:
    
          sht1.Range("b" & counter & ":i" & counter + 99).PasteSpecial
          counter = counter + 100
    
          Fname = Dir
    
         'close the overnight's file
         wbTarget.Close
    Wend
    
    While(Fname“”)
    设置wbTarget=Workbooks.Open(文件名:=文件夹&Fname)
    wbTarget,激活
    范围(“b3:i102”)。副本
    这个,激活
    “解决办法:
    sht1.范围(“b”和计数器&“i”和计数器+99).特殊粘贴
    计数器=计数器+100
    Fname=Dir
    '关闭过夜的文件
    wbTarget,关闭
    温德
    
    我认为使用variant比复制方法有用

    Sub LoopThroughFiles()
    
    Dim MyObj As Object, MySource As Object
    
    file As Variant
    Dim wbThis                  As Workbook     'workbook where the data is to be pasted, aka Master file
    Dim wbTarget                As Workbook     'workbook from where the data is to be copied from, aka Overnights file
    Dim LastRow As Long
    Dim sht1 As Worksheet
    Dim sht2 As Worksheet
    
    Dim vDB As Variant
    
    'set to the current active workbook (the source book, the Master!)
    Set wbThis = ActiveWorkbook
    Set sht1 = wbThis.Sheets("Sheet1")
    
    Folder = "\\dne\ldc\research-dept\3 CEEMEA\15. EMB\Turkey\TLC Overnight & Weekly Reports\weekly (majeed)\"
    Fname = Dir(Folder)
    
    While (Fname <> "")
    
      Set wbTarget = Workbooks.Open(Filename:=Folder & Fname)
    
      vDB = wbTarget.Sheets(1).Range("b3:i102")
    
      '################################
      'NEED HELP HERE. I GET A ERROR HERE. NEEDS TO BE MORE DYNAMIC.
    
            sht1.Range("b" & Rows.Count).End(xlUp)(2).Resize(UBound(vDB, 1), UBound(vDB, 2)) = vDB
    
     Fname = Dir
    
     'close the overnight's file
      wbTarget.Close
     Wend
    
    End Sub
    
    Sub-LoopThroughFiles()
    Dim MyObj作为对象,MySource作为对象
    文件作为变体
    将此作为要粘贴数据的工作簿,也称为主文件
    将wbTarget作为工作簿的工作簿,从中复制数据,也称为文件
    最后一排一样长
    Dim sht1作为工作表
    将sht2变暗为工作表
    作为变体的Dim vDB
    '设置为当前活动