【发布时间】:2020-09-13 14:13:58
【问题描述】:
感谢您为像我们这样的新手建立一个强大的社区。p>
我正在尝试构建一个宏,该宏可以根据用户通过谷歌搜索的输入多次复制多个选定的工作表,但我遇到了一些麻烦。
这里的问题是,虽然代码确实多次复制了多张工作表,但它失去了链接。
例如 - 我在工作簿中有标题为 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
提前致谢。
【问题讨论】:
-
我对任何其他具有相同功能的代码持开放态度。
-
手动完成任务时尝试使用宏记录器,看看生成了什么代码。
-
它给了我一组工作表。这些工作表是硬编码的。我希望它是动态的 Sub abc() ' ' ABC Macro ' ' Sheets(Array("A", "B", "C")).Select Sheets("C").Activate Sheets(Array("A" , "B", "C")).Copy before:=Sheets(4) End Sub
-
对不起,我不知道如何在代码窗口中提及代码。感谢@GSD 帮助修改原帖
-
你是如何填充“myArray(x)”的?看起来它应该可以工作,然后 Excel 会在它制作的每个副本之后添加 (2)、(3)、(4)。