VBA无法识别我已经打开的工作簿

它说下标超出范围。 工作簿已经打开。 我已经尝试了一个path例如:设置wkb2 =工作簿(“d:/A.xlms”)。 此外,我已经试过这个设置wkb2 = Workbooks.open(“d:/A.xlms”)与工作簿未打开。 这一切都会返回错误提到该文件不存在。

Sub CopySourceToTarget() Dim wkb1 As Workbook Dim sht1 As Worksheet Dim wkb2 As Workbook Dim sht2 As Worksheet Application.ScreenUpdating = False Workbooks("A.xlsm").Activate Set wkb1 = ThisWorkbook Set wkb2 = Workbooks("A.xlsm") ----THIS LINE RETURNS THE ERROR---- Set sht1 = wkb1.Sheets("Product codes") Set sht2 = wkb2.Sheets("Product") sht1.Range("A8:AZ65000").Copy sht2.Range("A4").PasteSpecial xlPasteValues Application.CutCopyMode = False wkb2.Close True Application.ScreenUpdating = True End Sub 

我也试过这个代码,它不工作

 Sub CopySourceToTarget() Dim Source As Range, Target As Range Set Source = Workbooks("Local Codes Creation1.xlsm").Worksheets("Product Codes").Range("A8:AZ6500") Set Target = Workbooks("A.xlsm").Worksheets("Products").Range("A4:AZ7500") Source.Copy Destination:=Target End Sub 

 Set wkb2 = Workbooks("A.xlms") 

将此行replace为

Set wkb2 = Workbooks.Open("Your Path")

Set wkb2 = Workbooks.Open("G:\Book1.xlsm")

只有worbooks.open需要完整的文件名,我的意思是path。

对于工作簿(),只能使用文件名或索引作为参数。 请参阅微软帮助以获取更多信息。

而对于工作簿已经不能打开的情况,可能会发生,你需要一个error handling。

其他方式,没有error handling,在工作簿中的每个工作簿循环,如果名称是相同的,你需要退出循环。