0

我意识到这可能是重复的,但我已经搜索了一个小时,但我无法正确使用语法。我有一张有几张桌子的表格。一个表到另一个表之间至少有一个空列和一个空行。

我知道每个表的起始行和起始列,并且我知道每个表有 3 列。我不知道它有多少行。

我想写一个接收:

  1. 表格开始行

  2. 表开始列

并将表格复制到另一个工作表中(假设目标是从 A1 开始的 sheet2)。

我知道我可以用循环来做到这一点,但我怀疑有更好的语法对吗?(这里的主要问题是我需要找到每个表的行数)

谢谢。李

4

1 回答 1

3

这个子将完成这项工作:

Sub CopyTable(wsSource As Worksheet, lngTopRow As Long, intLeftCol As Integer, rngTarget As Range)
    Dim rngSource As Range
    Dim intCols As Integer, lngRows As Long

    Set rngSource = wsSource.Cells(lngTopRow, intLeftCol)
    intCols = rngSource.End(xlToRight).Column - intLeftCol + 1
    lngRows = wsSource.Cells(wsSource.Rows.Count, intLeftCol).End(xlUp).Row - lngTopRow + 1

    rngSource.Resize(lngRows, intCols).Copy rngTarget

End Sub

要将表从 worksheet1 的第 1 行第 5 列开始复制到 Sheet2!A2,请使用以下调用:

CopyTable Sheets("Sheet1"), 1, 5, Sheets("Sheet2").Range("A2")

这假设每张桌子下面都没有任何东西。如果不是这种情况,请将第三条指令替换为

lngRows = rngSource.End(xlDown).Row - lngTopRow + 1

现在假设您的表格的第一列没有间隙。如果这不是真的,请尝试使用rngSource.UsedRange.Row代替rngSource.End(xlDown).Row

于 2013-10-29T09:34:15.010 回答