使macros在特定的工作簿中运行
这似乎是这样一个简单的请求,但我似乎无法find任何答案在线。 我有两个开放的工作簿(让我们说A和B )。 我所要做的就是运行我在工作簿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