|
楼主 |
发表于 2012-8-18 03:04
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
本帖最后由 tsingcea 于 2012-8-18 03:08 编辑
zjdh 发表于 2012-8-17 18:14
把 R = Array(7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20)
替换成:
NM = UCase(ActiveSheet.Name) ...
之前说过最后一个问题了,如今却又几次增加提问,真是不好意思。可能我比较钻牛角尖吧,总是希望能够尽善尽美,做到理想状态。所以,还得麻烦老师了。真是不好意思啊。
测试发现如下问题:
1、替换模块中的程序后无法实现粘贴了。但是工作表的原来的数据(没有替换的数据)没有问题,依然可以粘贴。主要是为了有些新的功能,这个程序我在工作表中会用到,在模块中也会用到,只是模块中的需要区分下工作表。
2、如果Sheet2和Sheet4是一种,其他的工作表是另外一种,能否这样写,我是觉得这样的话应该会更方便新增工作表,因为2和4比较特殊,其他的都一样。
我替换之后的代码如下
On Error GoTo Err
Set d = New DataObject
d.GetFromClipboard
Y = UBound(Split(d.GetText(1), vbCrLf))
X = UBound(Split(d.GetText(1), vbTab)) / Y
X1 = Selection.Column
Y1 = Selection.Row
Z = ActiveSheet.UsedRange.Rows.Count
If Y + Y1 > Z Then MsgBox "你粘贴的区域超过了表格区域": Exit Sub
NM = UCase(ActiveSheet.Name)
'第一组
SH1 = Array("SHEET1", "SHEET3", "SHEET5", "SHEET7") '第一组工作表
R1 = Array(7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20) '第一组不可粘贴列号
For i = 0 To UBound(SH1)
If SH1(i) = NM Then R = R1: Exit For
Next
'第二组
SH2 = Array("SHEET2", "SHEET4", "SHEET6", "SHEET8")
R2 = Array(10, 11, 12, 14, 15, 16, 18, 19, 20)
For i = 0 To UBound(SH2)
If SH2(i) = NM Then R = R2: Exit For
Next
'........其他组
If R = "" Then Exit Sub
For i = X1 To X + X1
For j = 0 To UBound(R)
If R(j) = i Then MsgBox "你选择的区域不得粘贴!": Exit Sub
Next
Next
Selection.PasteSpecial Paste:=xlPasteValues
Exit Sub
Err:
If Application.CutCopyMode = False Then
MsgBox "您还没复制,或请重新复制。"
Else
MsgBox "如果粘贴整行或整列,请注意粘贴位置;" & Chr(10) & "另外,本命令在剪切模式下不可使用。"
End If
|
|