【发布时间】:2017-07-13 13:46:29
【问题描述】:
它说下标超出范围。工作簿已经打开。我尝试过使用路径 ex:Set wkb2 = Workbooks("d:/A.xlms")。我也试过这个 Set 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
【问题讨论】:
-
xlms->xlsm? -
您不应该按名称寻址工作簿。请改用
ActiveWorkbook。 -
这实际上是非常糟糕的建议。按名称引用工作簿可能比引用 activeworkbook 更好。这确实取决于情况,但如果我们要“笼统地说”,我会认为明确说明它会更好。
-
我刚刚注意到这一点:“它都返回错误,指出文件不存在。” - 您是否100%绝对确定您输入的文件名正确 - 包括后缀?
-
在模块中添加以下子:
Sub listallbooks(): For Each wkb In Application.Workbooks: Debug.Print Chr$(34) & wkb.Name & Chr$(34): Next: Exit Sub,然后在即时窗口中输入listallbooks并回车。你应该得到一个模块可以“看到”的所有工作簿的列表。