使用单元格值激活另一个工作表,然后清除原始单元格值而不会出现错误

时间:2018-02-25 03:28:56

标签: excel vba excel-vba runtime-error

我在名为“Data”的工作表上有单元格A1,它查找输入,在收到时,查找与其匹配的工作表名称。如果找到匹配项,则会打开该表。我打算在打开第二张纸之后清除在“数据”A1中输入的值,但是我得到的运行时错误似乎仍然在寻找用于打开第二张纸的数据。以下是“数据”表的代码:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("A1"), Target) Is Nothing Then Exit Sub
Sheets(Target.Value).Activate
End Sub

我尝试使用变量代替Target.Value,希望在删除A1中的实际数据后,该变量将满足代码。

我在上面的块的末尾以及激活的工作表上运行了以下行,但无论哪种方式我都收到错误。

Sheets("Data").Range("A1:A1").ClearContents

错误是“运行时错误9下标超出范围。

如何在“数据”中清除A1的内容,以便在我完成最后一张时,它已准备好接收另一个打开另一张表的请求?

3 个答案:

答案 0 :(得分:0)

这是单个单元格的正确语法:

Sheets("Data").Range("A1").ClearContents

...但是使用一系列A1:A1也应该有效,所以如果您收到Subscript Out Of Range,则可能没有名为Data的工作表。

如果您打开了多个工作簿,则默认情况下,它正在查找活动工作簿(其名称包含在ActiveWorkbook.Name中。)因此,如果您要使用多个工作簿,则应明确说明工作簿名称:

Workbooks("Book1").Sheets("Sheet1").Range("A1").ClearContents

答案 1 :(得分:0)

对您的代码稍作修改。 "什么都不是"不起作用。以下代码适用于我。

If Intersect(Target, Range("A1")) = "" Then Exit Sub
Sheets(Target.Value).Activate
Target.ClearContents

答案 2 :(得分:0)

毕竟我不需要清除这个值。我添加了几行以确保何时返回"数据"表格,单元格A1被选中。这允许输入新值来替换先前的值并达到目的。

相关问题