从锯齿状数组中提取子数组并用作一维数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从锯齿状数组中提取子数组并用作一维数组相关的知识,希望对你有一定的参考价值。

我正在尝试减少宏中的冗余,但是我正努力从锯齿状的数组中获取元素并在其他地方使用它。前提是一本工作簿,其中许多工作表被工作表名称组分成新的文档,然后我可以将其发送给流程所有者,这样他们就只能获取自己的数据。

[以前,我是选择显式列出的工作表名称,然后粘贴到显式命名的新文档中,但是我必须运行10个几乎完全相同的宏才能执行此操作,而且我听说在很多情况下select也是一个不好的选择。

下面是我的最新尝试,第一个问题是在printOut行上出现类型不匹配。

Sub CopyOut()
Dim printOut, groupNames, Group1, groupArray() As Variant
Dim n, j As Long
Dim reNamed, fileName As String
Dim ws As Worksheet
Dim wb1, wb2 As Workbook
groupNames = Array("Group 1", "Group 2", "Group 3", "Group 4") 'other arrays left off for length
Group1 = Array("FA_1A Report", "FA_1A", "FA_2ACS Report", "FA_2ACS", "FA_2BCS Report", "FA_2BCS", "FANUCMED Report", "FANUCMED", "FA_RRTP1 Report", "FA_RRPT1")
groupArray = Array(groupNames, Group1)

For n = 1 To UBound(groupArray)
    fileName = "CS Data Sheet" & " " & Format(Date, "mmmyy") & "-" & groupArray(n - n)(n - 1) & ".xlsm" 'concat file name string. this is not just tacked on the end of reName because i use it on it's own later
    reNamed = "C:UsersxxDesktop" & fileName 'concat save location string
    Set wb1 = ThisWorkbook
    Set wb2 = Workbooks.Add 'create a new workbook, wb2
    wb2.SaveAs fileName:=reNamed, FileFormat:=xlOpenXMLWorkbookMacroEnabled  'save with that name and location
    printOut = Join(Application.Index(groupArray, n, 0), ",")
    wb1.Sheets(printOut).Copy Before:=Workbooks(fileName).Sheets(1) 'copy the sheets for the group and paste into the newly created document
Next
End Sub

[如果我完全不使用printOut并输入一个特定的工作表名称,那么它确实只适用于那张纸(当然),但是我需要将它复制到每个新文档中。

我也尝试过:

For n = 1 To UBound(groupArray)
...
for j= LBound(groupArray(n)) To UBound(groupArray(n))
wb1.Sheets(groupArray(n)(j)).Copy Before:=Workbooks(fileName).Sheets(1)
next
next

遍历子数组并一次复制一张工作表,但是下标超出范围。在此版本中,我尝试了各种方法,将groupArray(n)(j)的值设置为字符串或“工作表”类型以设置为变量,并在sheets()。copy中使用该变量,无济于事。] >

任何想法,我可能会出错?非常感谢

我正在尝试减少宏中的冗余,但是我正努力从锯齿状的数组中获取元素并在其他地方使用它。前提是单个工作簿,其中有许多工作表被...

答案

根据我的经验,如果您直接在代码中发现诸如工作表名称,组名称和其他数据之类的硬编码值,则往往难以维护。添加更多组,或在每个组中重新调整工作表变得成问题。我的建议是创建一个(可能是隐藏的)工作表,将您的工作表名称映射到组中。然后,您有一小部分直接在其上运行的代码。

以上是关于从锯齿状数组中提取子数组并用作一维数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java 中创建锯齿状二维数组?

csharp 如何声明,分配和初始化一维,多维和锯齿状数组的示例。

csharp 如何声明,分配和初始化一维,多维和锯齿状数组的示例。

为啥当我对锯齿状数组的子数组进行排序时,它的子数组会被排序?

VBA中两个二维数组之间的区别

将二维数组转换为列表(一维)的快速方法