我有一个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时,我仍然不明白为什么它选择将行插入到活动的任何工作表中。我有另一个非常相似的宏,没有这个问题。
任何想法?
答案 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有一个简短的解释,但基本上它会强制你正确声明所有变量(从而有助于防止将来的变通办法!)