在excel中运行宏

时间:2009-07-02 14:31:42

标签: 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

然而,当我点击按钮时,它会显示“无法运行宏'filename.xls!PrintRange”。

当循环位于名为modPage的模块中时,PrintRange函数位于工作表shtPage中。

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

2 个答案:

答案 0 :(得分:5)

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

变化:

.OnAction = "PrintRange"

.OnAction = "shtPage.PrintRange"

它会正常工作。

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

答案 1 :(得分:1)

您是否公开了PrintRange宏?它需要定义如下:

Public Sub PrintRange
    '// ...'
End Sub