使用xlup创建动态范围

时间:2014-04-24 16:05:05

标签: excel-vba vba excel

我试图使用vba创建一个主文件来控制各种excel(dependents)文件。一旦主文件打开并运行宏,它将通过该目录,打开各种excel文件并将相关列复制粘贴到主文件。 (即3个相关的excel文件(AA,BB,CC)。我需要将AA中的A列拉到D,BB中的C和CC中的Z.)

我当前的代码能够这样做,但我必须为复制粘贴建立一个静态范围。以下是以下行:范围(" A2:B6")。复制。我试图像这样渲染范围动态:范围(" A2:D&最后一行有信息)。复制

Sub LoopThroughDirectory()
Dim MyFile As String
Dim erow
Dim Filepath As String

Filepath = "E:\Excel\"
MyFile = Dir(Filepath)
Do While Len(MyFile) > 0


If MyFile = "Name&Age.xlsx" Then
Workbooks.Open ("E:\Excel\Name&Age")
Range("A2:B6").Copy
ActiveWorkbook.Close

erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range(Cells(erow, 1), Cells(erow, 2))
End If

If MyFile = "Food&Quantity.xlsx" Then
Workbooks.Open ("E:\Excel\Food&Quantity")
Range("D2:E6").Copy
ActiveWorkbook.Close

erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range(Cells(erow, 3), Cells(erow, 4))
End If

MyFile = Dir
Loop
End Sub

我尝试修改并使用以下内容:

If MyFile = "Name&Age.xlsx" Then
Workbooks.Open ("E:\Excel\Name&Age")
erow1 = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(A, 2), Cells(B, erow1)).Copy
ActiveWorkbook.Close

但我一直收到错误1004.我认为问题在于以下代码:范围(单元格(A,2),单元格(B,erow1))。复制

有什么想法吗?

嘿simoco,感谢您的帮助,我尝试了代码,但它似乎将最后一行下面的行与数据(行为空)。 (例如,D2到D6有数据,E2到E6也有)。当使用下面的代码时,如果我进入代码,我看到vba选择范围:D7到E所有行。

这里是代码:

If MyFile = "Food&Quantity.xlsx" 
Then Workbooks.Open ("E:\Excel\Food&Quantity")
erow3 = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
Sheet1.Range("D2:E" & erow3).Copy
ActiveWorkbook.Close

erow4 = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
ActiveSheet.Paste Destination:=Worksheets("Sheet1").Range(Cells(erow4, 3), Cells(erow4, 4))
End If

FOR Toni,

感谢您的投入。该代码适用于静态范围。我没有收到任何1004错误。即使在将工作簿粘贴到另一个工作簿之前复制和关闭工作簿也是如此。我确实想到了一个愚蠢的"解决方案。我可以使用Range(" A2:B1000000000000")。复制但我想知道是否还有更多"漂亮"解。 此外,我只是尝试使用B100000000。它运行没有错误。

1 个答案:

答案 0 :(得分:1)

您的代码存在许多问题。

第1期

使用键盘界面,您可以使用 Ctrl + C 将范围复制到暂存器。然后,您可以根据需要在另一个工作簿中将光标移动到所需的目标,然后使用 Ctrl + V 粘贴范围。但是,如果您除了移动光标之外还执行任何操作,则会丢失副本。 VBA也是如此。我从未尝试过复制和粘贴之间的工作簿,我非常怀疑它是否可行。我相信这是错误的原因1004。

当我打开多个工作簿时,我不喜欢使用ActiveWorkbook因为我忘记了哪个工作簿处于活动状态。我怀疑你的问题是你不知道如何访问ActiveBookbook以外的任何内容。以下宏显示了如何创建允许您处理特定工作簿的工作簿对象。

Option Explicit
Sub Test()

  Dim WbookDest As Workbook
  Dim WbookSrc As Workbook

  ' This creates a workbook object for the workbook containing the macro.
  Set WbookDest = ThisWorkbook

  ' This opens workbook xxxx and creates a workbook object for it.
  Set WbookSrc = Workbooks.Open("xxxx")

  ' This displays the names of the open workbooks
  Debug.Print "Dest: " & WbookDest.Name
  Debug.Print " Src: " & WbookSrc.Name

  ' This closes the source workbook
  WbookSrc.Close

End Sub

第2期

使用Dir和循环来获取文件夹中文件的名称,但是您打开了特定的工作簿。我不明白你为什么要使用Dir

第3期

而不是匹配键盘命令的CopyPaste,有一个我觉得更方便的VBA语句:

Dim CellDest As Range
Dim RngSrc As Range

Set RngSrc = Desired range within worksheet of source workbook
Set CellDest = Top left cell of desired range within worksheet of destination workbook

WbookSrc.RngSrc.Copy Destination := WbookDest.CellDest

<强>建议

我建议你尝试解决上述问题,并在必要时回答问题。