如果目标范围变大,则相交不起作用

时间:2015-06-17 10:54:03

标签: excel vba excel-vba

我对VBA比较陌生,我需要帮助。

我在工作表中有一个私有子,如果范围的大小发生变化,我希望它自动填充与动态命名范围相邻的公式。

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

这是我的代码,如果范围的大小变小(例如,如果我从底部删除行),它就可以工作,但如果它变得更大则不行,我无法理解为什么!

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 个答案:

答案 0 :(得分:0)

在这一行[{1}}中,您计算​​了 M 列的最后一行,因此如果它为空,则会给您Me.Range("N2:O2").AutoFill Destination:=Me.Range("N2:O" & Me.Range("M" & Me.Rows.Count).End(xlUp).Row)并在行上自动填充您的公式1。

首先在好栏上计算(我猜是 O

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

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

对于1,您只需手动选择范围AutoFill,然后双击右下方(您拖动到自动填充的那个)和只要相邻单元格中有数据,它就会自动填充! (试一试;))