excel - 从另一个工作簿调用活动 VBA 脚本
问题描述
我可以从当前工作簿运行此 VBA 脚本,但我想从另一个新工作簿运行并获得结果。
Sub ListAllSheets()
Dim ws As Worksheet
Dim Counter As Integer
Counter = 0
For Each ws In ActiveWorkbook.Worksheets
ActiveCell.Offset(Counter, 0).Value = ws.Name
Counter = Counter + 1
Next ws
End Sub
解决方案
这取决于工作簿是否已经打开,并且ActiveCell
仅在工作表打开时才有效,Active
如果您必须使用ActiveCell
Sub ListAllSheets()
Dim wb As Workbook
Set wb = Workbooks("Transactions")
Dim ws As Worksheet
Dim Counter As Integer
Counter = 0
For Each ws In wb.Worksheets
ws.Activate
Application.ActiveCell.Offset(Counter, 0).Value = ws.Name
Counter = Counter + 1
Next ws
End Sub
这可能不完全符合您的要求,因为您的问题和代码示例都不是很清楚(对我来说)。尝试找到另一种根本不使用ActiveCell
的方法以获得更好的结果。也许是这样的:
Sub ListAllSheets()
Dim wb1 As Workbook
Set wb1 = Workbooks("Transactions")
Dim ws1 As Worksheet
Dim wb2 As Workbook
Set wb2 = Workbooks("OtherWorkbook")
Dim ws2 as Worksheet
Set ws2 = wb2.Worksheets("Sheet1")
Dim Counter As Integer
Counter = 1
For Each ws1 In wb1.Worksheets
ws2.Cells(Counter, 1).Value = ws1.Name
Counter = Counter + 1
Next
End Sub
一种更可靠的设置 Workbook 对象的方法是在打开时抓取:
Set wb1 = Workbooks.Open("C:\Transactions.xlsx")
推荐阅读
- java - 如何在没有 WebSecurityConfigurerAdapter 的情况下更改 HttpSecurity
- java - java中的文件读取和访问元素
- python - 尝试使用 Tweepy 从 Twitter API 流式传输推文时出现 401 错误
- python - 已解决:异步 websockets while 循环逻辑
- mongodb - Mongorestore 4.2 可以与 AWS DocumentDB 4.0 一起使用吗?
- swift - SpriteKit 更新节点位置导致动画故障
- amazon-web-services - 使用 SNS 发送推送通知,但在 Android 设备上未收到通知
- c# - 为什么更改内容后我的xml相同?
- javascript - 成员函数如何访问您的对象?
- ibm-watson - 有没有办法重命名 IBM Watson 意图?