不同情况下相同Excel宏给出错误

不同情况下相同Excel宏给出错误,excel,vba,Excel,Vba,我在Excel中有两个Sub()函数。两者的名称不同,但代码相同。但当尝试一起运行时,会出现“应用程序定义”错误。我无法理解问题出在哪里 下面是相同的代码 Sub GT456T() Sheets("Sheet2").Rows("1:1").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Rows("11:11").Select ActiveSheet.Paste End Sub

我在Excel中有两个Sub()函数。两者的名称不同,但代码相同。但当尝试一起运行时,会出现“应用程序定义”错误。我无法理解问题出在哪里

下面是相同的代码

Sub GT456T()

Sheets("Sheet2").Rows("1:1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet1").Select
Rows("11:11").Select
ActiveSheet.Paste

End Sub



Sub CopyRecord()


Sheets("Sheet2").Rows("1:1").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet1").Select
Rows("11:11").Select
 ActiveSheet.Paste
End Sub

我不明白为什么一个接一个地运行时会出现错误。如果我运行第一个宏,它不会抛出错误,但在第一个宏之后立即执行第二个宏时,它会抛出“应用程序定义”错误。请帮助

不要提供有关问题的更多详细信息,这是猜测,但以下是我的解决方法:

.Select
方法仅适用于父工作表当前处于活动状态的范围。当您运行任一宏一次时,Sheet1在运行完毕后将成为活动工作表。然后尝试在第一个宏之后“立即”再次运行任一宏,该宏希望在Sheet2上选择某些内容,但Sheet2未处于活动状态。第1张是。所以你得到了一个错误


这是我最好的、最有教育意义的猜测

如果没有关于这个问题的更多细节,这只是猜测,但下面是我的尝试:

.Select
方法仅适用于父工作表当前处于活动状态的范围。当您运行任一宏一次时,Sheet1在运行完毕后将成为活动工作表。然后尝试在第一个宏之后“立即”再次运行任一宏,该宏希望在Sheet2上选择某些内容,但Sheet2未处于活动状态。第1张是。所以你得到了一个错误


这是我最好的、最有教育意义的猜测

您的意思是“应用程序未定义”?您说在运行第一个宏之后运行第二个宏时会发生错误。如果运行第一个宏两次,是否也会出现错误?还是第二个两次?还有,你是如何运行它们的?手动或通过另一位代码?什么“不同情况”@加里:我是用那种方式跑第一个和第二个的。如果我运行同一个宏两次,三次..不会发生错误。我使用F5单独运行sub()。同样,如果我按照第二个sub()和第一个sub()的顺序运行。仍然会发生错误。您的意思是“应用程序未定义”?您说在运行第一个宏之后运行第二个宏时会发生错误。如果运行第一个宏两次,是否也会出现错误?还是第二个两次?还有,你是如何运行它们的?手动或通过另一位代码?什么“不同情况”@加里:我是用那种方式跑第一个和第二个的。如果我运行同一个宏两次,三次..不会发生错误。我使用F5单独运行sub()。同样,如果我按照第二个sub()和第一个sub()的顺序运行。仍然会发生错误。是的,对,但此语句不考虑使sheet2再次激活“Sheets”(“sheet2”)。行(“1:1”)。选择“?@Sunny:否。您需要先激活该工作表(sheet.activate),然后使用range.Select选择范围。我认为让·弗朗索瓦是对的,这就是问题所在。这是Excel VBA的许多奇怪之处之一。一些杰出的微软工程师决定,你必须说
Sheets(“Sheet2”)。选择
(或
。激活
),然后再选择该工作表上的范围,例如
Sheets(“Sheet2”)。行(“1:1”)。选择
。是的,但这句话不考虑让Sheet2再次激活“Sheet2”行(“1:1”)。选择“?@Sunny:否。您需要先激活工作表(sheet.activate),然后使用range.Select选择范围。我认为让·弗朗索瓦是对的,这就是问题所在。这是Excel VBA的许多奇怪之处之一。某位杰出的Microsoft工程师决定,您必须说
Sheets(“Sheet2”)。选择
(或
。激活
),然后再选择该工作表上的范围,例如
Sheets(“Sheet2”)。行(“1:1”)。选择