excelvba。何时需要激活工作表?

excelvba。何时需要激活工作表?,excel,vba,Excel,Vba,一般的答案是完美的,b 我有一个简单的代码,只有在运行宏时Sheet2处于活动状态时才有效 否则,它会给出一个错误“由应用程序或对象定义”: 如果我先激活工作表,它会工作,但这需要我保存当前活动的工作表,以便在结束时返回 Sub PasteArray() Dim arr(1 To 3) As Variant Dim n As Integer Dim ws As Worksheet arr(1) = 4 arr(2) = 6 arr(3) = 8 n = UBound(arr) - LBound

一般的答案是完美的,b 我有一个简单的代码,只有在运行宏时Sheet2处于活动状态时才有效

否则,它会给出一个错误“由应用程序或对象定义”:

如果我先激活工作表,它会工作,但这需要我保存当前活动的工作表,以便在结束时返回

Sub PasteArray()
Dim arr(1 To 3) As Variant
Dim n As Integer
Dim ws As Worksheet

arr(1) = 4
arr(2) = 6
arr(3) = 8
n = UBound(arr) - LBound(arr) + 1
Set ws = ActiveSheet
Worksheets("sheet2").Activate
Range(Cells(1, 1), Cells(n, 1)) = WorksheetFunction.Transpose(arr)
ws.Activate
总是有必要这样做吗? 我很确定我见过一些代码,其中对非活动工作表中的单元格进行了更改


谢谢你

除非你想让用户看到一些东西,否则你根本不需要激活工作表

如果由于引用而收到错误,请始终记住将
工作表
工作表
包含在
范围内

Sub PasteArray()
    Dim arr(1 To 3) As Variant
    Dim n As Integer
    Dim ws As Worksheet

    arr(1) = 4
    arr(2) = 6
    arr(3) = 8
    n = UBound(arr) - LBound(arr) + 1
    Sheets("Sheet2").Range(Sheets("Sheet2").Cells(1, 1), Sheets("Sheet2").Cells(n, 1)) = WorksheetFunction.Transpose(arr)
End Sub
单元格
零件之前添加了
图纸(“图纸2”)


老实说,我建议谷歌搜索如何在VBA中使用
语句,在这种情况下会有很大帮助

出于所有目的,激活工作表并不重要,除非你想向椅子上的人展示一些东西。请参阅。还可以从您的代码示例中了解为什么它看起来是必要的。。。。而
Sheets
是对
ActiveWorkbook
的隐式引用,重复敲击
Sheets
集合以查找
“Sheet2”
从性能角度看是非常糟糕的-它应该存储或从
块中引用。这段代码只比OP的稍好一点。@Comintern很棒,但这就是为什么我在上面提到了用
搜索
。另外,我只是想说明为什么会出现错误,这种方式可以让那些显然没有太多VBA经验的人很容易看到错误
Sub PasteArray()
    Dim arr(1 To 3) As Variant
    Dim n As Integer
    Dim ws As Worksheet

    arr(1) = 4
    arr(2) = 6
    arr(3) = 8
    n = UBound(arr) - LBound(arr) + 1
    Sheets("Sheet2").Range(Sheets("Sheet2").Cells(1, 1), Sheets("Sheet2").Cells(n, 1)) = WorksheetFunction.Transpose(arr)
End Sub