ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 程序开发] [第1期]控制单元格的输入顺序★★(已总结)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-7-20 14:00 | 显示全部楼层

回复帖子

[color="#0000ff"]未实现题目要求-taller

[此贴子已经被taller于2005-7-23 12:21:18编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-7-23 12:35 | 显示全部楼层

第一期Excel VBA竞赛总结: 由于时间仓促,所以本期题目对于限定条件没有充分描述,例如:不输入内容,只按回车时单元格单元格的控制,以及除了输入区域,其它单元格的状态(谢谢Emily版主提醒),鉴于上述情况,本次评分的标准是,只考察输入区域内容对于输入顺序的控制。 [color="#0000ff"]方法一:选中目标输入区域,活动单元格定位于数据区域的第一个单元格。 Private Sub Workbook_Open() Application.MoveAfterReturnDirection = xlToRight Range("B3:D5").Select End Sub 请大家注意下面的代码,虽然其输入顺序不完全符合本期题目的要求,但是有时也可以用于类似的应用中。处于数据输入模式时,仅可在当前选定区域的未锁定单元格中输入数据,但是当前选中区域不会出现颜色反转;并且输入顺序不受MoveAfterReturnDirection 的影响,默认为回车后向下移动。使用<ESC>键可以退出数据输入模式。 Private Sub Workbook_Open() Application.MoveAfterReturnDirection = xlToRight With ActiveSheet.Range("B3:D5") .Locked = False .Select End With Application.DataEntryMode = xlOn End Sub [color="#0000ff"]方法二:利用ScrollArea限定数据输入区域。 Private Sub Workbook_Open() Application.MoveAfterReturnDirection = xlToRight ActiveSheet.ScrollArea = "B3:D5" [B3].Select End Sub [color="#0000ff"]方法三:利用保护工作表限定数据输入区域。 Private Sub Workbook_Open() Application.MoveAfterReturnDirection = xlToRight With ActiveSheet .Cells.Locked = True .Range("B3:D5").Locked = False .[b3].Select .Protect .EnableSelection = xlUnlockedCells End With End Sub [color="#0000ff"]方法四:利用SelectChange事件控制输入后的活动单元格。直接判断选中单元格的行号和列号来进行控制活动单元格,下面的代码提供了另外一种的方法,利用Intersect来判断当前选中的单元格是否在数据输入区域中。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim rng As Range Application.EnableEvents = False Set rng = Range("B3:D5") If Application.Intersect(Target, rng) Is Nothing Then If Application.Intersect(Target.Offset(1, 0).EntireRow, rng) Is Nothing Then rng.Cells(1).Select Else Cells(Target.Row + 1, rng.Column).Select End If End If Application.EnableEvents = True End Sub Private Sub Workbook_Open() Application.MoveAfterReturnDirection = xlToRight [b3].Select End Sub [color="#0000ff"]方法五:利用SelectChange事件控制输入后的活动单元格,wclaw在14楼提供了另一中思路,利用数组保存单元格移动顺序,进而控件单元格的移动。

最后有点提醒大家,对于更改的系统设置,如Application.MoveAfterReturnDirection,在工作簿退出时应该恢复,请参考3楼清风的帖子。

[此贴子已经被作者于2005-7-23 12:39:34编辑过]

TA的精华主题

TA的得分主题

发表于 2005-7-7 19:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

'不好意思,上两次做的是错的,没有看到当跳到最后一个单元时返回第一个单元格,以及把区域设置错了,加注释便于看懂 Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng1 As Range, Rng2 As Range, icol% Set Rng2 = Range("b3:d5") '可将区域更改为任意连续区域,有通用性 Set Rng1 = Target.Cells(1) icol = Rng2.Column + Rng2.Columns.Count - 1 '获取最后一列列号 If Not Intersect(Rng1, Rng2) Is Nothing Then '判断更改区域是否在指定区域 If Rng1.Address = Rng2(Rng2.Count).Address Then '如果是区域最后一个单元格,则返回第一个单元格 Rng2(1).Activate ElseIf Rng1.Column = icol Then '如果是最后一列,则返回下一列的开始 Rng1.Offset(1, icol * -1 + Rng2.Column).Activate Else '横向移动 Rng1.Offset(0, 1).Activate End If End If End Sub

Sub ScrolAres() Application.MoveAfterReturnDirection = xlToRight '改变回车方向 Me.ScrollArea = "b3:d5" '设置卷轴区域(连续区域) End Sub

Sub LockCells() Application.MoveAfterReturnDirection = xlToRight '改变回车方向 Cells.Locked = True '锁定所有单元格 Range("B3:d5").Locked = False '解锁指定单元格 Me.Protect '保护工作表 Me.EnableSelection = xlUnlockedCells '不可选保护单元格 End Sub

[color="#0000ff"]非常感谢楼主提供了代码注释,便于其他朋友学习-taller

[此贴子已经被taller于2005-7-23 12:00:35编辑过]

TA的精华主题

TA的得分主题

发表于 2005-7-4 12:30 | 显示全部楼层

先给一个解决办法

Private Sub Worksheet_Activate() Application.MoveAfterReturnDirection = xlToRight ScrollArea = "B3:D5" End Sub

TA的精华主题

TA的得分主题

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

斑竹,第一次参加这种答题,比较紧张,忽略了一些事情

先前的回帖是把工作表控制在那几个单元格范围,也直接设置了enter键的方向,虽然也可以实现目的,但觉得不大好

现在增加了selection事件,把它们设置回来,望斑竹给个机会,以我现在发的为主,谢谢!

[color="#0000ff"]楼主没有完全理解题目要求(也许是我对题目解释不够详细),楼主的文件中在第一单元格输入后,会自动在输入区域填充,而在其它单元格输入后没有对单元格的移动做控制,所以未加分-taller

[此贴子已经被taller于2005-7-25 13:32:15编辑过]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2009-6-20 21:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-3-15 12:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-12-26 20:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习让人进步,知识让人提升
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 15:19 , Processed in 0.054180 second(s), 14 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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