|
楼主 |
发表于 2009-7-15 19:27
|
显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
这是窗体代码!
'撰写:老朽
'网址: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
|
|