我的代码应该是一个简单的表格长度检查
如果表长度增加,则运行宏
不幸的是,它在我修改现有记录中的任何数据时运行。 但它只发生一次!
当我最初打开工作簿然后尝试修改工作簿中的任何内容时,会发生这种情况。之后,只有在添加新条目时才会运行。
Sub位于包含静态单元格A1
的工作表上。这是问题宏。它似乎表现为行数和静态范围之间存在差异。但是,只有当你最初打开工作簿时才会这样!
Private Sub Worksheet_Calculate()
Dim n As Long
n = GetTableSize()
If n > LastRowNumber Then NewDatabaseEntry
' Always set LastRowNumber so that even after entries are deleted (n < NumRows),
' adding new entries will work correctly.
LastRowNumber = n
End Sub
在单独的模块中支持宏:
Option Explicit
Public LastRowNumber As Long
'This will be used to monitor the number of rows in the
'Projects worksheet. This will then be compared to the
'Value of the formula in the TableSize worksheet.
'The value in TableSize will have a variable 'n'.
Public Function GetTableSize() As Long
GetTableSize = Worksheets("TableSize").Range("A1").Value2
End Function
此子位于正在监视的表所在的工作表上:
Private Sub Workbook_Open()
LastRowNumber = GetTableSize()
End Sub
NewDatabaseEntry
是提醒我存在问题的模块,因为它在运行之前显示弹出窗口。否则,我一开始就不知道有问题。
任何帮助将不胜感激。
答案 0 :(得分:1)
如果您的Workbook_Open
子文件位于图纸模块中,则在工作簿打开时不会调用它。您的LastRowNumber
变量默认值为零 - 0
。然后,当您对数据进行任何更改时,从n > 0
开始,它会调用NewDatabaseEntry
。在第一次之后,LastRowNumber
变量具有它应该具有的值,并且一切都按预期工作(如果我正确理解了您的解释)。
相反,Workbook_Open
sub需要位于工作簿模块中 - ThisWorkbook
。事件代码必须在其正确调用的预期位置。
(我几乎把它添加为评论,然后意识到这可能是造成这个问题的原因......)