excel - 使用和激活多个工作簿的问题 excel VBA
问题描述
我在处理呼叫和处理多个工作簿时遇到了一些问题。我有一个宏,可以使用一些数据更新一些 Excel 工作表。所有 5 个电子表格都分配了一个带有文件名和文件路径的变量。当我在完成更新后运行第二个 SUB / Macri 以保存并关闭所有 5 个工作簿时 - 即使它们被分配了与前一个宏相同的变量名,它也不会选择正确的工作簿。所以我相信我的问题是 - 如果工作簿已经打开,我也无法关联变量。- 我假设如果文件名和文件路径是正确的,打开的工作簿可以设置为变量,然后能够关闭它们 - 想法?
Sub CloseWorkbooks()
Dim MB, WB1, WB2, WB3, WB4, WB5 As Workbook
Dim FP1, FN1, FN2, FN3, FN4, FN5 As String
FP1 = "G:\DATA......"
FN5 = "Book1.xlsx"
FN2 = "Book2.xlsx"
FN3 = "Book3.xlsx"
FN4 = "Book4.xlsx"
FN1 = "Book5.xlsx"
Application.DisplayAlerts = False
Set WB1 = Workbooks.Open(Filename:=FP1 & FN1)
WB1.Activate
WB1.Save
'Application.Wait (Now + TimeValue("00:00:05"))
WB1.Close
Set WB2 = Workbooks.Open(Filename:=FP1 & FN2)
WB2.Activate
WB2.Save
'Application.Wait (Now + TimeValue("00:00:05"))
WB2.Close
Set WB3 = Workbooks.Open(Filename:=FP1 & FN3)
WB3.Activate
WB3.Save
Application.Wait (Now + TimeValue("00:00:02"))
WB3.Close
Set WB4 = Workbooks.Open(Filename:=FP1 & FN4)
WB4.Activate
WB4.Save
Application.Wait (Now + TimeValue("00:00:02"))
WB4.Close
Set WB5 = Workbooks.Open(Filename:=FP1 & FN5)
WB5.Activate
WB5.Save
Application.Wait (Now + TimeValue("00:00:02"))
WB5.Close
End Sub
如果工作表未打开,则此方法有效,但如果工作表已打开,则此方法无效-这是我希望它完成的。前面的宏打开所有工作表并更新它们。我希望这个宏(上面显示的第二个)保存并关闭所有工作簿。
-谢谢。
解决方案
如果您将您的替换Workbooks.Open(...)
为对此的调用,则它应该在工作簿打开时返回,如果未打开则打开并返回它。
Public Function getWorkbookByFileName(ByVal FileName As String) As Workbook
Dim Book As Workbook: Set Book = Nothing
Dim Count As Integer: Count = Application.Workbooks.Count
Dim Index As Integer: Index = 1
Do
If Application.Workbooks(Index).FullName = FileName Then
Set Book = Application.Workbooks(Index)
Exit Do
End If
If Index < Count Then
Index = Index + 1
Else
Exit Do
End If
Loop
If Book Is Nothing Then
Set Book = Application.Workbooks.Open(FileName:=FileName)
End If
Set getWorkbookByFileName = Book
End Function
这是相当冗长的,查看检测 Excel 工作簿是否已经打开的一些答案,我发现它可以在不循环工作簿的情况下实现。
推荐阅读
- c++ - 如何通过 pthread 发送套接字 id?
- node.js - 如何在不使用索引的情况下更新 dynamodb 中的映射对象列表?
- maven - 在 rpm-maven-plugin 中有条件地将文件从源位置复制到目标位置
- docker - RabbitMQ 客户端在运行 docker-compose up 命令时抛出错误
- javascript - 修改现有的数学序列数组
- selenium-webdriver - 硒拖放方法在chrome浏览器上不起作用
- python - .copy() 之后无法从数据框中打印列表
- javascript - Vanilla JS:根据光标位置选择父级中具有类的所有元素
- java - C ++来自不同线程的相同互斥锁的多个锁
- c# - 您可以更改默认情况下 OracleConnection 使用的提供程序吗?