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是任何工作簿是活动的, 如果有的话

你的代码假设有一个活动的工作簿,如果在ActiveWorkbookNothing的情况下运行,会产生运行时错误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 

然后使用templateCopyActiveWorkbook重命名并将复制的表格移动到/如果需要的话。

您不需要隐藏模板表(然后取消隐藏它的副本),因为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