[英]VBA Error: Runtime Error: 9 - Subscript out of range when copying a worksheet from another workbook
[英]Excel VBA: Error 9 (Subscript out of Range) when pasting from one workbook to another
我对excel vba还是相当陌生,并且创建了已经使用了几个月的代码,但是突然间它停止了工作。 在显示的最后一行代码中出现运行时错误9,但无法解决该错误。
Sub BuildInsulationMTO_Click()
Application.ScreenUpdating = False
Dim wbTarget As Workbook
Dim wbSource As Workbook
Dim wbSourceFNameandPath As Variant 'Source data file name and path
Dim wbTargetFNameandPath As Variant 'Target file name and path
Dim a As Integer 'used to increment wbTarget file name
Dim x As Integer 'used in H1 C1 description section
Dim i As Integer 'Row of Source MTO
Dim j As Integer 'Row of Source Raw MTO
Dim k As Integer 'Row of Target File
Dim LastRowSource As Long 'Rows in source sheet
Dim LastRowTarget As Long 'Rows in target sheet, prior to row deletion
Dim y As Long
wbTargetFNameandPath = "L:\15.0 Engineering\LNG 1\15.0 Project Work Packs\15.10 IFS Job Cards\TempMTO\IFS Insulation MTOs\" & Format(Date, "yyyymmdd") & "_IFSInsulationMTO.xlsx"
a = 2
Do While Dir(wbTargetFNameandPath) <> "" 'If target file name exists, creates incremented file name and loops til this new name doesnt already exist
wbTargetFNameandPath = "L:\15.0 Engineering\LNG 1\15.0 Project Work Packs\15.10 IFS Job Cards\TempMTO\IFS Insulation MTOs\" & Format(Date, "yyyymmdd") & "_IFSInsulationMTO_V" & a & ".xlsx"
a = a + 1
Loop
Workbooks.Add 'create & save target excel file
ActiveWorkbook.SaveAs Filename:=wbTargetFNameandPath
Close
wbSourceFNameandPath = Application.GetOpenFilename(Title:="Select Source Data Excel File") 'select source data file
If wbSourceFNameandPath = False Then Exit Sub
Set wbSource = Workbooks.Open(wbSourceFNameandPath, False)
Set wbTarget = Workbooks.Open(wbTargetFNameandPath)
'**************************************************************H1 C1***************************************************************************************************
i = 5
j = 3
k = 2
LastRowSource = wbSource.Sheets("MTO (C1 H1)").UsedRange.Rows.Count
For i = 5 To LastRowSource
'Job Card Number
wbSource.Sheets("MTO (C1 H1)").Range("D" & i).Copy
wbTarget.Sheets("Sheet1").Range("A" & k & ":A" & k + 16).PasteSpecial Paste:=xlPasteValues
您的问题是由于使用Close
。
Close
是VBA语句,用于关闭使用VBA Open
语句Open
文件。 ( MSDN参考 )这不是关闭工作簿的声明。
因为您在执行SaveAs
之后没有关闭名称为wbTargetFNameandPath
的工作簿,但是当您看到以下语句时它仍然处于打开状态:
Set wbTarget = Workbooks.Open(wbTargetFNameandPath)
该语句用于尝试打开已经打开的工作簿时,将wbTarget
设置为引用ThisWorkbook
(我认为这是您的“源”工作簿)。
因此,要解决问题,请进行更改
Close
至
ActiveWorkbook.Close
另一种方法是使用wbTarget
从创建它的那一刻开始引用该工作簿,而不必费心关闭并重新打开它:
Set wbTarget = Workbooks.Add 'create & save target excel file
wbTarget.SaveAs Filename:=wbTargetFNameandPath
wbSourceFNameandPath = Application.GetOpenFilename(Title:="Select Source Data Excel File") 'select source data file
If wbSourceFNameandPath = False Then Exit Sub
Set wbSource = Workbooks.Open(wbSourceFNameandPath, False)
'**************************************************************H1 C1***************************************************************************************************
不同版本的Excel对新工作表具有不同的命名约定。 Excel的版本可能已更改。
更改此行以使用工作表索引而不是工作表名称可以解决该错误。
wbTarget.Sheets("Sheet1").Range("A" & k & ":A" & k + 16).PasteSpecial Paste:=xlPasteValues
wbTarget.Worksheets(1).Range("A" & k & ":A" & k + 16).PasteSpecial Paste:=xlPasteValues
您的代码正常工作后,建议将其发布到CodeReview。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.