打开工作簿时运行插件宏

3

我看到过可以根据插入的文本运行宏,但是宏必须嵌入在工作表中,即:Private Sub Worksheet_Change(ByVal Target As Range)

我想做的是从用户的工作簿中调用宏,该工作簿不会在工作表级别上已经嵌入“Worksheet_Change...”。有什么办法可以做到这一点吗?

至于额外的背景知识,我知道可以从加载项中运行宏,但我希望使用条形码扫描来激活它,而不是从按钮或其他接口调用宏。

我的条形码读取为Make Landscape 1 pg。希望使用以下修改:

Private Sub Worksheet_Change(ByVal Target As Range)
    If (Target.Value) = "Make Landscape 1 pg" Then
   With Application
        .EnableEvents = False
        .Undo
        .EnableEvents = True
    End With
    Application.ScreenUpdating = False
        'ActiveWindow.SelectedSheets.PrintPreview
        ActiveSheet.Select
        With ActiveSheet.PageSetup
            .Orientation = xlLandscape
            .FitToPagesWide = 1
            .FitToPagesTall = 1
        End With
        Application.ScreenUpdating = True
    End If
End Sub
1个回答

1
这是我在需要通过模块访问工作表/工作簿级事件时发现非常有用的链接。基本实现如下: 在Add-In的ThisWorkbook模块中:
Private WithEvents App As Application
Private Sub Workbook_Open()
    Set App = Application
End Sub

现在可以使用 App 来调用/访问工作簿和工作表事件。如果您正在尝试从插件中的模块检查某些内容的选择更改,那么必须使用 Workbook_Sheetselectionchange 事件(您可以在 这里 阅读更多相关信息),而不是 Worksheet_Change 事件。此事件可以与先前设置的 App 变量一起使用,如下所示:

在插件的 ThisWorkbook 模块中:

Private Sub App_SheetSelectionChange(ByVal Sh As Object, _ 
ByVal Target As Excel.Range)
    If (Target.Value) = "Make Landscape 1 pg" Then
        With Application
            .EnableEvents = False
            .Undo
            .EnableEvents = True
        End With
        Application.ScreenUpdating = False
        ActiveSheet.Select
        With ActiveSheet.PageSetup
            .Orientation = xlLandscape
            .FitToPagesWide = 1
            .FitToPagesTall = 1
        End With
        Application.ScreenUpdating = True
    End If
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接