发新话题
打印

关于ghunter帖子test程序的代码简要说明

关于ghunter帖子test程序的代码简要说明

第一步是录制宏,目的是得到唯一值(各列不重复值)

Option Explicit
Sub 高级筛选—姓名()
'
' 高级筛选—姓名 Macro
' 宏由 zhendeaini 录制,时间: 2014-10-21
'
'
    Sheet2.Select
    Columns("A:A").Select
    Sheet2.Columns("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns( _
        "K:K"), Unique:=True
End Sub

Option Explicit
Sub 高级筛选—班级()
'
' 高级筛选—班级 Macro
' 宏由 zhendeaini 录制,时间: 2014-10-21
'
'
    Columns("B:B").Select
    Sheet2.Columns("B:B").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns( _
        "L:L"), Unique:=True
End Sub

Option Explicit

Sub 高级筛选—学号()
'
' 高级筛选—学号 Macro
' 宏由 zhendeaini 录制,时间: 2014-10-21
'
'
    Columns("C:C").Select
    Sheet2.Columns("C:C").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns( _
        "M:M"), Unique:=True
End Sub


Option Explicit
Sub 高级筛选—入学年月()
'
' 高级筛选—入学年月 Macro
' 宏由 zhendeaini 录制,时间: 2014-10-21
'
'
    Columns("D:D").Select
    Sheet2.Columns("D:D").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns( _
        "N:N"), Unique:=True
End Sub

Option Explicit
Sub 高级筛选—性别()
'
' 高级筛选—喜好 Macro
' 宏由 zhendeaini 录制,时间: 2014-10-21
'
'
    Columns("E:E").Select
    Sheet2.Columns("E:E").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns( _
        "O:O"), Unique:=True
End Sub



Option Explicit
Sub 高级筛选—喜好()
'
' 高级筛选—喜好 Macro
' 宏由 zhendeaini 录制,时间: 2014-10-21
'
'
    Columns("F:F").Select
    Sheet2.Columns("F:F").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns( _
        "P:P"), Unique:=True
End Sub



Option Explicit
Sub 高级筛选—数据1()
'
' 高级筛选—数据1 Macro
' 宏由 zhendeaini 录制,时间: 2014-10-21
'
'
    Columns("G:G").Select
    Sheet2.Columns("G:G").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns( _
        "Q:Q"), Unique:=True
End Sub


Option Explicit
Sub 高级筛选—数据2()
'
' 高级筛选—数据2 Macro
' 宏由 zhendeaini 录制,时间: 2014-10-21
'
'
    Columns("H:H").Select
    Sheet2.Columns("H:H").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Columns( _
        "R:R"), Unique:=True
    Range("A1").Select
End Sub

第二步,设置下拉列表

由于引用了sheet2数据,所以先Ctrl+F3,定义名称,以便设置数据有效性时候引用。

比如说:设置名姓名=OFFSET(数据表!$K$2,,,COUNTA(数据表!$K:$K))
以此类推设置好

点击“数据”→ “有效性”→有效性条件选择“序列”输入=名称
以此类推设置好

第三步:书写代码
Alt+F11打开VB编辑器或者“工具”→“宏”→Visual Basic编辑器


1、先在左边的ThisWorkBook输入Workbook_Open触发事件
Private Sub Workbook_Open()
Sheet1.Activate
Dim sht As Worksheet
Set sht = ActiveSheet
Application.ScreenUpdating = False
Call 高级筛选—姓名
Call 高级筛选—班级
Call 高级筛选—学号
Call 高级筛选—入学年月
Call 高级筛选—性别
Call 高级筛选—喜好
Call 高级筛选—数据1
Call 高级筛选—数据2
sht.Select
Sheet1.[K1] = ""
Sheet1.[L1] = ""
Sheet1.[M1] = ""
Sheet1.[N1] = ""
Sheet1.[O1] = ""
Sheet1.[P1] = ""
Sheet1.[Q1] = ""
Sheet1.[R1] = ""
Application.ScreenUpdating = True
End Sub
意思是当你打开Excel的时候自动运行宏代码

2、在sheet2工作表(数据表)中输入Worksheet_Change触发事件,目的是当你在sheet2工作表更改数据的时候自动更新宏代码。简单地说做到实时更新。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ChgArea As Range
    Dim ChgCell As Range
    Dim ChgAdd As String
    Set ChgArea = Range("A2:H10000")
    For Each ChgCell In ChgArea
        ChgAdd = ChgCell.Address
        If Target.Address = ChgAdd Then
            'MsgBox "注意:内容有变化,请确认!", vbExclamation
        Dim sht As Worksheet
        Set sht = ActiveSheet
        Application.ScreenUpdating = False
          Call 高级筛选—姓名
          Call 高级筛选—班级
          Call 高级筛选—学号
          Call 高级筛选—入学年月
          Call 高级筛选—性别
          Call 高级筛选—喜好
          Call 高级筛选—数据1
          Call 高级筛选—数据2
        Application.ScreenUpdating = True
        End If
    Next
End Sub

3、在sheet1工作表(输出表)书写CommandButton1命令按钮代码,这是实现你所需的功能的关键代码。

Option Explicit
Private Sub CommandButton1_Click()
    'Dim CNN As New ADODB.Connection
    'Dim RST As New ADODB.Recordset
    Dim CNN, strsql$, aa, HH, BB, CC, DD, JJ, KK
    Set CNN = CreateObject("adodb.connection")
    'Dim strsql$
    Dim i&, t&
    Application.ScreenUpdating = False
    t = Sheet1.Range("A65536").End(xlUp).Row
    CNN.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
    If Sheet1.[K3] <> "" Then
        aa = " and 班级 like '%" & Sheet1.[K3] & "%'"
    End If
    If Sheet1.[K4] <> "" Then
        HH = " AND 学号 like '%" & Sheet1.[K4] & "%'"
    End If
    If Sheet1.[K5] <> "" Then
        BB = " AND 入学年月 like '%" & Sheet1.[K5] & "%'"
    End If
    If Sheet1.[K6] <> "" Then
        CC = " AND 性别 like '%" & Sheet1.[K6] & "%'"
    End If
    If Sheet1.[K7] <> "" Then
        DD = " AND 喜好 like '%" & Sheet1.[K7] & "%'"
    End If
    JJ = aa & BB & HH & CC & DD
    If Len(JJ) Then KK = "WHERE " & Mid(JJ, 6, 888)
    strsql = "select 姓名,班级,学号,入学年月,性别,喜好,数据1,数据2 FROM [数据表$A:H] " & KK
    Sheet1.Range("A2").CurrentRegion.ClearContents
    Sheet1.Range("A1:H1") = Sheet2.Range("A1:H1").Value
    Sheet1.[A2].CopyFromRecordset CNN.Execute(strsql)
    CNN.Close
    Set CNN = Nothing
    Application.ScreenUpdating = True
End Sub

至此,程序完毕!到目前为止,没有发现错误。
我熱愛生活,我愛我的家人。
http://150.20.8.135/bbs/viewthread.php?tid=210296
如果有谁来动画演示下就更好了,不胜感激![39]
我熱愛生活,我愛我的家人。
http://150.20.8.135/bbs/viewthread.php?tid=210296
牛。希望能把完成的test共享出来膜拜下。
引用:
原帖由 maximus 于 2014-10-23 08:51 发表
牛。希望能把完成的test共享出来膜拜下。
已经共享,按Alt+F11,打开VB编辑器。

附件

test.xls (79.5 KB)

2014-10-23 09:06, 下载次数: 28

我熱愛生活,我愛我的家人。
http://150.20.8.135/bbs/viewthread.php?tid=210296
神牛[104]
发新话题
查看积分策略说明

快速回复主题

选项

[完成后可按 Ctrl+Enter 发布]  预览帖子  恢复数据  清空内容