这是一个简单的宏代码,用于从一个工作簿复制范围A2直到最后一行,并将其粘贴到另一个工作簿中。我是一个新手,用谷歌搜索了很多页面,但未能帮助自己。代码粘贴如下-
'
Sub TC_Creation_Sample()
Dim aPath As String, aFile As String, bFile As String
Dim FinalRow As Integer, x As Integer
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
aPath = "C:\temp\"
aFile = aPath & "Config"
bFile = aPath & "TC_Template"
Workbooks.Open (aFile)
Sheets("Config").Activate
'FinalRow = Cells(Rows.Count, "A").End(xlUp).Row
FinalRow = Worksheets("Config").Range("A2").End(xlDown)
For x = 2 To FinalRow
Worksheets("Config").Range("A" & x).Select
Selection.Copy
Workbooks.Open (bFile)
Worksheets("TestCases").Range("A" & x).Select
ActiveSheet.Paste
Next x
End Sub
'
结果-调试后,发现代码成功复制粘贴A2值。然而,它引发了运行时错误9:Subscript超出范围。当工作表(“Config”).Range(“A”)
需要提及的几点。
首先 - Excel 工作簿可以包含数百万行 - 但您的代码仅限于 32,768 行,因为您将 FinalRow 和 X 定义为整数。请改用长整数(将 X 调暗为长,最后一行为长),以防您打开的工作簿之一超过 32,000 行。
现在谈谈错误的原因。当您通过For-Next循环第二次运行代码时,系统挂起,因为就它而言,活动工作簿是bFile,并且因为配置选项卡在bFile上不存在(它在aFile上),它会崩溃,并出现无益的错误消息(因为它找不到正确的选项卡,因为它在错误的地方查找)。
顺便说一句,每次For… Next循环触发时,您的代码都会尝试打开(bFile)。每次都需要打开文件吗?当然,这只是将详细信息从一个工作表复制到下一个工作表的情况?
您还应该有一些错误处理。如果 aFile 不包含“配置”选项卡,或者 bFile 不包含“测试用例”选项卡,则代码将崩溃。我强烈建议您进行一些错误处理来处理这些实例。
您尚未将行号分配给FinalRow
变量。尝试:
FinalRow = Worksheets("Config").Range("A2").End(xlDown).Row
这样更好吗?我将您的工作簿分配给
工作簿变量
,并取出了选择
和复制
方法。我还添加了.行
,正如其他人也建议的那样
Sub TC_Creation_Sample()
Dim aPath As String, aFile As String, bFile As String
Dim FinalRow As Long, x As Long
Dim wbA As Workbook, wbB As Workbook
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
aPath = "C:\temp\"
aFile = aPath & "Config"
bFile = aPath & "TC_Template"
Set wbA = Workbook.Open(aFile)
Set wbB = Workbooks.Open(bFile)
FinalRow = wbA.Worksheets("Config").Range("A2").End(xlDown).Row
'FinalRow = wbA.Worksheets("Config").Cells(Rows.Count, "A").End(xlUp).Row
For x = 2 To FinalRow
wbB.Worksheets("TestCases").Range("A" & x).Value = wbA.Worksheets("Config").Range("A" & x)
Next x
End Sub
非常感谢。最好的问候。
我有一个基于Euler项目问题3的代码:“13195的素数因子是5、7、13和29。600851475143中最大的素数因子是什么?” 我在下面有一个我认为可行的代码,但第9行()不断返回错误:“索引器:列表索引超出范围”。当我在for循环中移动时,似乎并没有修改列表,所以我不确定出了什么问题。 有人知道我哪里错了吗? 非常感谢。
我正试图从另一个excel文件复制工作表到其中一个工作表,但我得到了一个下标超出范围的错误。此错误来自行'.worksheet(1).usedrange.copy thisworkbook.worksheets(“sheet1”).range(“a1”)‘。
我在实验基于范围的for循环时发现,如果你使用基于范围的for循环来循环一个向量,它会出现超出范围的错误,如果你使用基于范围的for循环,有没有办法避免这个错误 它会显示此错误
为了完成这项任务,我花了几周时间试图从其他建议中拼凑出一个完整的VBA,但现在我要向大家寻求答案。我试图从ws2中的a:K列中复制一个范围,该行以值c开头,该值与ws1中的值I匹配,该行以ws1中的值I开头。正在复制的条件是1和0。它基本上是一个美化的循环v形查找,粘贴动态范围。 我弄清楚了循环机制,现在我只需要帮助编写代码来复制选定的单元格。 这是我到目前为止所拥有的:
由于valgrind中出现了一些分段错误和警告,我发现这段代码不正确,并且在for range循环中有一些悬而未决的引用。 看起来好像开始和结束是从一个临时循环中提取的,并且在循环中丢失了。 当然,一种方法是 然而,我想知道为什么for(auto e:f()[5])是一个错误,以及是否有更好的方法或某种方法来设计f,甚至容器(