arrays - 多次复印多张纸

标签 arrays excel vba

感谢您为像我们这样的新手建立了一个强大的社区。
我试图建立一个宏,它可以根据用户通过谷歌搜索的输入多次复制多个选定的工作表,但我遇到了一些麻烦。
这里的问题是,虽然代码确实多次复制了多张工作表,但它失去了链接。
例如 - 我在工作簿中有标题为 A、B 和 C 的工作表,工作表 B 有一些链接到工作表 A 的单元格,类似地,工作表 C 有一些链接到工作表 B 的值,当使用这个宏时,它会创建工作表的副本一次一个。因此,如果我在选择工作表 B 和 C 后提到 4 个副本,它将创建 B 的第一个副本,然后是 C 的第一个副本,然后是 B 的第二个副本,然后是 C 的第二个副本,依此类推,直到循环结束。
但是我想要的是它同时选择两张纸然后创建副本。这是因为当我们手动执行此操作时,工作表中的链接会被修改为新创建的工作表。我的意思是,当我们选择工作表 B 和 C,然后手动创建副本时,工作表 C 将显示链接到新创建的工作表 B。
我不确定这是否可以通过 VBA 完成,但帖子显示这可以通过一些我不知道的数组函数来完成。
任何帮助都感激不尽。
我不知道如何添加文件或向这个论坛添加我必须的代码,因此我在这里添加了它

Sub MultiSheetArray()

'allows you to store an array of sheets

Dim ws As Worksheet

Dim ShtArray() As String

Dim intA As Integer

Dim intB As Integer
Dim myArray() As Variant

 Dim i As Long
 On Error GoTo endit
 Application.ScreenUpdating = False
 shts = InputBox("How many times")

' First you need to enter the sheet names into an array

For Each ws In ActiveWindow.SelectedSheets

 intA = intA + 1

 ReDim Preserve ShtArray(intA)

 ShtArray(intA) = ws.Name

Next ws



' Now list the sheets we entered into our array "shtArray"

 For i = 1 To shts

For intB = 1 To intA

ActiveWorkbook.Worksheets(myArray(x)).Copy after:=ActiveSheet

Next intB

 Next i
 Application.ScreenUpdating = True
endit:


End Sub
提前致谢。

最佳答案

复制选定工作表的多个实例

  • 要测试此过程,请打开一个新工作簿。在 VBE CRTL+F11,插入一个标准模块,把代码复制进去。添加一些工作表。现在通过单击第一个选项卡和 CRTL-单击任何其他选项卡来选择其中一些选项卡,这将创建一组工作表。现在运行首先询问“多少次”的程序。第一次不要输入超过2然后按 ENTER 看看发生了什么。

  • 代码
    Option Explicit
    
    ' Copies selected sheets multiple times after the last sheet.
    Sub MultiSheetArray()
        
        On Error GoTo endit
        Application.ScreenUpdating = False
        
        ' Input number of copies.
        Dim shts As Long
        shts = InputBox("How many times")
        
        ' Write the names of the selected sheets to an array.
        Dim sh As Object
        Dim ShtArray() As String
        ReDim ShtArray(1 To ActiveWindow.SelectedSheets.Count)
        Dim i As Long
        For Each sh In ActiveWindow.SelectedSheets
            i = i + 1
            ShtArray(i) = sh.Name
        Next sh
        
        ' Copy sheets after last sheet.
        For i = 1 To shts
            With ActiveWorkbook
                .Sheets(ShtArray).Copy After:=.Sheets(.Sheets.Count)
            End With
        Next i
        
        Application.ScreenUpdating = True
    
    endit:
    
    End Sub
    

    关于arrays - 多次复印多张纸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63871775/

    相关文章:

    string - 在VBA函数中返回带有上标字符的字符串

    arrays - 将图像数组组合成单个图像,这是 swift 中的一行图像

    java - 如何在 Java 中将正则表达式与 String.matches 一起使用

    vba - CorelDraw VBA 宏错误 : "Object Required"

    mysql - 使用 MySQL for Excel - 数据库中的一个特定表将无法导入,所有其他表都工作正常

    excel - 用于增加 EXCEL 单元格值的宏函数

    excel - 试图用 VBA 找到重复项来做一些奇怪的事情(一个棘手的问题)

    arrays - Powershell:如何使用数组或哈希表作为内联查找

    javascript - 如何迭代这些参数来过滤数组?

    java - 验证 MM/dd/yyyy 格式的 Excel 日期