2011-08-12 101 views
-1
sheet1.activate 
activesheet.range(cells(2,"Q"),cells(40,"K")).select 'here the error occurs 
selection.copy 

上面的代码适用于somtimes,有时会抛出一个错误,对象变量没有设置是什么意思?为什么上面的代码不工作,如果我重新打开文件,它再次工作,有时不。但我不知道它发生的原因。我在语法上犯了什么错误,如果是这样,请让我知道正确的方法来做到这一点。是否有更有效的方法来选择一组范围?以上除外?预先感谢您我在做什么错误?

+0

在没有错误发生什么线? –

+0

你在做什么之前和之后?你确定sheet1是被定义的吗? – JMax

回答

5

此错误的原因通常是省略了Set关键字,例如,

Dim w as Worksheet 
w = Sheet1 ' throws error 91 
' Correct syntax: 
' Set w = Sheet1 

如果你告诉我们,在哪一行发生错误,那么一个更具体的答案将很快到来。代码示例的语法看起来很好,但是错误可能是由于代码中的另一行,可能未在您的问题中显示。

是否有更多“有效”的方式来选择范围?就我个人而言,我不喜欢你展示的方法,用字符串作为参数Cells。字符串很混乱,经常会导致错误,从而导致工作效率的下降。为什么不:

Sheet1.Range(Cells(2,18),Cells(40,11)).Select 
' or 
Sheet1.Cells(2,11).Resize(39,8).Select 
' or 
Sheet1.Range("K2").Resize(39,8).Select 

或者,在您的工作表中将K2:Q40定义为命名范围,将其称为例如“myRange”,也这样:

Sheet1.Range("myRange").Select ' My personal favourite 

但为什么您使用Select?这通常不是必需的。只要写:

Sheet1.Range("myRange").Copy 

但后来我可能会问,为什么您使用Copy,这是在自己的权利凌乱的方法...

+0

是的,我明白了!因此,对于每张工作表,我必须使用昏暗的w作为工作表。谢谢你 – niko

+1

对于一个糟糕的问题的丰富答案。 @ Jean-François+1。 –

+0

@niko,因为这解决了你的问题,从你接受答案会很好(在http://meta.stackexchange.com/q/5234/157692解释) –