在操作Excel时,可能需要一次性复制所有工作表,因为这种操作可以保持工作表的公式不变(不用链接到原来的工作表)
1、原始录制宏
如果用Excel自带的录制功能录制一个宏,那显示的是这样,sheets+array选择,激活,复制
所以需要构建一个数组,包含所有需要的表名,再复制
Sheets(Array("区域", "省区(区域)", "省份", "客户")).Select
Sheets("省区(区域)").Activate
Sheets(Array("区域", "省区(区域)", "省份", "客户")).Copy
2、无隐藏工作表,复制所有工作表
如果确定工作簿里面没有隐藏的工作表,要复制所有工作表,那方法很简单
Sheets.Select
Sheets.Copy
但是如果有隐藏工作表,那sheets.select会报错,因为被隐藏的工作表无法选择。
3、有隐藏工作表,只复制可见工作表
试了好几个方法都不行,最后用的这种:
这种可以一次性复制,关键是保持公式不变,不用链接到原来的工作表
1、先定义一个数组,将维度设置为工作表数量,把每个可见的工作表的名字记录到数组中;
2、现在数组中有可能有为空的值,因为有些工作簿隐藏了;
3、新建一个数组,维度设置为上个数组的可见工作表的数量,然后判断原来数组arr中每个值是否为空,如果不为空,就存储这个工作表的名字;
4、选择这组工作表,然后复制到新工作表中;
Dim arr
ReDim arr(ActiveWorkbook.Sheets.Count - 1)
i = 0
For Each sh In Worksheets
If sh.Visible = True Then
sh.Select
arr(i) = sh.Name
i = i + 1
End If
Next
Dim arrnew
ReDim arrnew(i - 1)
i = 0
For Each name In arr
If n <> "" Then
arrnew(i) = n
i = i + 1
End If
Next
Worksheets(arrnew).Select
Worksheets(arrnew).Copy