我在做什么错

nik*_*iko -1 excel vba excel-2007 excel-vba

sheet1.activate
activesheet.range(cells(2,"Q"),cells(40,"K")).select 'here the error occurs 
selection.copy
Run Code Online (Sandbox Code Playgroud)

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

Jea*_*ett 5

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

Dim w as Worksheet
w = Sheet1 ' throws error 91
' Correct syntax: 
' Set w = Sheet1 
Run Code Online (Sandbox Code Playgroud)

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

是否有更多"有效"的方法来选择范围?就个人而言,我不喜欢你展示的方法,以字符串作为参数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
Run Code Online (Sandbox Code Playgroud)

或者,将K2:Q40定义为工作表中的命名范围,将其称为"myRange",并执行以下操作:

Sheet1.Range("myRange").Select ' My personal favourite
Run Code Online (Sandbox Code Playgroud)

但你为什么用Select?这通常不是必需的.写吧:

Sheet1.Range("myRange").Copy
Run Code Online (Sandbox Code Playgroud)

但后来我可以问,你为什么要使用Copy,这本身就是一种混乱的方法呢?...