vba Userform宏编辑了错误的工作表

时间:2017-12-09 02:03:56

标签: excel-vba range userform vba excel

我有一个userform,它应该在Sheet3上插入一行,并用一些值填充该行中的一些单元格。只要我显示了sheet3,它就能很好用。 (表格显示为无模式,以便我访问表格)。

无论如何,我碰巧有另一张活动表再次运行并且惊讶地看到它插入了不在sheet3中的行,但是在我显示的那一行中...(感谢上帝我先保存了!)

在代码中,我按如下方式指定了一个范围对象来查找插入点:(我会稍微截断代码以保持简单)

Dim RecordRange As Range
Set RecordRange = Sheet3.Cells(RowVariable,ColumnVariable)
RecordRange.Offset(1,0).EntireRow.Insert
等等等等。 解决方法是首先激活工作表:

Sheet3.Activate

至少插入到正确的工作表中,但是当我添加记录时,我宁愿不显示sheet3,所以我甚至将该行包围在:

Application.ScreenUpdating = False
Sheet3.Activate
Application.ScreenUpdating = True

遗憾的是,ScreenUpdating无法在Userform Code模块中运行,因此咬了......

当我已经在代码中指定了sheet3时,我仍然不明白为什么它选择将行插入到活动的任何工作表中。我有另一个非常相似的宏,没有这个问题。

任何想法?

1 个答案:

答案 0 :(得分:0)

...所以你认为你的解决方法需要一个解决方法? 嗯... 我认为它符合双重否定,因为根据定义,解决方法应该是修复问题而不是导致它们...

  

解决方法是对系统中已识别问题的绕过。一个   解决方法通常是临时修复,暗示真正的   需要解决问题的方法。但解决方法经常是   创意作为真正的解决方案,涉及到框外思考   他们的创作。

     

通常他们被认为是脆弱的,因为他们不会回应   以及来自超出原始设计的系统的进一步压力。在   实现一个变通方法,标记变更是很重要的   以后实施适当的解决方案。

     

对变通方施加压力可能会导致以后的系统故障。   例如,在计算机编程中,常常使用变通方法   解决库中的问题或反模式,例如错误   回报价值。更改库后,解决方法可能会中断   整体程序功能,有效地成为一个   反模式,因为它可能期望从旧的,错误的行为   图书馆。 <子>(Wikipedia

只是说&#39; ... : - )

因此,不是修复变通方法,而是(幸运的是)原始问题很简单。

您使用Sheet3作为对象,我怀疑您没有为Worksheets("Sheet3")对象分配任何内容(例如Sheet3

请改为尝试:

Dim RecordRange As Range
Set RecordRange = Worksheets("Sheet3").Cells(RowVariable,ColumnVariable)
RecordRange.Offset(1,0).EntireRow.Insert

如果您确实打算将Sheet3用作对象,请确保将其声明为set,例如,您可以使用:

Dim RecordRange As Range
Dim Sheet3 As Worksheet
Set Sheet3 = Worksheets("Sheet3")
Set RecordRange = Sheet3.Cells(RowVariable,ColumnVariable)
RecordRange.Offset(1, 0).EntireRow.Insert

另外,只需要指出:如果其中任何一个解决了您的问题,那么问题就是通过在每个模块的顶部包含一条线来使自己知道&#34;(至少在开发和故障排除):

Option Explicit

This link有一个简短的解释,但基本上它会强制你正确声明所有变量(从而有助于防止将来的变通办法!)