将ActiveSheets数组保存为variables

我希望有人可以帮我解决我所遇到的纸张arrays问题。 有关背景信息,主要的“模板”工作表会被复制多次,因为每个版本都会存储一个新的input。 新创build的工作表是以input命名的。 input几乎是随机的,所以用sheetname定义不是一个选项。

一旦工作簿添加了所有新的工作表,我试图隔离工作表的一个子集。 我遇到的问题是工作表编号(如在项目窗口中所见)不必按顺序排列。 还有很多床单被隐藏。

下面的代码是用来创buildsheet数组的部分,当试图将数组保存为variables(objsheets)时会中断该数组。

不知道我缺less这个数组保存。 任何帮助将不胜感激。 代码如下。

谢谢,JM

此时,工作簿将复制“模板”工作表,并添加50个新工作表(假设编号)。

Sub SheetArrayTest Dim mySheet As Object Dim objShts As Excel.Sheets Dim varArray As Variant Dim FirstSheetNum As Long Dim FirstSheet As String Dim LastSheetNum As Long Dim LastSheet As String 'Selects template sheet Sheets("Template").Select 'Selects the first sheet following the template sheet, and is the desired start of the array Sheets(ActiveSheet.Index + 1).Activate 'Creates variables for starting point FirstSheet = ActiveSheet.Name FirstSheetNum = ActiveSheet.Index 'Loops through each sheet in the workbook following the "FirstSheet" and selects it to create the array For Each mySheet In Sheets With mySheet If .Visible = True And mySheet.Index >= FirstSheetNum Then .Select Replace:=False End With LastSheetNum = mySheet.Index LastSheet = Sheets(LastSheetNum).Name If FirstSheetNum < LastSheetNum Then 'Attempt at preserving the array ReDim varArray(FirstSheetNum To LastSheetNum) varArray(LastSheetNum) = LastSheet End If Next mySheet 'ERROR Set objShts = Sheets(varArry) ... End Sub 

您不能使用Set关键字来分配给数组。 这是你的第一个问题,并会解释这一行的错误。

 Set objSheets = Sheets(varArray) 

该行也可能失败,因为Sheets会采用索引值,而不是数组值。

您也不会使用ReDim Preserve来保存这个数组来扩展它。

无论如何…让我们看看我们是否无法弄清楚。 这听起来像是你想存储一个Sheet/Worksheet Objects的数组。 但是你的代码是给你的数组( LastSheet )分配一个string值,而不是一个对象。

而不是存储工作表名称( LastSheet )在数组中,存储工作表本身(除非你真的需要索引值)。

你也许可以修改这个:

 Dim numberOfSheets as Integer numberOfSheets = -1 For Each mySheet In Sheets With mySheet If .Visible = True And mySheet.Index >= FirstSheetNum Then .Select Replace:=False End With LastSheetNum = mySheet.Index LastSheet = Sheets(LastSheetNum).Name If FirstSheetNum < LastSheetNum Then 'increase the size of the array numberOfSheets = numberOfSheets + 1 ReDim Preserve varArray(numberOfSheets) Set varArray(numberOfSheets) = Sheets(LastSheet) End If Next mySheet 

你根本不需要variablesobjSheets

 Sub M_snb() For Each sh In Sheets If sh.Visible = -1 And sh.Name <> "template" Then c00 = c00 & "|" & sh.Name Next Sheets(Split(Mid(c00, 2), "|")).Select End Sub 

如果sh.Visible = -1并且sh.Name <>“template”则c00 = c00&“|”Sub M_snb() &sh.Name下一步

表格(分割(Mid(c00,2),“|”))。selectEnd Sub

礼貌的snb