这是我目前正在处理的代码,我遇到了这个问题。我是Excel的新手,我不知道出了什么问题。
Private Sub cmdRecord_Click()
Sheets("BxWsn Simulation").Range("Result").Select //This is the line with the problem, as excel told me.
Selection.Copy
Sheets("Reslt Record").Select
Sheets("Reslt Record").Range("A5000").End(xlUp).Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Sheets("CuCon Simulator").Select
Application.CutCopyMode = False
Range("Improvement").Select
End Sub
错误是Select method of Range class failed via VBA, Error 1004
。有什么想法吗
预计到达时间:
所以我把密码改成了
Sheets("BxWsn Simulation").Select
Range("Result").Select
我想这就是你所说的让它活跃起来?
但是我还是得到了Method 'Range' of object '_Worksheet' failed, error 1004
。
5条答案
按热度按时间am46iovg1#
我相信你在这里有the same problem。
必须先激活工作表,然后才能在其上选择范围。
另外,不要省略工作表名称限定符:
或者
这是一样的
xdnvmnnf2#
这个问题的正确答案是“不要选择”。有时你必须选择或激活,但99%的时间你没有。如果你的代码看起来像
您可能需要重构并考虑不选择。
错误,对象'_Worksheet'的方法'Range'失败,错误1004,你得到的是因为上面有按钮的工作表没有名为“Result”的范围。大多数(可能是所有)返回对象的属性都有一个默认的Parent对象。在本例中,您使用Range属性返回一个Range对象。因为您没有限定Range属性,所以Excel使用默认值。
默认的父对象可以根据情况而不同。如果您的代码在标准模块中,则ActiveSheet将是默认的Parent,Excel将尝试解析ActiveSheet.Range(“Result”)。您的代码位于工作表的类模块中(带有按钮的工作表)。当在那里使用非限定引用时,默认的Parent是附加到该模块的工作表。在这种情况下,它们是相同的,因为工作表必须处于活动状态才能单击按钮,但情况并非总是如此。
当Excel给出包含'_Object'(您的是'_Worksheet')等文本的错误时,它总是指默认的Parent对象-下划线会泄露这一点。通常,解决这个问题的方法是通过显式地描述父对象来限定引用。但是在不需要选择和激活的情况下,最好只重构代码。
这里有一种不需要任何选择或激活就可以编写代码的方法。
当我在一个类模块中时,比如你正在使用的工作表的类模块,我总是试图根据那个类来做事情。所以我使用Me.Parent而不是ActiveWorkbook。它使代码更具可移植性,并防止发生意外的问题时,事情的变化。
我相信你现在的代码运行在毫秒级,所以你可能不在乎,但避免选择肯定会加快你的代码,你不必设置屏幕更新。随着代码的增长或在不同的情况下,这一点可能变得很重要。
ovfsdjhp3#
这对我很有效。
ijxebb2r4#
这就是你如何以一种简单而不复杂的方式解决这个问题。
使用
Activesheet.range("range").select
代替sheet(x).range
nwwlzxa75#
这里有一个解决方案为我工作,而且,我发现上述所有的解决方案都是正确的。我的Excel模型被破坏了,这就是为什么我的代码(类似于这一个)停止工作。以下是对我有效的方法,每次都有效-
1.计算工作簿-公式->立即计算(在计算部分下)
1.保存工作簿
1.关闭并重新打开文件。它是固定的,每次都能工作。