Office中国论坛/Access中国论坛

标题: excel每录入一条就自动排序 [打印本页]

作者: jl128    时间: 2011-3-29 10:25
标题: excel每录入一条就自动排序
请问大家一个问题:在EXCEL里面,我想把新录入的数据自动排序,像手机里面一样,新录入的数据自动按字母排序(每录入一条就自动排序)

请大家帮帮我,谢谢!
作者: pureshadow    时间: 2011-3-29 11:15
每录入一条就要排序,那是要用代码来完成的。
录入完了一起排序,只要按个排序键就可以完成了。
作者: roych    时间: 2011-3-29 14:26
回复 pureshadow 的帖子

1、这个貌似发错版块了。小妖姐姐看看可否移动一下?
2、诚如小妖姐姐所说,虽然很简单(就一行),但必须用代码才能实现[attach]45218[/attach]:

  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. '对A列进行升序排序,如果是降序请把最后一个参数改为:xlDescending
  3. Range("A:A").Sort Range("A1"),xlAscending
  4. End Sub
复制代码
3、如果无法执行,很可能因为您的Excel禁用了宏,请按附图修改宏的安全性(以2003版本为例):

[attach]45217[/attach][attach]45216[/attach]


作者: jl128    时间: 2011-3-29 15:22
能不能说得具体点,在什么地方写代码等等。。。我是一个代码盲。谢谢
作者: jl128    时间: 2011-3-29 15:34
回复 roych 的帖子

你好,谢谢你对我的帖子“excel每录入一条就自动排序”的关心,并给了我答案。
代码我加进去了,但出现一个问题,就是比如我用B列进行排序,但加了代码后,后面的C、D、E等列没有跟着排序,这样就导致 了我的数据错乱
能不能帮我修改一下,谢谢
作者: roych    时间: 2011-3-29 15:35
回复 jl128 的帖子

操作的东西不好说,附上一个录像吧:
[attach]45220[/attach]

作者: jl128    时间: 2011-3-29 15:38
还要,比如我在B列12行中录入数据,一推到B列13行录入数据时,才录入的数据就直接跳了,这样导致我一列是数据还没有录入完。
作者: roych    时间: 2011-3-29 15:47
本帖最后由 roych 于 2011-3-29 15:57 编辑

改成这个试试看?
  1. If Target.Column = 1 And Target.Row > Range("E:E").CurrentRegion.Rows.Count Then Range("A:E").Sort Range("A1"), xlAscending
复制代码
[attach]45221[/attach]
你可以把里面的E列即Range("E:E"),改为其它一些不可为空的列(即可用以判断到底是否已经完整输入一条记录的单元格),例如Range("A:A")。

作者: jl128    时间: 2011-3-29 16:08
回复 roych 的帖子

不行啊,能不能把你的QQ号码说给我啊,谢谢你
作者: roych    时间: 2011-3-29 16:15
你传个附件上来吧。附件都是俺在做(听起来好像是俺在求助似的)……老板经常说,“上班时间聊Q的同事,你们辛苦了”,所以我不敢上Q。
作者: pureshadow    时间: 2011-3-29 16:15
移了。
个人觉得,这么点事用代码实在是有点麻烦,其实排序也就是点一下鼠标而已。
作者: roych    时间: 2011-3-29 16:19
当然麻烦啦……只是,既然LZ希望用代码实现,那做个实例给Ta参考下也无妨。
作者: jl128    时间: 2011-3-29 16:30
回复 roych 的帖子

[attach]45222[/attach]
就是这个表,我以后还要在这个里面添加很多内容,想输入完后他自动排序,但每一行的数据不能改变,否则就变乱了。同时要把这一行输入完后才自动排序。谢谢!

作者: roych    时间: 2011-3-29 19:31
回复 jl128 的帖子

废话少说,请看招:
[attach]45224[/attach]

作者: jl128    时间: 2011-3-30 08:48
回复 roych 的帖子

虽然没有得到解决,但还是非常谢谢你!
作者: 游戏人生    时间: 2011-4-2 15:53
roych 发表于 2011-3-29 19:31
回复 jl128 的帖子

废话少说,请看招:

请教仁兄,如果在此基础上,再选第二,第三个对象排序,代码如何变化?
如第一为A例,第二为B例,第三为C例。
作者: roych    时间: 2011-4-2 16:56
多加几个Key就好了。例如:
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. If Target.Row > Range("A4:F4").End(xlDown).Row Then
  3. Range("A4:F" & Range("A4:F4").End(xlDown).Row).Sort key1:=Range("B4"), order1:=xlAscending, header:=xlGuess, key2:=Range("E4"), order1:=xlAscending, header:=xlGuess, key3:=Range("C4"), order1:=xlAscending, header:=xlGuess
  4. End If
  5. End Sub
复制代码

作者: joyark    时间: 2011-7-23 02:30
跟一贴,楼主,thank you!!!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3