ExcelVBA | 010 禁用单元格拖放功能 禁止用户使用自动填充

[mark_a]在Excel单元格或多单元格区域边缘拖动区域,可移动到其他区域,有时候不需要这种操作,为了避免错误,Excel提供了关闭此功能的VBA事件[/mark_a]

动图演示

图片[1]-ExcelVBA | 010 禁用单元格拖放功能 禁止用户使用自动填充-习听风雨

代码区

'ThisWorkbook中的代码是全局可用,相比sh表中的代码更方便,
'sh表代码请查看Sheet12中
'Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'    If Sh.Name Like "*" & "Sheet" & "*" Then
'        '如果工作表名称包含Sheet时,LIKE字符区分大小写
'        MsgBox Sh.Name '返回激活的工作表名
'    End If
'End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim s
    s = ",xxx,yyy,zzz,010禁用单元格拖放,"
    '加逗号,是为了避免出现类似xx也能被查找到,避免错误结果
    If InStr(1, s, "," & Sh.Name & ",") > 0 Then
        ' 在S中查找sh表名称,如果查找到了,结果就大于零
        MsgBox "禁用拖放功能"
        Application.CellDragAndDrop = False
    Else
        Application.CellDragAndDrop = True
        '启用了拖放功能
    End If
End Sub

返回交叉区域 Application.Intersect 方法

[mark_a]

返回一个 Range 对象,该对象表示两个或多个区域重叠的矩形区域。
语法

表达式.Intersect(Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)

表达式 一个代表 Application 对象的变量。

返回值
Range

[/mark_a]

图片[2]-ExcelVBA | 010 禁用单元格拖放功能 禁止用户使用自动填充-习听风雨

'Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'    '本段代码可使B2:B14区域单元格为空的区域禁用拖放功能,
'    '但它作用到了每个工作表,不算完美的方案.只为学习使用
'    If Not Intersect(Target, [B2:B14]) Is Nothing Then
'        'Intersect用法看本文中介绍
'        If Target <> "" Then
'            Application.CellDragAndDrop = False
'        End If
'    Else
'        Application.CellDragAndDrop = True
'    End If
'End Sub

'---------------
'以下两段代码为:进入时禁用拖放,离开sh表时启用拖放,
'代码在哪个sh代码中,哪个生效,从而达到不影响其他sh表的效果
'Private Sub Worksheet_Activate()
'    Application.CellDragAndDrop = False '整个sheet禁用拖放
'End Sub
'Private Sub Worksheet_Deactivate()
'    Application.CellDragAndDrop = True
'End Sub
'以上代码仅控制单个sh表
'---------------

单元格拖放功能 Application.CellDragAndDrop 属性

[mark_b]

如果启用单元格拖放功能,则该属性值为 True。Boolean 类型(True/Flase),可读写。
语法

表达式.CellDragAndDrop

表达式 一个代表 Application 对象的变量。

[/mark_b]

图片[3]-ExcelVBA | 010 禁用单元格拖放功能 禁止用户使用自动填充-习听风雨

离开事件 Deactivate事件

表示离开当前表时(由激活状态变为非激活状态时)

图片[4]-ExcelVBA | 010 禁用单元格拖放功能 禁止用户使用自动填充-习听风雨

与之相反的是下面的activate

activate事件

激活时触发代码,与上面的Deactivate作用相反

图片[5]-ExcelVBA | 010 禁用单元格拖放功能 禁止用户使用自动填充-习听风雨

InStr 函数 查找字符出现位置

[mark_a]返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。

语法

InStr([start, ]string1, string2[, compare])[/mark_a]

图片[6]-ExcelVBA | 010 禁用单元格拖放功能 禁止用户使用自动填充-习听风雨

InStr 函数示例
本示例使用 InStr 函数来查找某字符串在另一个字符串中首次出现的位置。

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP"    ' 被搜索的字符串。
SearchChar = "P"    ' 要查找字符串 "P"。

' 从第四个字符开始,以文本比较的方式找起。返回值为 6(小写 p)。
' 小写 p 和大写 P 在文本比较下是一样的。
MyPos = Instr(4, SearchString, SearchChar, 1)

' 从第一个字符开使,以二进制比较的方式找起。返回值为 9(大写 P)。
' 小写 p 和大写 P 在二进制比较下是不一样的。
MyPos = Instr(1, SearchString, SearchChar, 0)

' 缺省的比对方式为二进制比较(最后一个参数可省略)。
MyPos = Instr(SearchString, SearchChar)    ' 返回 9。

MyPos = Instr(1, SearchString, "W")    ' 返回 0。
「如果文章对您有用,欢迎点赞分享。」
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容