VBA 无法识别我已经打开的工作簿
Posted
技术标签:
【中文标题】VBA 无法识别我已经打开的工作簿【英文标题】:VBA can't recognize my already open workbook 【发布时间】: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
并回车。你应该得到一个模块可以“看到”的所有工作簿的列表。
【参考方案1】:
Set wkb2 = Workbooks("A.xlms")
将此行替换为
Set wkb2 = Workbooks.Open("Your Path")
例如
Set wkb2 = Workbooks.Open("G:\Book1.xlsm")
【讨论】:
我的工作簿已经打开了为什么还要使用 Workbooks.open 有什么理由吗。 如果工作簿打开,您可以使用这样的集合: Set wb = Workbooks("selection.xlsm") 。只给出文件名,不给出路径【参考方案2】:只有 worbooks.open 需要完整的文件名,我的意思是路径。
对于 workbooks() ,您仅将文件名或索引用作参数。 有关详细信息,请参阅 microsoft 帮助。
对于工作簿尚未打开的情况,这种情况可能并且将会发生,您需要进行错误处理。
其他方式,不进行错误处理,在工作簿中的每个工作簿中循环,如果名称与您需要退出循环的名称相同。
【讨论】:
以上是关于VBA 无法识别我已经打开的工作簿的主要内容,如果未能解决你的问题,请参考以下文章