在Excel中运行macros

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

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

一些观点:

  • 该文件是一个xlt文件。
  • 它被用作生成xls文件的模板。
  • 我正在使用Excel 2007,但用户将运行2007和2003的混合。
  • 当文件加载到excel中时,询问是否要启用所有的macros,我确认。
  • 它所调用的函数是公共的

我在表格的边缘创build了一系列button:

' 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 

但是,当我点击button,它给“不能运行macros'filename.xls!PrintRange”。

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

为什么我不能调用我需要的function,我怎样才能使它工作?

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

更改:

 .OnAction = "PrintRange" 

 .OnAction = "shtPage.PrintRange" 

它会工作得很好。

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

你是否公开了PrintRangemacros? 它需要被定义如下:

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