一个一般的答案将是完美的,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
Sheets("Sheet2").Range(Cells(1, 1), Cells(n, 1)) = WorksheetFunction.Transpose(arr)
End Sub
如果我先激活工作表,它会起作用,但是这要求我保存当前活动工作表,最后才能返回。
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
总是需要做这样的事情吗? 我很确定我已经看过一些代码,其中对非活动工作表中的单元格进行了更改。
谢谢
答案 0 :(得分:1)
除非您希望用户看到某些东西,否则您实际上不需要激活工作表。
由于引用原因,您会收到错误消息,请务必记住在Sheet
中包含Worksheet
或Ranges
:
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
在Sheets("Sheets2")
部分之前添加了Cells
老实说,建议在VBA中搜索如何使用With
语句,这样在这种情况下会很有帮助