Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3759|回复: 4

[已解决]有关.排序的问题,求助!【如有负数.排序就会不正确】

[复制链接]
发表于 2016-9-14 20:30 | 显示全部楼层 |阅读模式
2016-09-15_201917.jpg
【如有负数.排序就会不正确】
listview-添加点击排序-03另.rar (17.45 KB, 下载次数: 4)
发表于 2016-9-14 22:08 | 显示全部楼层
本帖最后由 today0427 于 2016-9-14 22:16 编辑

什么商店名字我去瞅瞅?买东西还给找钱太好了!
这个我只会写直接在工作表中排好序再导入的那种,数据不多的话速度还可以。或者你也可以等大神给你写个更好的,刚好我再学习一下。

  1. Option Explicit
  2. Dim o As Byte

  3. Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
  4.     Dim k%
  5.         k = ColumnHeader.Index
  6.         Call px(k, o)
  7.         Me.ListView1.ListItems.Clear
  8.         Call tjlist
  9. End Sub
  10. Function px(k, o)
  11.     Application.ScreenUpdating = False
  12.             With Sheet1.[a1].CurrentRegion
  13.                 .Sort Sheet1.Cells(2, k), o, , , , , , 1
  14.             End With
  15.             o = IIf(o = 1, 2, 1)
  16.     Application.ScreenUpdating = True
  17. End Function

  18. Private Sub UserForm_Initialize()
  19.     Application.Visible = False
  20.     '导入数据
  21.     Dim i
  22.     o = 1
  23.     ListView1.BorderStyle = ccFixedSingle  '设置边框样式。
  24.     ListView1.View = lvwReport  '设置 View 属性为报表型(表格)。

  25.     For i = 1 To 5                                                  '加列标题
  26.         ListView1.ColumnHeaders.Add , , Worksheets(1).Cells(1, i), ListView1.Width / 5
  27.     Next i
  28.   Call tjlist
  29. End Sub

  30. Sub tjlist()
  31.     Dim x, y
  32.     For x = 1 To Worksheets(1).Cells(65536, 1).End(xlUp).Row            '加行数据
  33.         ListView1.ListItems.Add , , Worksheets(1).Cells(x + 1, 1)   '加第一列
  34.         For y = 1 To 5 - 1 '加列数据
  35.             ListView1.ListItems(x).SubItems(y) = IIf(y < 3, Sheet1.Cells(x + 1, y + 1), Format(Sheet1.Cells(x + 1, y + 1), "0.00"))
  36.         Next y
  37.     Next x
  38. End Sub
  39. Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  40.     Application.Visible = True
  41. End Sub
复制代码

listview-添加点击排序.rar

28.01 KB, 下载次数: 0

评分

参与人数 1 +1 收起 理由
HP2009 + 1 赞一个

查看全部评分

回复

使用道具 举报

发表于 2016-9-14 22:11 | 显示全部楼层    本楼为最佳答案   
祝您好运!已完美解决,请测试:

替换你原来的代码:

  1. Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
  2.     Dim i&, c%
  3.     With ListView1
  4.         c = ColumnHeader.Index - 1
  5.         If c > 2 Then
  6.             For i = 1 To .ListItems.Count
  7.                 If .ListItems(i).SubItems(c) <> "" Then .ListItems(i).SubItems(c) = Format(.ListItems(i).SubItems(c) + 100000, "0000000000.00")
  8.             Next
  9.         End If
  10.         
  11.         .SortKey = c
  12.         .SortOrder = IIf(.SortOrder, 0, 1)
  13.         .Sorted = True

  14.         If c > 2 Then
  15.             For i = 1 To .ListItems.Count
  16.                  If .ListItems(i).SubItems(c) <> "" Then .ListItems(i).SubItems(c) = Format(Format(.ListItems(i).SubItems(c), "0.00") - 100000, "0.00")
  17.             Next
  18.         End If
  19.     End With
  20. End Sub
复制代码
也可直接下载应用:
listview-添加点击排序-03另-wanao.rar (18.46 KB, 下载次数: 2)

评分

参与人数 1 +6 收起 理由
today0427 + 6 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-9-14 22:38 | 显示全部楼层
today0427 发表于 2016-9-14 22:08
什么商店名字我去瞅瞅?买东西还给找钱太好了!
这个我只会写直接在工作表中排好序再导入的那种,数据不多 ...

谢谢老师帮忙!
回复

使用道具 举报

发表于 2016-9-14 22:40 | 显示全部楼层
HP2009 发表于 2016-9-14 22:38
谢谢老师帮忙!

不客气的,我就是来学本领的,越学越觉得自己脑子不够用。看帖学习拓展思维是极好的![em31]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 03:35 , Processed in 0.241279 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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