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 无法识别我已经打开的工作簿的主要内容,如果未能解决你的问题,请参考以下文章

公共密码无法在受保护的工作表中识别

VBA 有时无法识别通过 SAP GUI 脚本打开的 Excel 文件

宏 VBA,无法让“SaveAs”发挥作用

比较两个工作簿工作表excel vba

Excel VBA计数和存储所有打开的工作簿列表

.xlsx 的 OleDbConnection.GetOleDbSchemaTable 无法识别隐藏的工作表