这么简短的一段VBA代码怎么在excel里面总是报错呢

SubCopy()DimiAsIntegerDimjAsIntegerFori=0To3j=3+i*8Sheet1.Range(ActiveCell,ActiveCell... Sub Copy()
Dim i As Integer
Dim j As Integer
For i = 0 To 3
j = 3 + i * 8
Sheet1.Range(ActiveCell, ActiveCell.Offset(i, 7)).Copy Sheet2.Range(Cells(58, j), Cells(58, j + 8))
Next
End Sub
展开
 我来答
表里如一
2013-09-15 · 知道合伙人软件行家
表里如一
知道合伙人软件行家
采纳数:2066 获赞数:11632
从事6年生产管理,期间开发了多款小软件进行数据处理和分析,后

向TA提问 私信TA
展开全部
你的复制那个代码明显就不对。。。

Sheet1.Range(ActiveCell, ActiveCell.Offset(i, 7)).Copy
这句表示至少复制8列的内容,至少一行。。

Sheet2.Range(Cells(58, j), Cells(58, j + 8))
这个呢,明显是一行,j在i为0-3的时候,依次取值是:3,11,19,26

这连个区域不一致,直接用copy方法是肯定会报错的。。
建议改成:
Sheet1.Range(ActiveCell, ActiveCell.Offset(i, 7)).Copy Sheet2.Cells(58, j)
ynkmyuxiang
2013-09-15 · 超过17用户采纳过TA的回答
知道答主
回答量:46
采纳率:0%
帮助的人:36.7万
展开全部

原因在于如果未指定所属对象时, Cells 的作用范围是针对活动工作表(代表活动工作表中所有的单元格),而不是 Sheet2 ,因此

Sheet2.Range(Cells(58, j), Cells(58, j + 8))

这样引用就会出错。可以考虑改为

Sheet1.Range(ActiveCell, ActiveCell.Offset(i, 7)).Copy Sheet2.Range(Sheet2.Cells(58, j), Sheet2.Cells(58, j + 8))
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
了尘和尚
2013-09-15 · 幻人心识本来无,罪福皆空无所住。
了尘和尚
采纳数:4256 获赞数:20072

向TA提问 私信TA
展开全部
Sheet1.Range(ActiveCell, ActiveCell.Offset(i, 7)).Copy Sheet2.Range(Cells(58, j), Cells(58, j + 8))这一句改为:

Sheets(1).Range(ActiveCell, ActiveCell.Offset(i, 7)).Copy Sheets(2).Range(Sheets(2).Cells(58, j), Sheets(2).Cells(58, j + 8))

试试。
更多追问追答
追问
改了之后错误更多了,本来提示的是range作用于worksheet时失败,可能是range用法有问题,怎么看都都看不出问题呀
追答
再试试下面的代码要是还有问题的话就说不清楚了,需要附件测试一下。
Sheets("Sheet1").Range(ActiveCell, ActiveCell.Offset(i, 7)).Copy Sheets("Sheet2").Range(Sheets("Sheet2").Cells(58,j), Sheets("Sheet2").Cells(58,j + 8))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wang_anjun
2013-09-15 · TA获得超过395个赞
知道小有建树答主
回答量:494
采纳率:0%
帮助的人:167万
展开全部
需要指定cells是哪个页面上的

Sub Copy()
Dim i As Integer
Dim j As Integer
For i = 1 To 3
j = 3 + i * 8
Sheet1.Range(ActiveCell, ActiveCell.Offset(0, 7)).Copy Sheet2.Range(Sheet2.Cells(58, j), Sheet2.Cells(58, j + 8))

Next
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
路十千
2013-09-15 · TA获得超过118个赞
知道小有建树答主
回答量:105
采纳率:0%
帮助的人:103万
展开全部
修改成:Sheet1.Range(ActiveCell, ActiveCell.Offset(i, 7)).Copy Sheet2.Cells(58, j)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式