在excel中运行宏
我不认为这在技术上是一个宏,但我不知道该怎么称呼它: 用户希望在工作表上打印报表中的各个部分。这些部分只是命名范围 有几点:在excel中运行宏,excel,vba,Excel,Vba,我不认为这在技术上是一个宏,但我不知道该怎么称呼它: 用户希望在工作表上打印报表中的各个部分。这些部分只是命名范围 有几点: 该文件是一个xlt文件 它用作生成xls文件的模板 我使用的是Excel2007,但用户将同时运行2007和2003 当文件加载到excel时,它会询问我是否要启用所有宏,然后我确认 它调用的函数是公共的 我在工作表边缘创建了一系列按钮: ' in a loop With ActiveSheet.Buttons.Add(rngC
- 该文件是一个xlt文件李>
- 它用作生成xls文件的模板李>
- 我使用的是Excel2007,但用户将同时运行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”
PrintRange函数位于sheet shtPage中,而循环位于名为modPage的模块中
为什么我不能调用所需的函数以及如何使其工作?您是否将
PrintRange
宏公开?它需要定义如下:
Public Sub PrintRange
'// ...'
End Sub
您是否公开了
PrintRange
宏?它需要定义如下:
Public Sub PrintRange
'// ...'
End Sub
即使将PrintRange子项声明为Public,您仍然需要更具体地引用它,以便Excel能够找到它,因为您已将它放在工作表的“代码”部分而不是模块中 更改:
.OnAction = "PrintRange"
到
它会很好的工作
警告:如果已将页面选项卡上的工作表重命名为“shtPage”,但在VBA项目浏览器中,Excel仍将工作表称为“Sheet1(shtPage)”,则需要使用Excel识别的“Sheet1”名称,不是页面选项卡上显示的“shtPage”名称。即使您的PrintRange sub声明为公共,您仍然需要更具体地引用它,以便Excel可以找到它,因为您已将它放在工作表的代码部分而不是模块中 更改:
.OnAction = "PrintRange"
到
它会很好的工作
警告:如果已将页面选项卡上的工作表重命名为“shtPage”,但在VBA项目浏览器中,Excel仍将工作表称为“Sheet1(shtPage)”,则需要使用Excel识别的“Sheet1”名称,不是页面选项卡上显示的“shtPage”名称。单击按钮时是否要打印当前范围?不是当前范围,而是命名范围。我计划使用按钮的名称作为范围的标识符。例如,如果oSite.SiteID被设置为ENG123,并且命名的范围也被称为ENG123,那么ENG123将被打印出来?你是说CStr?它是一个内部函数。但是,是的,它的格式与CStr相同。单击按钮时您是否试图打印当前范围?不是当前范围,而是命名范围。我计划使用按钮的名称作为范围的标识符。例如,如果oSite.SiteID被设置为ENG123,并且命名的范围也被称为ENG123,那么ENG123将被打印出来?你是说CStr?它是一个内部函数。但是,是的,它的格式与CStr相同。我不敢相信当我在vba中编程时,所有的编程逻辑都会从窗口消失。@graham.reeds-是的,我知道,我在Excel-vba中所做的所有工作中都把头发扯掉了一半。shtPage模块是一个类模块。如果要从Excel的UI(如按钮)调用sub,请将其放入标准模块中。如果不引用自定义对象,就不会直接调用该对象的方法,是吗?VBA有问题,但我不认为这是其中之一。我不敢相信,当我用VBA编程时,所有的编程逻辑都会从窗口消失。@graham.reeds-是的,我知道,我在Excel-VBA中做的所有工作中都把头发扯掉了一半。shtPage模块是一个类模块。如果要从Excel的UI(如按钮)调用sub,请将其放入标准模块中。如果不引用自定义对象,就不会直接调用该对象的方法,是吗?VBA有问题,但我不认为这是其中之一。