⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 -

📁 VB开发的ERP系统
💻
字号:
VERSION 5.00
Object = "{DD44C0E7-B2CF-11D1-8DD3-444553540000}#1.0#0"; "cell32.ocx"
Begin VB.Form frm_sort 
   BorderStyle     =   3  'Fixed Dialog
   Caption         =   "排序"
   ClientHeight    =   5040
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   6990
   Icon            =   "数据排序.frx":0000
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   5040
   ScaleWidth      =   6990
   ShowInTaskbar   =   0   'False
   StartUpPosition =   1  'CenterOwner
   Begin CELLLib.Cell Cell3 
      Height          =   1815
      Left            =   165
      TabIndex        =   9
      Top             =   3000
      Visible         =   0   'False
      Width           =   5115
      _Version        =   65536
      _ExtentX        =   9022
      _ExtentY        =   3201
      _StockProps     =   0
   End
   Begin VB.CommandButton Command4 
      Caption         =   "还原"
      Height          =   375
      Left            =   5670
      TabIndex        =   8
      Top             =   3570
      Width           =   1095
   End
   Begin VB.CommandButton Command3 
      Caption         =   "升序排列"
      Height          =   375
      Left            =   5670
      TabIndex        =   7
      Top             =   3090
      Width           =   1095
   End
   Begin CELLLib.Cell Cell2 
      Height          =   1995
      Left            =   240
      TabIndex        =   6
      Top             =   2040
      Visible         =   0   'False
      Width           =   4095
      _Version        =   65536
      _ExtentX        =   7223
      _ExtentY        =   3519
      _StockProps     =   0
   End
   Begin VB.Frame Frame1 
      Height          =   1215
      Left            =   5550
      TabIndex        =   3
      Top             =   120
      Width           =   1335
      Begin VB.OptionButton Option2 
         Caption         =   "按行排序"
         Height          =   375
         Left            =   120
         TabIndex        =   5
         Top             =   720
         Width           =   1095
      End
      Begin VB.OptionButton Option1 
         Caption         =   "按列排序"
         Height          =   375
         Left            =   120
         TabIndex        =   4
         Top             =   240
         Value           =   -1  'True
         Width           =   1095
      End
   End
   Begin VB.CommandButton Command2 
      Caption         =   "取消(&C)"
      Height          =   375
      Left            =   5670
      TabIndex        =   2
      Top             =   4530
      Width           =   1095
   End
   Begin VB.CommandButton Command1 
      Caption         =   "确定(&0)"
      Height          =   375
      Left            =   5670
      TabIndex        =   1
      Top             =   4050
      Width           =   1095
   End
   Begin CELLLib.Cell Cell1 
      Height          =   4815
      Left            =   90
      TabIndex        =   0
      Top             =   90
      Width           =   5355
      _Version        =   65536
      _ExtentX        =   9446
      _ExtentY        =   8493
      _StockProps     =   0
      PageLabelVisible=   0   'False
   End
End
Attribute VB_Name = "frm_sort"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'***********************************************
'*    模 块 名 称 :数据排序
'*    功 能 描 述 :
'*    程序员姓名  :奚俊峰
'*    最后修改人  :奚俊峰
'*    最后修改时间:2002/01/21
'***********************************************

Option Explicit
Private ml_col_begin, ml_row_begin, ml_col_end, ml_row_end
'true为升序,false为降序
Public mb_sort As Boolean 

Private Sub mf_sort(ByVal ls_type As String)  '排序
    Dim lavar_data(), ls_formula As String, lvar_data
    Dim ll_col As Long, ll_row As Long '分别代表当前排序选中的行(按行排序)、列(按列排序)
    Dim lvar_data1, ll_data2 As Long '中间变量,用于交换是存放值
    Dim i As Long, j As Long, lb_exchange As Boolean '判断是否交换
    lb_exchange = False
    
    '***************************************按列排序************************************
    If ls_type = "col" Then
        ReDim lavar_data(ml_row_end - ml_row_begin + 1, 2)
        ll_col = Cell1.DoGetCurrentCol
        '以下代码把选中的列的数据放入二维数组中
        '数组内容:1。 数据,2。数据所在行
        For i = 0 To ml_row_end - ml_row_begin
            Cell1.DoGetCellData ll_col, i, lvar_data
            lavar_data(i, 0) = lvar_data
            lavar_data(i, 1) = i
        Next
        '以下代码对数组中数据排序(冒泡法)
        j = 1
        Do While ((j <= ml_row_end - ml_row_begin) And lb_exchange = False)
            lb_exchange = True
            For i = 0 To ml_row_end - ml_row_begin - j
                Select Case mb_sort '升序
                Case True
                    If lavar_data(i, 0) > lavar_data(i + 1, 0) Then
                        lvar_data1 = lavar_data(i, 0)
                        ll_data2 = lavar_data(i, 1)
                        lavar_data(i, 0) = lavar_data(i + 1, 0)
                        lavar_data(i, 1) = lavar_data(i + 1, 1)
                        lavar_data(i + 1, 0) = lvar_data1
                        lavar_data(i + 1, 1) = ll_data2
                        lb_exchange = False
                    End If
                Case False '降序
                    If lavar_data(i, 0) < lavar_data(i + 1, 0) Then
                        lvar_data1 = lavar_data(i, 0)
                        ll_data2 = lavar_data(i, 1)
                        lavar_data(i, 0) = lavar_data(i + 1, 0)
                        lavar_data(i, 1) = lavar_data(i + 1, 1)
                        lavar_data(i + 1, 0) = lvar_data1
                        lavar_data(i + 1, 1) = ll_data2
                        lb_exchange = False
                    End If
                End Select
            Next i
        Loop
        
        '以下代码根据lvar_data(i,1)所代表的行号对cell1中的单元格进行排序,排序后的值
        '先存放在cell2中,排序结束后再用cell2中的值覆盖cell1中的值
        For i = 0 To ml_col_end - ml_col_begin
            For j = 0 To ml_row_end - ml_row_begin
                If Cell1.IsFormulaCell(i, lavar_data(j, 1)) Then
                    Cell1.DoGetFormula i, lavar_data(j, 1), ls_formula
                    Cell2.DoSetFormula i, j, ls_formula
                Else
                    Cell1.DoGetCellData i, lavar_data(j, 1), lvar_data
                    Cell2.DoSetCellData i, j, lvar_data
                End If
            Next j
        Next i
        For i = 0 To Cell1.Cols - 1
            For j = 0 To Cell1.Rows - 1
                If Cell2.IsChartCell(i, j) Then
                    Cell2.DoGetFormula i, j, ls_formula
                    Cell1.DoSetFormula i, j, ls_formula
                Else
                    Cell2.DoGetCellData i, j, lvar_data
                    Cell1.DoSetCellData i, j, lvar_data
                End If
            Next j
        Next i
        Cell1.DoRedrawAll
        Cell1.DoCalculateAll
        Exit Sub
    End If
    
    '*************************按行排序*************************************
    If ls_type = "row" Then
        ReDim lavar_data(ml_col_end - ml_col_begin + 1, 2)
        ll_row = Cell1.DoGetCurrentRow
        '以下代码把选中的行的数据放入二维数组中
        '数组内容:1。 数据,2。数据所在列
        For i = 0 To ml_col_end - ml_col_begin
            Cell1.DoGetCellData i, ll_row, lvar_data
            lavar_data(i, 0) = lvar_data
            lavar_data(i, 1) = i
        Next
        '以下代码对数组中数据排序(冒泡法)
        j = 1
        Do While ((j <= ml_col_end - ml_col_begin) And lb_exchange = False)
            lb_exchange = True
            For i = 0 To ml_col_end - ml_col_begin - j
                Select Case mb_sort '升序
                Case True
                    If lavar_data(i, 0) > lavar_data(i + 1, 0) Then
                        lvar_data1 = lavar_data(i, 0)
                        ll_data2 = lavar_data(i, 1)
                        lavar_data(i, 0) = lavar_data(i + 1, 0)
                        lavar_data(i, 1) = lavar_data(i + 1, 1)
                        lavar_data(i + 1, 0) = lvar_data1
                        lavar_data(i + 1, 1) = ll_data2
                        lb_exchange = False
                    End If
                Case False '降序
                    If lavar_data(i, 0) < lavar_data(i + 1, 0) Then
                        lvar_data1 = lavar_data(i, 0)
                        ll_data2 = lavar_data(i, 1)
                        lavar_data(i, 0) = lavar_data(i + 1, 0)
                        lavar_data(i, 1) = lavar_data(i + 1, 1)
                        lavar_data(i + 1, 0) = lvar_data1
                        lavar_data(i + 1, 1) = ll_data2
                        lb_exchange = False
                    End If
                End Select
            Next i
        Loop
        
        '以下代码根据lvar_data(i,1)所代表的列号对cell1中的单元格进行排序,排序后的值
        '先存放在cell2中,排序结束后再用cell2中的值覆盖cell1中的值
        For i = 0 To ml_row_end - ml_row_begin
            For j = 0 To ml_col_end - ml_col_begin
                If Cell1.IsFormulaCell(lavar_data(j, 1), i) Then
                    Cell1.DoGetFormula lavar_data(j, 1), i, ls_formula
                    Cell2.DoSetFormula j, i, ls_formula
                Else
                    Cell1.DoGetCellData lavar_data(j, 1), i, lvar_data
                    Cell2.DoSetCellData j, i, lvar_data
                End If
            Next j
        Next i
        For i = 0 To Cell1.Cols - 1
            For j = 0 To Cell1.Rows - 1
                If Cell2.IsChartCell(i, j) Then
                    Cell2.DoGetFormula i, j, ls_formula
                    Cell1.DoSetFormula i, j, ls_formula
                Else
                    Cell2.DoGetCellData i, j, lvar_data
                    Cell1.DoSetCellData i, j, lvar_data
                End If
            Next j
        Next i
        Cell1.DoRedrawAll
        Cell1.DoCalculateAll
    End If
End Sub


Private Sub Cell1_Click()
    With Cell1
        .DoClearSelection
        If Option1.Value = True Then
            .DoSelectRange .DoGetCurrentCol, 0, .DoGetCurrentCol, .Rows - 1
        Else
            .DoSelectRange 0, .DoGetCurrentRow, .Cols - 1, .DoGetCurrentRow
        End If
        .DoRedrawAll
    End With
End Sub

Private Sub Command1_Click()
    Dim i As Long, j As Long, ls_formula As String, lvar_data
    With MDI_frame.ActiveForm.Cell1
        For i = 0 To Cell1.Cols - 1
            For j = 0 To Cell1.Rows - 1
                If Cell1.IsFormulaCell(i, j) Then
                    Cell1.DoGetFormula i, j, ls_formula
                    .DoSetFormula i + ml_col_begin, j + ml_row_begin, ls_formula
                Else
                    Cell1.DoGetCellData i, j, lvar_data
                    .DoSetCellData i + ml_col_begin, j + ml_row_begin, lvar_data
                End If
            Next j
        Next i
    End With
    Unload Me
End Sub

Private Sub command2_Click()
    Unload Me
End Sub


Private Sub Command3_Click()
    If Option1.Value = True Then
        mf_sort "col"
        Exit Sub
    End If
    If Option2.Value = True Then
        mf_sort "row"
        Exit Sub
    End If
End Sub

Private Sub Command4_Click()
    Dim i As Long, j As Long
    Dim ls_formula As String, lvar_data
    For i = 0 To Cell1.Cols - 1
        For j = 0 To Cell1.Rows - 1
            If Cell3.IsFormulaCell(i, j) Then
                Cell3.DoGetFormula i, j, ls_formula
                Cell1.DoSetFormula i, j, ls_formula
                
            Else
                Cell3.DoGetCellData i, j, lvar_data
                Cell1.DoSetCellData i, j, lvar_data
                
            End If
        Next j
    Next i
    Cell1.DoRedrawAll
End Sub

Private Sub Form_Load()
    Dim i As Long, j As Long, lvar_data, ls_formula As String
    If Me.mb_sort = True Then
        Me.Caption = "升序排列"
        Me.Command3.Caption = "升序排列"
    Else
        Me.Caption = "降序排列"
        Me.Command3.Caption = "降序排列"
    End If
    With MDI_frame.ActiveForm.Cell1
        .DoGetSelectRange ml_col_begin, ml_row_begin, ml_col_end, ml_row_end
        Cell1.Cols = ml_col_end - ml_col_begin + 1
        Cell1.Rows = ml_row_end - ml_row_begin + 1
        Cell2.Cols = ml_col_end - ml_col_begin + 1
        Cell2.Rows = ml_row_end - ml_row_begin + 1
        Cell3.Cols = ml_col_end - ml_col_begin + 1
        Cell3.Rows = ml_row_end - ml_row_begin + 1
        
        '以下代码将需要排序的单元格数据填入cell1,cell3
        'cell3用于恢复原样
        For i = 0 To ml_col_end - ml_col_begin
            For j = 0 To ml_row_end - ml_row_begin
                If .IsFormulaCell(i + ml_col_begin, j + ml_row_begin) Then
                    .DoGetFormula i + ml_col_begin, j + ml_row_begin, ls_formula
                    Cell1.DoSetFormula i, j, ls_formula
                    Cell3.DoSetFormula i, j, ls_formula
                    
                Else
                    .DoGetCellData i + ml_col_begin, j + ml_row_begin, lvar_data
                    Cell1.DoSetCellData i, j, lvar_data
                    Cell3.DoSetCellData i, j, lvar_data
                    
                End If
            Next j
        Next i
        
        Cell1.DoCalculateAll
        Cell1.DoRedrawAll
        Cell1.DoSelectRange 0, 0, 0, Cell1.Rows
    End With
End Sub

Private Sub Option1_Click()
    With Cell1
        .DoClearSelection
        .DoSelectRange .DoGetCurrentCol, 0, .DoGetCurrentCol, .Rows
        .DoRedrawAll
    End With
End Sub


Private Sub Option2_Click()
    With Cell1
        .DoClearSelection
        .DoSelectRange 0, .DoGetCurrentRow, .Cols, .DoGetCurrentRow
        .DoRedrawAll
    End With
End Sub


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -