Vba Can';我看不出是什么;下标超出范围“;

Vba Can';我看不出是什么;下标超出范围“;,vba,excel,Vba,Excel,我试图在Excel中的VBA中创建一个宏,以将一个工作表的内容复制到另一个工作表(最终将升级为将内容从一个工作簿复制到另一个工作簿,但需要首先证明这一概念),但我一直遇到运行时错误“9”:“下标超出范围”。问题是,我看不出高亮显示线的哪一部分可能超出范围 我正在使用一个名为“元测试”的工作簿,它有3个工作表,下面的代码位从A1开始,并且只向上递增。我以前能够参考这两个工作表,以便能够跨一行进行复制,因此我知道问题并不存在。这是调试器高亮显示的文本的第四行(以“Do While Trim(应用程序

我试图在Excel中的VBA中创建一个宏,以将一个工作表的内容复制到另一个工作表(最终将升级为将内容从一个工作簿复制到另一个工作簿,但需要首先证明这一概念),但我一直遇到运行时错误“9”:“下标超出范围”。问题是,我看不出高亮显示线的哪一部分可能超出范围

我正在使用一个名为“元测试”的工作簿,它有3个工作表,下面的代码位从A1开始,并且只向上递增。我以前能够参考这两个工作表,以便能够跨一行进行复制,因此我知道问题并不存在。这是调试器高亮显示的文本的第四行(以“Do While Trim(应用程序…”开头的行)

注意:已编辑以考虑文件扩展名(如注释中所建议的)。仍会抛出相同的错误,但现在在第11行(第一条注释下)抛出该错误

Private子命令按钮21_Click()
尺寸i为整数,j为整数,k为整数
i=1
边修剪边做(Application.workbook(“MetaTesting.xlsm”)。工作表(3)。单元格(i,1)。值)”
j=1
边修剪边做(Application.workbook(“MetaTesting.xlsm”)。工作表(3)。单元格(1,j)。值)”
'将单元格数据从一张图纸复制到另一张图纸
Application.Workbooks(“MetaTesting.xlsm”)。工作表(1)。单元格(i,j)。值=Application.Workbooks(“MetaTesting.xlms”)。工作表(3)。单元格(i,j)。值
j=j+1
环
'复制上一行的格式并粘贴到当前行。从第3行开始,从第2行复制格式
如果我大于2,那么
k=i-1
应用程序。工作手册(“MetaTesting.xlsm”)。工作表(1)。单元格(k,j)。副本
Application.workbook(“MetaTesting.xlsm”)。工作表(1)。范围(单元格(i,1),单元格(i,j))。粘贴特殊粘贴:=xlPasteFormats
如果结束
i=i+1
环
端接头

感谢您的帮助。

您可以在不使用所有循环的情况下执行此操作,只需复制整个工作表-复制功能将为您处理跳过空白区域的操作

Workbooks("MetaTesting").Worksheets(1).Cells.Copy
Workbooks("MetaTesting").Worksheets(2).Cells.PasteSpecial xlPasteValues
要仅复制单元格块,请执行以下操作:

Workbooks("MetaTesting").Worksheets(1).Range("A1:M100").Copy
Workbooks("MetaTesting").Worksheets(2).Range("F12").PasteSpecial xlPasteValues  ' this is the top-left corner of the paste, it'll fill in the rest

第11行的问题可能是由于(“MetaTesting.xlms”)。看起来文件扩展名有点错误;应该是.xlsm,就像在等式的前半部分一样。

好的,现在确定工作簿扩展名是必需的,让我们将代码缩减到必要的范围

with Workbooks("MetaTesting.xlsm")
    .Worksheets(3).Cells.Copy Destination:=.Worksheets(1).Cells
    .Worksheets(1).Cells = .Worksheets(1).Cells.Value
end with

当您使用
Dim i As Long、j As Long、k As Long
时,是否会出现相同的错误?请使用
工作簿(“MetaTesting.xlsm”)
工作簿(“MetaTesting.xlsb”)
,视情况而定;无论
报告了什么,请在VBE的即时窗口(Ctrl+G)中使用此工作簿.Name
。(顺便说一句,这些
应用程序
调用似乎都不是必需的)@Jeeped它不需要声明,只要我测试的部分大约是10乘10。但是,将.xlsm添加到工作簿名称的末尾会将错误迁移到第11行(在第一条注释下).但同样的错误。由于问题似乎是在任何复制开始之前产生的,我认为实际问题要么在
工作簿(“元测试”)中
或变量赋值。虽然你提出了一个有效的观点,但我认为它并没有解决当前的问题。如果要复制的单元格块长度未知,这种复制方法会有效吗?它确实有效,而且让我的生活更轻松!只是想知道,除了第一行之外,我如何引用整个列?@Imamadmad-当你将问题的条件更改为以前正确的答案变为错误时,接受提供的答案并转到另一个问题被认为是好的。@Jeped问题的条件没有改变。当我按照自己的方式进行并请求帮助时,我收到了一个错误,而有人提供了很多帮助解决问题的更简单方法避免了错误。你在一条评论中建议在问题的末尾加上扩展名,这确实有帮助,但这并不能解决整个问题,我只能接受一个答案。不过,我将对所有三个答案投赞成票,因为它们都在帮助解决问题中发挥了作用。啊,这确实解决了一个问题我的问题,但我正在标记另一个答案,因为它解决了更多的问题。谢谢你的帮助!总是错过那些小事情!
with Workbooks("MetaTesting.xlsm")
    .Worksheets(3).Cells.Copy Destination:=.Worksheets(1).Cells
    .Worksheets(1).Cells = .Worksheets(1).Cells.Value
end with