-
上传用户:zhpu1995
上传日期:2013-09-06
资源大小:61151k
文件大小:14k
源码类别:

企业管理

开发平台:

Visual Basic

  1. VERSION 5.00
  2. Object = "{DD44C0E7-B2CF-11D1-8DD3-444553540000}#1.0#0"; "cell32.ocx"
  3. Begin VB.Form frm_sort 
  4.    BorderStyle     =   3  'Fixed Dialog
  5.    Caption         =   "排序"
  6.    ClientHeight    =   5040
  7.    ClientLeft      =   45
  8.    ClientTop       =   330
  9.    ClientWidth     =   6990
  10.    Icon            =   "数据排序.frx":0000
  11.    LinkTopic       =   "Form1"
  12.    MaxButton       =   0   'False
  13.    MinButton       =   0   'False
  14.    ScaleHeight     =   5040
  15.    ScaleWidth      =   6990
  16.    ShowInTaskbar   =   0   'False
  17.    StartUpPosition =   1  'CenterOwner
  18.    Begin CELLLib.Cell Cell3 
  19.       Height          =   1815
  20.       Left            =   165
  21.       TabIndex        =   9
  22.       Top             =   3000
  23.       Visible         =   0   'False
  24.       Width           =   5115
  25.       _Version        =   65536
  26.       _ExtentX        =   9022
  27.       _ExtentY        =   3201
  28.       _StockProps     =   0
  29.    End
  30.    Begin VB.CommandButton Command4 
  31.       Caption         =   "还原"
  32.       Height          =   375
  33.       Left            =   5670
  34.       TabIndex        =   8
  35.       Top             =   3570
  36.       Width           =   1095
  37.    End
  38.    Begin VB.CommandButton Command3 
  39.       Caption         =   "升序排列"
  40.       Height          =   375
  41.       Left            =   5670
  42.       TabIndex        =   7
  43.       Top             =   3090
  44.       Width           =   1095
  45.    End
  46.    Begin CELLLib.Cell Cell2 
  47.       Height          =   1995
  48.       Left            =   240
  49.       TabIndex        =   6
  50.       Top             =   2040
  51.       Visible         =   0   'False
  52.       Width           =   4095
  53.       _Version        =   65536
  54.       _ExtentX        =   7223
  55.       _ExtentY        =   3519
  56.       _StockProps     =   0
  57.    End
  58.    Begin VB.Frame Frame1 
  59.       Height          =   1215
  60.       Left            =   5550
  61.       TabIndex        =   3
  62.       Top             =   120
  63.       Width           =   1335
  64.       Begin VB.OptionButton Option2 
  65.          Caption         =   "按行排序"
  66.          Height          =   375
  67.          Left            =   120
  68.          TabIndex        =   5
  69.          Top             =   720
  70.          Width           =   1095
  71.       End
  72.       Begin VB.OptionButton Option1 
  73.          Caption         =   "按列排序"
  74.          Height          =   375
  75.          Left            =   120
  76.          TabIndex        =   4
  77.          Top             =   240
  78.          Value           =   -1  'True
  79.          Width           =   1095
  80.       End
  81.    End
  82.    Begin VB.CommandButton Command2 
  83.       Caption         =   "取消(&C)"
  84.       Height          =   375
  85.       Left            =   5670
  86.       TabIndex        =   2
  87.       Top             =   4530
  88.       Width           =   1095
  89.    End
  90.    Begin VB.CommandButton Command1 
  91.       Caption         =   "确定(&0)"
  92.       Height          =   375
  93.       Left            =   5670
  94.       TabIndex        =   1
  95.       Top             =   4050
  96.       Width           =   1095
  97.    End
  98.    Begin CELLLib.Cell Cell1 
  99.       Height          =   4815
  100.       Left            =   90
  101.       TabIndex        =   0
  102.       Top             =   90
  103.       Width           =   5355
  104.       _Version        =   65536
  105.       _ExtentX        =   9446
  106.       _ExtentY        =   8493
  107.       _StockProps     =   0
  108.       PageLabelVisible=   0   'False
  109.    End
  110. End
  111. Attribute VB_Name = "frm_sort"
  112. Attribute VB_GlobalNameSpace = False
  113. Attribute VB_Creatable = False
  114. Attribute VB_PredeclaredId = True
  115. Attribute VB_Exposed = False
  116. '***********************************************
  117. '*    模 块 名 称 :数据排序
  118. '*    功 能 描 述 :
  119. '*    程序员姓名  :奚俊峰
  120. '*    最后修改人  :奚俊峰
  121. '*    最后修改时间:2002/01/21
  122. '***********************************************
  123. Option Explicit
  124. Private ml_col_begin, ml_row_begin, ml_col_end, ml_row_end
  125. 'true为升序,false为降序
  126. Public mb_sort As Boolean 
  127. Private Sub mf_sort(ByVal ls_type As String)  '排序
  128.     Dim lavar_data(), ls_formula As String, lvar_data
  129.     Dim ll_col As Long, ll_row As Long '分别代表当前排序选中的行(按行排序)、列(按列排序)
  130.     Dim lvar_data1, ll_data2 As Long '中间变量,用于交换是存放值
  131.     Dim i As Long, j As Long, lb_exchange As Boolean '判断是否交换
  132.     lb_exchange = False
  133.     
  134.     '***************************************按列排序************************************
  135.     If ls_type = "col" Then
  136.         ReDim lavar_data(ml_row_end - ml_row_begin + 1, 2)
  137.         ll_col = Cell1.DoGetCurrentCol
  138.         '以下代码把选中的列的数据放入二维数组中
  139.         '数组内容:1。 数据,2。数据所在行
  140.         For i = 0 To ml_row_end - ml_row_begin
  141.             Cell1.DoGetCellData ll_col, i, lvar_data
  142.             lavar_data(i, 0) = lvar_data
  143.             lavar_data(i, 1) = i
  144.         Next
  145.         '以下代码对数组中数据排序(冒泡法)
  146.         j = 1
  147.         Do While ((j <= ml_row_end - ml_row_begin) And lb_exchange = False)
  148.             lb_exchange = True
  149.             For i = 0 To ml_row_end - ml_row_begin - j
  150.                 Select Case mb_sort '升序
  151.                 Case True
  152.                     If lavar_data(i, 0) > lavar_data(i + 1, 0) Then
  153.                         lvar_data1 = lavar_data(i, 0)
  154.                         ll_data2 = lavar_data(i, 1)
  155.                         lavar_data(i, 0) = lavar_data(i + 1, 0)
  156.                         lavar_data(i, 1) = lavar_data(i + 1, 1)
  157.                         lavar_data(i + 1, 0) = lvar_data1
  158.                         lavar_data(i + 1, 1) = ll_data2
  159.                         lb_exchange = False
  160.                     End If
  161.                 Case False '降序
  162.                     If lavar_data(i, 0) < lavar_data(i + 1, 0) Then
  163.                         lvar_data1 = lavar_data(i, 0)
  164.                         ll_data2 = lavar_data(i, 1)
  165.                         lavar_data(i, 0) = lavar_data(i + 1, 0)
  166.                         lavar_data(i, 1) = lavar_data(i + 1, 1)
  167.                         lavar_data(i + 1, 0) = lvar_data1
  168.                         lavar_data(i + 1, 1) = ll_data2
  169.                         lb_exchange = False
  170.                     End If
  171.                 End Select
  172.             Next i
  173.         Loop
  174.         
  175.         '以下代码根据lvar_data(i,1)所代表的行号对cell1中的单元格进行排序,排序后的值
  176.         '先存放在cell2中,排序结束后再用cell2中的值覆盖cell1中的值
  177.         For i = 0 To ml_col_end - ml_col_begin
  178.             For j = 0 To ml_row_end - ml_row_begin
  179.                 If Cell1.IsFormulaCell(i, lavar_data(j, 1)) Then
  180.                     Cell1.DoGetFormula i, lavar_data(j, 1), ls_formula
  181.                     Cell2.DoSetFormula i, j, ls_formula
  182.                 Else
  183.                     Cell1.DoGetCellData i, lavar_data(j, 1), lvar_data
  184.                     Cell2.DoSetCellData i, j, lvar_data
  185.                 End If
  186.             Next j
  187.         Next i
  188.         For i = 0 To Cell1.Cols - 1
  189.             For j = 0 To Cell1.Rows - 1
  190.                 If Cell2.IsChartCell(i, j) Then
  191.                     Cell2.DoGetFormula i, j, ls_formula
  192.                     Cell1.DoSetFormula i, j, ls_formula
  193.                 Else
  194.                     Cell2.DoGetCellData i, j, lvar_data
  195.                     Cell1.DoSetCellData i, j, lvar_data
  196.                 End If
  197.             Next j
  198.         Next i
  199.         Cell1.DoRedrawAll
  200.         Cell1.DoCalculateAll
  201.         Exit Sub
  202.     End If
  203.     
  204.     '*************************按行排序*************************************
  205.     If ls_type = "row" Then
  206.         ReDim lavar_data(ml_col_end - ml_col_begin + 1, 2)
  207.         ll_row = Cell1.DoGetCurrentRow
  208.         '以下代码把选中的行的数据放入二维数组中
  209.         '数组内容:1。 数据,2。数据所在列
  210.         For i = 0 To ml_col_end - ml_col_begin
  211.             Cell1.DoGetCellData i, ll_row, lvar_data
  212.             lavar_data(i, 0) = lvar_data
  213.             lavar_data(i, 1) = i
  214.         Next
  215.         '以下代码对数组中数据排序(冒泡法)
  216.         j = 1
  217.         Do While ((j <= ml_col_end - ml_col_begin) And lb_exchange = False)
  218.             lb_exchange = True
  219.             For i = 0 To ml_col_end - ml_col_begin - j
  220.                 Select Case mb_sort '升序
  221.                 Case True
  222.                     If lavar_data(i, 0) > lavar_data(i + 1, 0) Then
  223.                         lvar_data1 = lavar_data(i, 0)
  224.                         ll_data2 = lavar_data(i, 1)
  225.                         lavar_data(i, 0) = lavar_data(i + 1, 0)
  226.                         lavar_data(i, 1) = lavar_data(i + 1, 1)
  227.                         lavar_data(i + 1, 0) = lvar_data1
  228.                         lavar_data(i + 1, 1) = ll_data2
  229.                         lb_exchange = False
  230.                     End If
  231.                 Case False '降序
  232.                     If lavar_data(i, 0) < lavar_data(i + 1, 0) Then
  233.                         lvar_data1 = lavar_data(i, 0)
  234.                         ll_data2 = lavar_data(i, 1)
  235.                         lavar_data(i, 0) = lavar_data(i + 1, 0)
  236.                         lavar_data(i, 1) = lavar_data(i + 1, 1)
  237.                         lavar_data(i + 1, 0) = lvar_data1
  238.                         lavar_data(i + 1, 1) = ll_data2
  239.                         lb_exchange = False
  240.                     End If
  241.                 End Select
  242.             Next i
  243.         Loop
  244.         
  245.         '以下代码根据lvar_data(i,1)所代表的列号对cell1中的单元格进行排序,排序后的值
  246.         '先存放在cell2中,排序结束后再用cell2中的值覆盖cell1中的值
  247.         For i = 0 To ml_row_end - ml_row_begin
  248.             For j = 0 To ml_col_end - ml_col_begin
  249.                 If Cell1.IsFormulaCell(lavar_data(j, 1), i) Then
  250.                     Cell1.DoGetFormula lavar_data(j, 1), i, ls_formula
  251.                     Cell2.DoSetFormula j, i, ls_formula
  252.                 Else
  253.                     Cell1.DoGetCellData lavar_data(j, 1), i, lvar_data
  254.                     Cell2.DoSetCellData j, i, lvar_data
  255.                 End If
  256.             Next j
  257.         Next i
  258.         For i = 0 To Cell1.Cols - 1
  259.             For j = 0 To Cell1.Rows - 1
  260.                 If Cell2.IsChartCell(i, j) Then
  261.                     Cell2.DoGetFormula i, j, ls_formula
  262.                     Cell1.DoSetFormula i, j, ls_formula
  263.                 Else
  264.                     Cell2.DoGetCellData i, j, lvar_data
  265.                     Cell1.DoSetCellData i, j, lvar_data
  266.                 End If
  267.             Next j
  268.         Next i
  269.         Cell1.DoRedrawAll
  270.         Cell1.DoCalculateAll
  271.     End If
  272. End Sub
  273. Private Sub Cell1_Click()
  274.     With Cell1
  275.         .DoClearSelection
  276.         If Option1.Value = True Then
  277.             .DoSelectRange .DoGetCurrentCol, 0, .DoGetCurrentCol, .Rows - 1
  278.         Else
  279.             .DoSelectRange 0, .DoGetCurrentRow, .Cols - 1, .DoGetCurrentRow
  280.         End If
  281.         .DoRedrawAll
  282.     End With
  283. End Sub
  284. Private Sub Command1_Click()
  285.     Dim i As Long, j As Long, ls_formula As String, lvar_data
  286.     With MDI_frame.ActiveForm.Cell1
  287.         For i = 0 To Cell1.Cols - 1
  288.             For j = 0 To Cell1.Rows - 1
  289.                 If Cell1.IsFormulaCell(i, j) Then
  290.                     Cell1.DoGetFormula i, j, ls_formula
  291.                     .DoSetFormula i + ml_col_begin, j + ml_row_begin, ls_formula
  292.                 Else
  293.                     Cell1.DoGetCellData i, j, lvar_data
  294.                     .DoSetCellData i + ml_col_begin, j + ml_row_begin, lvar_data
  295.                 End If
  296.             Next j
  297.         Next i
  298.     End With
  299.     Unload Me
  300. End Sub
  301. Private Sub command2_Click()
  302.     Unload Me
  303. End Sub
  304. Private Sub Command3_Click()
  305.     If Option1.Value = True Then
  306.         mf_sort "col"
  307.         Exit Sub
  308.     End If
  309.     If Option2.Value = True Then
  310.         mf_sort "row"
  311.         Exit Sub
  312.     End If
  313. End Sub
  314. Private Sub Command4_Click()
  315.     Dim i As Long, j As Long
  316.     Dim ls_formula As String, lvar_data
  317.     For i = 0 To Cell1.Cols - 1
  318.         For j = 0 To Cell1.Rows - 1
  319.             If Cell3.IsFormulaCell(i, j) Then
  320.                 Cell3.DoGetFormula i, j, ls_formula
  321.                 Cell1.DoSetFormula i, j, ls_formula
  322.                 
  323.             Else
  324.                 Cell3.DoGetCellData i, j, lvar_data
  325.                 Cell1.DoSetCellData i, j, lvar_data
  326.                 
  327.             End If
  328.         Next j
  329.     Next i
  330.     Cell1.DoRedrawAll
  331. End Sub
  332. Private Sub Form_Load()
  333.     Dim i As Long, j As Long, lvar_data, ls_formula As String
  334.     If Me.mb_sort = True Then
  335.         Me.Caption = "升序排列"
  336.         Me.Command3.Caption = "升序排列"
  337.     Else
  338.         Me.Caption = "降序排列"
  339.         Me.Command3.Caption = "降序排列"
  340.     End If
  341.     With MDI_frame.ActiveForm.Cell1
  342.         .DoGetSelectRange ml_col_begin, ml_row_begin, ml_col_end, ml_row_end
  343.         Cell1.Cols = ml_col_end - ml_col_begin + 1
  344.         Cell1.Rows = ml_row_end - ml_row_begin + 1
  345.         Cell2.Cols = ml_col_end - ml_col_begin + 1
  346.         Cell2.Rows = ml_row_end - ml_row_begin + 1
  347.         Cell3.Cols = ml_col_end - ml_col_begin + 1
  348.         Cell3.Rows = ml_row_end - ml_row_begin + 1
  349.         
  350.         '以下代码将需要排序的单元格数据填入cell1,cell3
  351.         'cell3用于恢复原样
  352.         For i = 0 To ml_col_end - ml_col_begin
  353.             For j = 0 To ml_row_end - ml_row_begin
  354.                 If .IsFormulaCell(i + ml_col_begin, j + ml_row_begin) Then
  355.                     .DoGetFormula i + ml_col_begin, j + ml_row_begin, ls_formula
  356.                     Cell1.DoSetFormula i, j, ls_formula
  357.                     Cell3.DoSetFormula i, j, ls_formula
  358.                     
  359.                 Else
  360.                     .DoGetCellData i + ml_col_begin, j + ml_row_begin, lvar_data
  361.                     Cell1.DoSetCellData i, j, lvar_data
  362.                     Cell3.DoSetCellData i, j, lvar_data
  363.                     
  364.                 End If
  365.             Next j
  366.         Next i
  367.         
  368.         Cell1.DoCalculateAll
  369.         Cell1.DoRedrawAll
  370.         Cell1.DoSelectRange 0, 0, 0, Cell1.Rows
  371.     End With
  372. End Sub
  373. Private Sub Option1_Click()
  374.     With Cell1
  375.         .DoClearSelection
  376.         .DoSelectRange .DoGetCurrentCol, 0, .DoGetCurrentCol, .Rows
  377.         .DoRedrawAll
  378.     End With
  379. End Sub
  380. Private Sub Option2_Click()
  381.     With Cell1
  382.         .DoClearSelection
  383.         .DoSelectRange 0, .DoGetCurrentRow, .Cols, .DoGetCurrentRow
  384.         .DoRedrawAll
  385.     End With
  386. End Sub