Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: yjwdjfqb

[已解决]再次求助:VBA_鼠标选取当前列自定义排序-求修改代码

  [复制链接]
发表于 2012-2-6 23:39 | 显示全部楼层
yjwdjfqb 发表于 2012-2-6 23:37
Sub 科室排序()
    Dim arr, i&, c, r
    '设置自定义排序的顺序

不行呀,这是两种参照途径,意义不同。
现在附件6能否正确呢
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2012-2-6 23:42 | 显示全部楼层
爱疯 发表于 2012-2-6 23:39
不行呀,这是两种参照途径,意义不同。
现在附件6能否正确呢

存在一个问题,不没有“序号”字符时,不能排序
回复

使用道具 举报

发表于 2012-2-6 23:48 | 显示全部楼层
yjwdjfqb 发表于 2012-2-6 23:42
存在一个问题,不没有“序号”字符时,不能排序

你的意思是,可能存在无标题的情况,是吗?
虽然,还有别的方式来确定数据源。但数据源会有这样或那样变化的可能,我不清楚哪种才是最可靠的确定方式。这个,你只有自己看了。
回复

使用道具 举报

 楼主| 发表于 2012-2-6 23:54 | 显示全部楼层
爱疯 发表于 2012-2-6 23:48
你的意思是,可能存在无标题的情况,是吗?
虽然,还有别的方式来确定数据源。但数据源会有这样或那样变 ...

对,就是,可能会存在着无标题的情况,

确定数据源,我是想以鼠标所在单元位置的行,作为数据源,帮我修改下好吧老师,

真是太麻烦你了。非常的感谢。
回复

使用道具 举报

发表于 2012-2-7 00:03 | 显示全部楼层
相对来说,感觉附件5好点。

c = Range("iv1").End(xlToLeft).Column '数据源最右侧列号

问:如果表头不在第一行,也有问题
答:表头不在第行,就把1修改为几。你的表头会经常变吗?
回复

使用道具 举报

 楼主| 发表于 2012-2-7 00:10 | 显示全部楼层
爱疯 发表于 2012-2-7 00:03
相对来说,感觉附件5好点。

c = Range("iv1").End(xlToLeft).Column '数据源最右侧列号

在一个文件中,有二个工作表,其表头不在固定,我想在一个表中就用一个宏命令


回复

使用道具 举报

 楼主| 发表于 2012-2-7 00:11 | 显示全部楼层
爱疯 发表于 2012-2-7 00:03
相对来说,感觉附件5好点。

c = Range("iv1").End(xlToLeft).Column '数据源最右侧列号

老师能从附件6上修改吗,就是不加那个“序号”字符判断

点评

附件6是基于查找“序号”来往下判断的,不能不加  发表于 2012-2-7 00:25
回复

使用道具 举报

发表于 2012-2-7 00:18 | 显示全部楼层
yjwdjfqb 发表于 2012-2-7 00:10
在一个文件中,有二个工作表,其表头不在固定,我想在一个表中就用一个宏命令

Sub 科室排序()
    Dim arr, i&, c, r, x
    '设置自定义排序的顺序
    arr = Array("外妇科", "手术室", "内儿科", "西医科", "中医科", "耳鼻喉科", "放射科", "检验科", "B超室", "口腔科", "针灸科", "西药房", "中药房", "收费室", "疾控科", "合管办", "后勤科")
    With Application
        .ScreenUpdating = False
        .AddCustomList ListArray:=arr
        i = .GetCustomListNum(arr)    '返回字符串数组的自定义序列号
        Select Case acitvesheet.Name
        Case "实例1"
            x = 1    '手工确定工作表“实例1”的行号
        Case "实例2"
            x = 2    '手工确定工作表“实例2”的行号
        Case Else
            End
        End Select
        c = Cells(x, "iv").End(xlToLeft).Column   '数据源最右侧列号
        r = Cells(65536, ActiveCell.Column).End(xlUp).Row    '所选单元格所在列最后一个数据的行号
        '排序区域
        With Range(Cells(ActiveCell.Row, 1), Cells(r, c))
            '设置排序的起始单元格
            .Sort key1:=ActiveCell, order1:=xlAscending, _
                  Header:=xlNo, OrderCustom:=i + 1
        End With
        .DeleteCustomList ListNum:=i
        .ScreenUpdating = True
        MsgBox "排序完成", vbInformation
    End With
End Sub


加个判断,自行确定好具体行号。
回复

使用道具 举报

发表于 2012-2-7 00:23 | 显示全部楼层
附件6是,根据特殊单元格(序号),确定数据源,确定数据源右侧列号。序号就是表头中一个单元格,所以用了这种方式,就不必:
c = Range("iv1").End(xlToLeft).Column '数据源最右侧列号
因为这一句效果等同:
c = Rng.Item(1, 1).End(xlToRight).Column   '数据源最右侧列号


回复

使用道具 举报

发表于 2012-2-7 00:25 | 显示全部楼层
问题解决了么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 18:14 , Processed in 0.588555 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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