从默认表大小VBA Excel中选择所有数据

时间:2013-10-03 19:43:23

标签: excel vba excel-vba range selection

我有一张电子表格,其默认表格大小和布局由另一张电子表格中的信息填充。此表将始终具有相同的列数,但行中的条目数可能会有所不同。我想从表中选择所有数据,然后将其粘贴到另一张表中,而不复制任何空行。

我的初步尝试涉及以下代码:

Set rightcell = Range("B9").End(x1Right)
Set bottomcell = Range(rightcell).End(x1Down)

要定义右下角应该是什么,所以我可以这样引用整个表:

Range("B9", bottomcell).Select

或复制或其他。当我运行它时,它给我一个“用户定义或对象定义的错误”,我不知道为什么。我将代码输入为更大的子代码的一部分,并且我已将变量定义为范围和变体,以尝试使其工作。我花了很多时间在互联网上搜索解决方案,但到目前为止,我发现的信息并没有明确地与我的问题相关,并且没有类似的解决方案有效。

有没有人知道对此的适当编码是什么,或者我是否正在做一些小错误,而其他一切都被抛弃了?我记得在大学期间遇到同样的问题,但对于我的生活,我不记得解决方案了。这非常令人沮丧。

另外,如果我太模糊或者您需要对任务进行更多说明,请不要犹豫。在此先感谢您的帮助!

编辑:我遗漏的一个重要注意事项是,我想要从中提取数据的表位于包含多个其他表格的页面中间,我并不想与之交互。

2 个答案:

答案 0 :(得分:1)

如果表格始终位于工作表上的相同位置,您可以执行以下操作来复制整个表格:

'Modify this to any cell in your table (like the top left hand cell):
Range("B9").CurrentRegion.Copy Sheets("TheSheetYouWantToPasteTo").Range("A1")

即使表格在工作表上的位置发生变化,只要您知道表格中的一个单元格,您仍然可以使用上面的代码复制表格。

如果您想保留与尝试相同的方法,请尝试以下方法:

Dim rightcell As Long
Dim bottomcell As Long

'Finds the furthest column to the right:
rightcell = Cells(5, Columns.Count).End(xlToLeft).Column

'Finds the bottom most row in the table (will stop at the first non-blank cell it finds.)
bottomcell = Range("B:B").Find("*", Range("B9"), searchdirection:=xlPrevious).Row

'Reference the variables like this:
Range(Cells(9, 2), Cells(bottomcell, rightcell)).copy _
Sheets("TheSheetYouWantToPasteTo").Range("A1")

答案 1 :(得分:0)

这就是我使用的

Public Function last_row() As Long
    Dim i As Integer
    Dim l_row As Long
    'my sheet has 35 columns change this number to fit your
    For i = 1 To 35
        If Sheet1.Cells(Rows.Count, i).End(xlUp).Row > l_row Then
            l_row = Sheet1.Cells(Rows.Count, i).End(xlUp).Row
        End If
    Next i
    last_row = l_row
End Function

然后使用

Dim l_row As Long
l_row = last_row
'Again since you know the last column change 35 here to your value 
'or use the String i.e. "AI"
Range("B9", Cells(l_row,35)).Select

这将查看每一列以确定包含数据的最后一行