这是一个简单的宏代码,用于将范围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:下标超出范围。当工作表(“配置”)。范围(“A”和& x).Select在Next x之后第二次运行时,会发生错误。我不确定是什么导致了这个错误。请保佑。
答案 0 :(得分:1)
您尚未将行号分配给FinalRow
变量。尝试:
FinalRow = Worksheets("Config").Range("A2").End(xlDown).Row
答案 1 :(得分:1)
这样更好吗?我已将workbooks
分配给workbook variables
,并取出了select
和copy
方法。我还添加了.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
答案 2 :(得分:1)
要提到的一些要点。
首先 - Excel工作簿可以包含数百万行 - 但您的代码仅限于32,768行,因为您将 FinalRow 和 X 定义为整数。使用长整数(Dim X为Long,FinalRow为Long),以防您打开的工作簿中有一行超过32,000行。
现在找出错误的原因。当您通过For-Next循环第二次运行代码时,系统会挂起,因为就其而言,活动工作簿是bFile,并且因为bFile上不存在配置选项卡(它出现在aFile上,它会因你收到的无用错误消息而崩溃(因为它无法找到正确的标签,因为它看错了地方)。
顺便提一下,每次For..Next循环触发时,您的代码都会尝试打开(bFile)。你每次都需要打开文件吗?当然,这只是将细节从一张纸复制到另一张纸的情况吗?
您还应该有一些错误处理。如果aFile不包含配置选项卡,或者bFile不包含TestCases选项卡,则代码将崩溃。我强烈建议您使用一些错误处理来处理这些实例。