2015-06-17 36 views
0

我对VBA比较新,我需要帮助。如果目标范围变大,相交不起作用

我有一个工作表内的私人小组,我希望它自动填充邻近动态命名范围的公式,如果范围的大小发生变化。

(编辑)我正在将数据从另一个工作表粘贴到这一列A-M中。我的动态范围定义为= OFFSET($ A $ 1,1,0,COUNTA($ A:$ A)-1,13)。如果列M中没有数据,并且我有目的地计算列M的最后一行,则第一个If语句应该退出该子集,因为我想填充N:O中的公式,以便它们覆盖与列相同的行数M.

这是我的代码,它的工作原理是如果范围的大小变小(即如果我从底部删除行),但不是如果它变得更大,我不能解决原因!

Private Sub Worksheet_Change(ByVal Target As Range) 

If Me.Range("M2").Value = "" Then 

    MsgBox "No Data!" 

    Exit Sub 

Else 

    If Intersect(Target, Me.Range("rngOracleInvoices")) Is Nothing Then 
    Application.EnableEvents = False 

     Dim Lrows As Long 

     Lrows = Me.Cells(Me.Rows.Count, "N").End(xlUp).Row 

     Me.Range(Me.Cells(3, 14), Me.Cells(Lrows, "O")).ClearContents 
     Me.Range("N2:O2").AutoFill Destination:=Me.Range("N2:O" & Me.Range("M" & Me.Rows.Count).End(xlUp).Row) 

    End If 

End If 

Application.EnableEvents = True 

End Sub 

我把最后一位到一个单独的宏来测试它是否适用于自己的,由于某种原因,当我运行它,自动填充去一路攀升至第1行,并覆盖公式,很奇怪,因为我使用了很多代码,而且之前从来没有这样做过。我做了什么??!!

而且,如果有更好的办法做到我会很感激,如果有人可以让我知道它是什么,因为我只是拼凑,从比特我一起在论坛上:)

由于发现了自动填充,

SOPH

+1

M列是什么? – Rory

+0

列M是我的数据范围的最后一列,所以如果单元格M2为空,我想退出子 –

回答

0

在此行Me.Range("N2:O2").AutoFill Destination:=Me.Range("N2:O" & Me.Range("M" & Me.Rows.Count).End(xlUp).Row)您计算在列中号所以你的最后一行,如果它是空的它会给你1和自动填充在行公式1

所以通过计算它的好列开始(我的猜测是Ø

你也可以简单地定义一个整型变量,以测试它,如果它不如2,将其改回2,3, 4或任何你想要的。

对于您的动态范围,我们可能需要一些精度。

而对于AutoFill,你可以只选择手动范围N2:02和右下角方形(拖动自动填充的一个),然后双击,并且只要它会自动填充,因为在相邻的数据细胞! (试一试;))

+0

您可以编辑您的问题并将其包含在其中,以便其他人也可以看到它! – R3uK

+0

我正在将数据从另一个工作表粘贴到这一列A-M中。我的动态范围定义为= OFFSET($ A $ 1,1,0,COUNTA($ A:$ A)-1,13)。如果列M中没有数据,并且我有目的地计算列M的最后一行,则第一个If语句应该退出该子集,因为我想填充N:O中的公式,以便它们覆盖与列相同的行数M,那是不对的? –

+0

抱歉,我从未在此论坛上发布过! –