ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 23175|回复: 43

解决不连续区域无法复制、粘贴问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-7-15 18:26 | 显示全部楼层 |阅读模式
在工作表中,系统不支持不连续区域复制、粘贴,这的确有点伤脑筋。有没有办法实现这个简单的功能呢?
答案是肯定的。

我们完全可能通过VBA来实现。

先来看一下一个简单的将不连续区域转换成值的功能。

本例假定有三个区域组成的一个不连续的区域,[a1:a12]、 [c3:C12]、 [e5:f6],里面都是公式,现在希望将这三个区域的公式直接转换成值
      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-7-14 下午 05:24:11

Sub zldccmx()
    Dim
Rng As Range , Rn As Range
    Set Rng = Union([a1:a12], [c3:C12], [e5:f6]) '对于不连续区域,使用分块来完成
    For
Each Rn In Rng.Areas
        Rn.Value = Rn.Value
    Next

End Sub


楼下将介绍不连续区域复制到另外一个不连续的区域中

TA的精华主题

TA的得分主题

发表于 2009-7-15 18:46 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

回复 1楼 zldccmx 的帖子

第五句“Rn.Value = Rn.Value”错了吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-7-15 19:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这是窗体代码!

      '撰写:老朽
      '网址:http://Club.ExcelHome.net
      '日期:2009-7-15 下午 07:26:01

Private Sub CommandButton1_Click()
    Dim
Rng As Range , Sh As Worksheet, V, Rn As Range
    On Error GoTo ex
    Dim
Offset_Row%, Offset_Col%
    Set
Rng = MyTarget(1, 1)
    V = Split(Me.RefEdit1.Text, "!")
    V(1) = Split(Split(V(1), ",")(0), ":")(0)
    Set
Sh = Sheets(V(0))
    If
Mysheet.Name = V(0) Then '判断是否是同一个工作表
        For Each Rn In MyTarget.Areas '将不连续区域合并为一个连续区域,以判断选定的目标单元格是否与不连续区域存在交叉
            Set Rng = Range (Rng, Rn)
        Next

        If Not Application.Intersect(Rng, Range (V(1))) Is Nothing Then
            If MsgBox("你所选择的区域有交叉,可能会导致数据错位!" & vbCrLf _
                    & vbLf & "是否继续?", vbYesNo + vbCritical, "请确认操作!") _
               <> vbYes Then
Exit Sub
        End If
    End If
    With MyTarget
        .Areas(1).Copy Sh.Range(V(1))    '先复制首区域并粘贴到对应的区域

        '如果是选择性粘贴,则使用以下语句
        '.Areas(1).Copy: Sh.Range(V(1)).PasteSpecial xlPasteValues, , , False    '选择性粘贴,"值",不转置
        For i = 2 To .Areas.Count
            Offset_Row = .Areas(i)(1, 1).Row - .Areas(1)(1, 1).Row    '计算各区域与首区域的行偏移

            Offset_Col = .Areas(i)(1, 1).Column - .Areas(1)(1, 1).Column    '计算各区域与首区域的列偏移
            .Areas(i).Copy Sh.Range(V(1)).Offset(Offset_Row, Offset_Col)    '复制之后粘贴到对应的区域
        Next
    End With
ex:     If Err.Number <> 0 Then MsgBox "错误号" & Err.Number & vbCrLf & vbLf _
                                     & Err.Description & vbCrLf & vbLf & "你选择的目标单元格地址有误" _
                                     & vbCrLf & "导致没有办法粘贴!": Err.Clear
End
Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-7-15 19:31 | 显示全部楼层
插入一模块,复制进以下代码

Option Explicit
Public MyTarget As Range , Mysheet As Worksheet





这是工作簿代码,复制进以下代码


Option Explicit

      '撰写:38度:老朽
      '网址:http://www.38duoffice.cn/bbs
      '日期:2009-7-15 下午 07:30:25

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object , ByVal Target As Range , Cancel As Boolean )
    If
Target.Areas.Count > 1 Then
        Set MyTarget = Target
        Set
Mysheet = Sh
        UserForm1.Show
        Cancel = True

    End If
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-7-15 19:32 | 显示全部楼层
不连续区域复制粘贴.rar (14.92 KB, 下载次数: 210)
这是一个示例,供参考!

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-7-15 19:35 | 显示全部楼层
原帖由 yrgui 于 2009-7-15 18:46 发表
第五句“Rn.Value = Rn.Value”错了吧


绝对放心,没有任何错误!

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-7-15 19:46 | 显示全部楼层
原帖由 yrgui 于 2009-7-15 18:46 发表
第五句“Rn.Value = Rn.Value”错了吧


绝对放心,没有任何错误!

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-7-15 21:29 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-7-16 11:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2010-4-8 00:32 | 显示全部楼层
不错,顶一下,但这种用法,我还没有遇到过
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-27 07:34 , Processed in 0.047345 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表