我对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
答案 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
,然后双击右下方(您拖动到自动填充的那个)和只要相邻单元格中有数据,它就会自动填充! (试一试;))