Excel 使用xlup创建动态范围

Excel 使用xlup创建动态范围,excel,vba,Excel,Vba,我试图创建一个主文件使用vba来控制各种excel(从属)文件。一旦主文件打开并运行宏,它将遍历目录,打开各种excel文件,并将相关列复制粘贴到主文件中。(即3个相关excel文件(AA、BB、CC)。我需要拉出AA中的A列到D列,BB中的C列和CC中的Z列。) 我当前的代码可以这样做,但我必须为复制粘贴建立一个静态范围。以下哪一行:范围(“A2:B6”)。复制。我正在尝试将范围动态渲染为:range(“A2:D&最后一行带有信息)。复制 我已尝试修改并使用以下内容: If MyFile =

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

我当前的代码可以这样做,但我必须为复制粘贴建立一个静态范围。以下哪一行:范围(“A2:B6”)。复制。我正在尝试将范围动态渲染为:range(“A2:D&最后一行带有信息)。复制

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

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
对托尼来说

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

您的代码有很多问题

第1期

通过键盘界面,您可以使用Ctrl+C将范围复制到草稿行。然后,如果需要,您可以将光标移动到其他工作簿中所需的目标位置,并使用Ctrl+V粘贴范围。但是,如果您不移动光标,则会丢失副本。VBA也是如此。我从未尝试过使用workbo好的,在复制和粘贴之间很接近,我非常怀疑它是否有效。我相信这就是错误1004的原因

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

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
第二期

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

第三期

与匹配键盘命令的
复制
粘贴
不同,我发现有一个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
建议


我建议您尝试解决上述问题,并在必要时提出问题。

尝试
Sheet1.Range(“A2:B”&erow1)。复制
嘿,simoco,这是一个奇怪的问题,因为单独使用:erow3=Sheet1.Cells(Rows.Count,1)。End(xlUp)。Row和msgbox erow3。给我一个带有“6”的msgbox“。我不知道为什么选择的范围是D7。嗨,托尼,你说得对。我只是通过激活工作簿并确保在复制之前激活了工作簿来解决问题。我唯一的问题是,对于范围数据集,您可以通过打开excel文件和工作表来复制它,而无需激活它。使用动态工作表时,您需要打开excel,激活工作簿和工作表。为什么?打开工作簿会自动使其成为活动工作簿。我不相信你能做任何事情来避免这种情况。为什么您认为需要使用动态范围激活工作表<代码>粘贴
在活动工作簿上运行,但
复制
不运行。我不知道为什么需要激活具有动态范围的工作表。因为在我的初始代码中(静态范围);当我进入代码并检查值时。我的射程是射程(“A2:B6”)。收到。这是正确的。对于动态代码,erow1=Sheet1.Cells(Rows.Count,1).End(xlUp).行范围(Cells(A,2),Cells(B,erow1)).复制。范围是A2:A1,目标是我粘贴到的工作表。我想,如果我激活需要复制的工作表,然后将其放入代码中,它将强制它从正确的工作表中复制我假设
范围(单元格(A,2),单元格(B,erow1))。复制
是一种打字错误,因为它是
单元格(行,列)
<代码>范围
单元格
适用于活动工作表,除非符合条件。我猜你忘了对某件事进行限定。
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