在打开的工作簿上运行addin宏

时间:2015-10-19 13:38:59

标签: excel-vba vba excel

我已经看到你可以根据插入的文本运行宏,但宏必须嵌入到工作表中,即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 个答案:

答案 0 :(得分:1)

当我需要通过加载项中的模块访问工作表/工作簿级事件时,我发现这里的a link非常有用。基本实现如下:

在加载项的 ThisWorkbook 模块中

Private WithEvents App As Application
Private Sub Workbook_Open()
    Set App = Application
End Sub

现在App可用于呼叫/访问工作簿&工作表事件。如果您尝试根据加载项中的模块更改选项,则必须是Workbook_Sheetselectionchange事件(您可以阅读有关here的更多内容)而不是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