vba - 使宏在特定工作簿中运行

标签 vba excel macros

这似乎是一个简单的请求,但我似乎无法在网上找到任何答案。 我有两个打开的工作簿(假设AB)。我想要做的就是运行在工作簿 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/

相关文章:

vba - .End(xlDown).Row 从 Excel 2007 更改为 2010

loops - 为包含字符串搜索和求和的公式创建 VBA 循环

c# - 使用 excel.interop 替换 excel 中的单元格值

excel - 添加excel公式作为范围的一部分

c - 将宏参数强制为特定类型

VBA - 将列值转换为负值

vba - 通过VBA Excel从数字中删除小数

c# - 从 ASP.NET 将数据导出为 Excel 文件

c - 使用 __VA_ARGS__ 定义字符串化宏时出错

c++ - 用宏确定GCC编译器