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