使macros在特定的工作簿中运行

这似乎是这样一个简单的请求,但我似乎无法find任何答案在线。 我有两个开放的工作簿(让我们说AB )。 我所要做的就是运行我在工作簿B中创build的macros,并通过工作簿A运行它(通过单击我已经分配了一个macros的形状),但运行在工作簿B中的macros

我为工作簿B创build的macros是…

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中创build了第二个macros…

 Sub ApplicationRun() Application.Run ("WorkbookB.xlsm!HistoricalDataShift") End Sub 

但是,每次我尝试macros一直在工作簿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 

尝试声明你的工作簿对象?

 Dim wkbkA as workbook set wkbkA = 'directory here 

然后在With... End With运行你的代码

 With wkbkA .range('etc......... End With 

在这个简短的例子中,我们假设WorkbookB.xlsm最初是唯一打开的工作簿并托pipe这个macros:

 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 

您可以使用Worksheets("<worksheetname>")

例如Worksheets("A").Activate

cv = Worksheets(Worksheet).Cells(DataSeriesEnd, rc_index)

工作表保存工作表名称。

等等

这段代码将通过整个工作表集合,其中w是当前工作表名称:

 For Each w In Worksheets ....... Next w