Excel 2010 VBA从多个Excel文件复制数据

时间:2013-09-04 18:56:05

标签: excel-vba excel-2010 vba excel

我已经搜索并搜索了这个并且已经接近但并不完美。这就是......

我需要的是一个代码来连续处理其他excel工作簿并复制数据。这些文件将被命名为1,2,3,4等,最多约60个。我有一些代码将打开我的所有文件,这很好。接下来我需要它进入所有工作簿并复制设置数据并将其返回到我能够做的主工作簿。这是我的问题......

  1. 我知道必须有一种方法可以编写代码一次并让它通过剩余的文件。 IE浏览器。如果第一个文件名为1.csv,那么代码可以在1.csv上执行,然后在1.csv + 1上表示2.csv,然后循环输出?似乎应该能够做到这一点。我不想手动工作,通过编写相同的代码从1.csv一直复制到60.csv

  2. 如果有办法循环它,那么如何结束部分结束。 IE一周可能有37个文件,接下来的40个等等。我希望它从文件1.csv开始工作,直到它到达最后一个活动文件37.csv或60.csv然后如果没有38.csv文件则结束。

  3. 这是我记录的基本代码。

       Public Sub testr()
      Dim filenum As Integer
      Dim lastrow As Long
    
      filenum = 1
      On Error GoTo my_handler
    
      Do
        Windows(filenum & ".CSV").Activate
        Range("A25").Select
        Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
        Selection.Copy
        Windows("test.xlsm").Activate
        Range("A1").Select
        lastrow = Worksheets("Data").Cells(1, 1).End(xlDown).Row
        ActiveSheet.Paste
        filenum = filenum + 1
      Loop
    
    my_handler:
      MsgBox "All done."
      Exit Sub
    End Sub
    

    任何人都可以给我的任何帮助都会很棒!提前谢谢〜

2 个答案:

答案 0 :(得分:0)

您可以尝试将所有这些包装在DO ... LOOP中。如果你不知道你将使用多少个.csv文件,只需输入一个错误处理程序,一旦找不到文件就退出。

您可以使用字符串连接来更改文件名:例如,使用名为filenum的变量,如果filenum = 1则使用filenum& “.csv”将是“1.csv”,如果filenum = 2那么filenum& “.csv”将是“2.csv”等。

例如:

Public Sub testr()
Dim filenum As Integer
filenum = 1
On Error GoTo my_handler
Do
  Windows(filenum & ".CSV").Activate
  'rest of code goes here
filenum = filenum + 1
Loop

my_handler:
  MsgBox "All done."
Exit Sub

答案 1 :(得分:0)

好的,对于您现在拥有的代码,您至少需要进行编辑,如下所示:

Public Sub testr()
  Dim filenum As Integer
  filenum = 1
  On Error GoTo my_handler

  Do
    Windows(filenum & ".CSV").Activate
    Range("A25").Select
    Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select
    Selection.Copy
    Windows("test.xlsm").Activate
    Range("A1").Select
    ActiveSheet.Paste
    Range("A1").Select
    filenum = filenum + 1
  Loop

my_handler:
  MsgBox "All done."
  Exit Sub
End Sub