【发布时间】:2017-12-09 02:03:56
【问题描述】:
我有一个用户窗体,它应该在 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 不能在用户表单代码模块中工作,所以会咬人......
当我已经在代码中指定了 sheet3 时,我仍然不明白为什么它选择将行插入到任何活动的工作表中。我有另一个非常相似的宏没有这个问题。
有什么想法吗?
【问题讨论】:
-
我怀疑这可能与“细胞”与“范围”有关。另一个可以正常工作的宏通过以下方式引用该行:Sheet3.Range("C" & variable).EntireRow.Insert。我也没有像在原始帖子中那样将它传递给范围对象变量。
-
如果在
Sheet3前面添加工作簿会发生什么?例如Workbooks("Name of workbook").Sheet3.... -
或
Workbooks("Name of workbook").Sheet3.rows(rowvariable+1).Insert... -
这可能与代码位置有关。基本上,您有一个用于用户窗体的类模块和另一个用于 ActiveSheet 的类模块。然后您尝试从另一个类模块调用一个类模块的代码,这将不起作用。将您的代码放在一个标准模块中,并从您的工作表的类模块中调用它,这样它就是一个打开表单的标准模块,而不是一个类模块。您可以调用 sub 从工作表类模块打开表单。我建议您也这样做,以避免直接从另一个工作表的类模块中操作工作表。
-
您提供的代码不会造成问题,您可能需要提供完整的代码。