在excel中运行宏

gra*_*eds 1 excel vba

我不认为这在技术上是一个宏,但我不知道还有什么可以称之为:

用户希望从工作表上的报表中打印单个部分.这些部分只是命名范围.

一些要点:

  • 该文件是一个xlt文件.
  • 它用作模板来生成xls文件.
  • 我使用的是Excel 2007,但用户将运行2007和2003的混合.
  • 当文件加载到excel时,它会询问我是否要启用所有宏并确认.
  • 它调用的功能是公共的

我在工作表的边缘创建了一系列按钮:

        ' in a loop    
        With ActiveSheet.Buttons.Add(rngCurrent.Left + 2, rngCurrent.Top + 1, rngCurrent.Width - 2, rngCurrent.Height - 1)
            .Caption = "Print"
            .OnAction = "PrintRange"
            .Font.Size = 7
            .Name = CStr(oSite.SiteID)
        End With
Run Code Online (Sandbox Code Playgroud)

但是,当我点击按钮时,它会显示"无法运行宏'filename.xls!PrintRange".

PrintRange函数位于工作表shtPage中,而循环位于名为modPage的模块中.

为什么我不能调用我需要的功能以及如何使其工作?

Ste*_*bob 5

即使您的PrintRange子声明为Public,您仍然需要更具体地引用它,以便Excel可以找到它,因为您已将它放在工作表的代码部分而不是模块中.

更改:

.OnAction = "PrintRange"
Run Code Online (Sandbox Code Playgroud)

.OnAction = "shtPage.PrintRange"
Run Code Online (Sandbox Code Playgroud)

它会工作得很好.

警告:如果您已将页面选项卡上的工作表重命名为"shtPage",但在VBA项目资源管理器中,Excel仍将工作表称为"Sheet1(shtPage)",则需要使用"Sheet1"名称Excel识别,而不是页面选项卡上显示的"shtPage"名称.