Vba 使宏在特定工作簿中运行
这似乎是一个简单的请求,但我似乎无法在网上找到任何答案。 我有两本打开的工作簿(比如A和B)。我所要做的就是运行我在工作簿B中创建的宏,并通过工作簿a运行它(通过单击我指定了宏的形状),但运行在工作簿B中的宏 我为工作簿B创建的宏是Vba 使宏在特定工作簿中运行,vba,excel,macros,Vba,Excel,Macros,这似乎是一个简单的请求,但我似乎无法在网上找到任何答案。 我有两本打开的工作簿(比如A和B)。我所要做的就是运行我在工作簿B中创建的宏,并通过工作簿a运行它(通过单击我指定了宏的形状),但运行在工作簿B中的宏 我为工作簿B创建的宏是 Sub HistoricalDataShift() Dim ws As Worksheet For Each ws In Sheets ws.Activate' Rows("18:1000").Select
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中运行
如果我能得到帮助,我将不胜感激 是否尝试声明工作簿对象
Dim wkbkA as workbook
set wkbkA = 'directory here
然后在中使用。。。以
With wkbkA
.range('etc.........
End With
您可以使用
工作表(“”)
e、 g.工作表(“A”)。激活
或者cv=工作表(工作表).单元格(DataSeriesEnd,rc\u索引)
工作表保存工作表名称的位置
等等
此代码段将遍历整个工作表集合,其中w是当前工作表名称:-
For Each w In Worksheets
.......
Next w
在这个简短的示例中,我们假设WorkbookB.xlsm最初是唯一打开的工作簿,并承载以下宏:
Sub HistoricalDataShift()
Dim wkbB As Workbook
Dim wkbA As Workbook
Set wkbB = ThisWorkbook
Workbooks.Open Filename:="WorkbookA"
Set wkbA = ActiveWorkbook
wkbA.Sheets(1).Range("B9").Value = "whatever"
End Sub
您所需要做的就是重写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
可能的重复我相信这是一个重复的问题如下:注意,您编写的宏不是为从另一个工作簿使用而设计的,因为它缺少在复制和粘贴时要使用的工作簿的显式引用。@Ralph这不是这些宏的副本,因为应用程序.Run
对OP工作正常。OP的问题是工作簿B中的代码没有显式引用说明应该在哪个工作簿上操作。声明工作簿对象是必需的,因为HistoricalDataShift需要引用自身。但你还没有解释这种联系。很好,我记住了你的答案,花了3分钟键入了一个有说服力的回答。这对OP的框架不起作用,因为工作簿a正在调用工作簿B。因此,你不希望工作簿B打开工作簿a。激活工作簿然后激活工作表会起作用,但你没有真正解释如何做。问题包括使用因此,我觉得没有必要重新发明众所周知的轮子。而是提供基于给定代码的示例。因此,使用activate的示例和使用单元格引用的示例。嘿@D_Bester,我知道这是第二个问题,但我如何更改上面的公式,使第15行仅粘贴为A18中的值(我一直在玩PasteSpecial
,但就是无法正确粘贴)。