VBA 如何一次选中多个工作表 复制,保留公式

在操作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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值