Excel加载项插入模板工作表
我在Excel 2016的function区上构build了一个Excel添加function。我目前有一个button,点击时会触发一个应该将模板插入工作簿的macros。
到目前为止,我试图通过隐藏加载项中的工作表来实现这一点,然后尝试通过按下button来切换其可见性:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Insert the R2A sheet into the Excel file ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Sub insertSheet() ActiveWorkbook.Sheets("R2A").Visible = 1 ActiveWorkbook.Sheets("R2A").Select End Sub
不幸的是,它不工作,我收到一个runtime error 9 subscript out of range
。 有没有另一种方法来实现这一目标?
你是一个加载项:你在应用程序级别生活。 ThisWorkbook
是你, ActiveWorkbook
是任何工作簿是活动的, 如果有的话 。
你的代码假设有一个活动的工作簿,如果在ActiveWorkbook
为Nothing
的情况下运行,会产生运行时错误91。
但这不是你所问的问题。
在这种情况下下标超出范围 ,意味着ActiveWorkbook.Sheets("R2A")
不存在。 如果我正确理解您要做的事情,名为“R2A”的工作表将在ThisWorkbook
(加载项的“隐藏”工作簿)中,而不在活动工作簿中。
该表在您的加载项中有特定的含义。 给它一个代码名称 (即在属性窗格(F4),设置其(name)
属性),然后通过它参考。 例如,将其称为TemplateSheet
,然后将其复制:
If ActiveWorkbook Is Nothing Then Exit Sub TemplateSheet.Copy ActiveWorkbook.Sheets(1) Dim templateCopy As Worksheet Set templateCopy = ActiveWorkbook.ActiveSheet
然后使用templateCopy
和ActiveWorkbook
重命名并将复制的表格移动到/如果需要的话。
您不需要隐藏模板表(然后取消隐藏它的副本),因为ThisWorkbook
(加载项的工作簿)在Excel中不存在作为工作簿 (它是一个加载项!)。
创build工作表并将其隐藏在后台是有限制的,考虑到dynamic添加工作表的代码非常简单:
Option Explicit Public Sub insertSheet() Dim i As Integer i = Sheets.Count Sheets.Add After:=Sheets(Sheets.Count) Sheets(i + 1).Select End Sub
这将在最后一张纸的末尾添加一张纸,然后select它。
据我所知,在VBA中, True
不是1,而是-1。 在VBE的immediate
窗口中试试这个:
CDbl(true)
如果我是正确的,那么你可能想改变
ActiveWorkbook.Sheets("R2A").Visible = 1
至
ActiveWorkbook.Sheets("R2A").Visible = True
另外,你可能想尝试
ActiveWorkbook.Worksheets("R2A").Activate