这似乎是一个简单的请求,但我似乎无法在网上找到任何答案。 我有两个打开的工作簿(假设A和B)。我想要做的就是运行在工作簿 B 中创建的宏,并通过工作簿 A 运行它(通过单击我已分配宏的形状) ,但宏在工作簿 B 中运行
我为工作簿 B 创建的宏是...
Sub HistoricalDataShift()
Dim ws As Worksheet
For Each ws In Sheets
ws.Activate'
Rows("18:1000").Select
Selection.Copy
Range("A19").Select
ActiveSheet.Paste
Rows("15:15").Select
Selection.Copy
Range("A18").Select
ActiveSheet.Paste
Next ws
End Sub
然后我在工作簿 B 中创建了第二个宏,其中包含...
Sub ApplicationRun()
Application.Run ("WorkbookB.xlsm!HistoricalDataShift")
End Sub
但每次我尝试宏都会在工作簿 A 中运行。
如果我能得到帮助,我将不胜感激。
最佳答案
您需要做的就是重写 HistoricalDataShift 以对其自身进行操作。那么它应该可以正常工作。
Sub HistoricalDataShift()
Dim wb As Workbook
Set wb = ThisWorkbook
Dim ws As Worksheet
For Each ws In wb.Worksheets
ws.Activate '
ws.Rows("18:1000").Select
Selection.Copy
ws.Range("A19").Select
ActiveSheet.Paste
ws.Rows("15:15").Select
Selection.Copy
ws.Range("A18").Select
ActiveSheet.Paste
Next ws
End Sub
为了让你的代码更好地工作,你可以这样做:
Sub HistoricalDataShift()
Dim wb As Workbook
Set wb = ThisWorkbook
wb.Activate
Dim ws As Worksheet
For Each ws In wb.Worksheets
Call ws.Rows("18:1000").Copy(ws.Range("A19"))
Call ws.Rows("15:15").Copy(ws.Range("A18"))
Next ws
End Sub
关于vba - 使宏在特定工作簿中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35690852/