分享

来自【Excel完美论坛】

 周游四方48 2016-06-17
正在加载...
头像

佛山小老鼠

昨天 08:57

楼主

第57节类模块基础【2016年6月16日Vba编程高级班上课笔记】

第57节类模块基础【2016年6月16日Vba编程高级班上课笔记】


课件
听课学员出勤截图


讲课内容
Option Explicit
'类模块
'插入和删除类模块
'类模块有三步曲
'第一步曲:创建类模块
'第二步曲:类的实例化,类模块本身不能用
'要实例化才能用,怎样实例化,定义一下就可以了
'第三步曲:归类
'Sub TestA()
'    Dim 橙子 As New 水果 '我们引用外部对象,前期绑定也是这样
'    橙子.
'End Sub
'类最大的一个特点,就是共享,团队合作
Sub TestB()
    Dim 李子 As New 水果
    李子.去重 = Selection
End Sub
Sub TestC()
    Dim 苹果 As New 水果
    苹果.去重 = Selection
End Sub
Sub TestD()
    Dim 香蕉 As New 水果, arr1, arr2(), x
    arr1 = Range('A1:A9')
    ReDim arr2(1 To UBound(arr1), 1 To 1)
    For x = 2 To UBound(arr1)
  香蕉.算 = arr1(x, 1)
  arr2(x - 1, 1) = 香蕉.算
    Next x
    [b2].Resize(UBound(arr1), 1) = arr2
End Sub
Option Explicit
Dim Cj 'Public Cj'同有必要用public,因为外面没有用
''通过模块级变量Cj让let和get产生联系
''Property Let 颜色(x%) '可写属性'Let后面括号一定要有参数
''
''End Property
''Property Get 形状() 'get后面括号一定可无可有参数
''    '可读的属性
''End Property
'''在类模块里叫做属性过程名称
'''在普通模块里叫做对象的属性
''Sub 吃() '吃是方法
''
''End Sub
''Function 称重量() '称重量是函数
''
''End Function
'Property Let 去重(Rg As Range) 'Rg是从普通模块里传递过来的
''是指等号后面部分
'    Dim Dic, arr1, ar
'    arr1 = Rg '因为字典优先装入对象,所以要到一下,先装数组
'    Set Dic = CreateObject('Scripting.Dictionary')
'    For Each ar In arr1
'  If ar <> '' Then
'    Dic(ar) = ''
'  End If
'    Next ar
'    Rg.Clear
'    If UBound(arr1, 1) = 1 Then
'  Rg(1).Resize(1, Dic.Count) = Dic.keys
'    Else
'  Rg(1).Resize(Dic.Count, 1) = Application.Transpose(Dic.keys)
'    End If
'End Property
'Property Let 算(x As Variant)
'    If x < 60 Then
'  Cj = '不及格'
'    ElseIf x < 70 Then
'  Cj = '及格'
'  ElseIf x < 80 Then
'  Cj = '良好'
'    Else
'  Cj = '优秀'
'    End If
'End Property
'Property Get 算()
'    算 = Cj
'End Property
''当我们学会类模块之后,let用sub
''get我们就用function代替


立即关注
9

全部回复

只看楼主 倒序排列

头像 李斯特 2楼

Option Explicit
'Sub test()
'    Dim my As New 我的代码
'
'End Sub
Sub testb()
    Dim 李子 As New 水果
   李子.去重 = Selection
End Sub
Sub tsetd()
    Dim 香蕉 As New 水果
    Dim arr1, arr2(), x
    arr1 = Range('a1:a9')
    ReDim arr2(1 To UBound(arr1), 1 To 1)
    For x = 2 To UBound(arr1)
  香蕉.算 = arr1(x, 1)
  arr2(x - 1, 1) = 香蕉.算
    Next x
    [b2].Resize(UBound(arr1), 1) = arr2
End Sub
Property Let 去重(Rg As Range) 'Rg是从普通模块里传递过来的
'是指等号后面部分
    Dim Dic, arr1, ar
    arr1 = Rg '因为字典优先装入对象,所以要到一下,先装数组
    Set Dic = CreateObject('Scripting.Dictionary')
    For Each ar In arr1
  Dic(ar) = ''
    Next ar
    Rg.Clear
    Rg(1).Resize(Dic.Count, 1) = Application.Transpose(Dic.keys)
End Property
Property Let 算(x As Variant)
    If x < 60 Then
  cj = '不及格'
    ElseIf x < 70 Then
  cj = '及格'
    ElseIf x < 80 Then
  cj = '良好'
    ElseIf x < 90 Then
  cj = '优秀'
    End If
End Property
Property Get 算()
    算 = cj
End Property

昨天 21:56

头像 qingqingcaoj 3楼

Option Explicit
'类模块
'插入和删除类模块
'类模块有三步曲
'第一步曲:创建类模块
'第二步曲:类的实例化,类模块本身不能用
'要实例化才能用,怎样实例化,定义一下就可以了
'第三步曲:归类
'Sub TestA()
'    Dim 橙子 As New 水果 '我们引用外部对象,前期绑定也是这样
'    橙子.
'End Sub
'类最大的一个特点,就是共享,团队合作
Sub TestB()
    Dim 李子 As New 水果
    李子.去重 = Selection
End Sub
Sub TestC()
    Dim 苹果 As New 水果
    苹果.去重 = Selection
End Sub
Sub TestD()
    Dim 香蕉 As New 水果, arr1, arr2(), x
    arr1 = Range('A1:A9')
    ReDim arr2(1 To UBound(arr1), 1 To 1)
    For x = 2 To UBound(arr1)
  香蕉.算 = arr1(x, 1)
  arr2(x - 1, 1) = 香蕉.算
    Next x
    [b2].Resize(UBound(arr1), 1) = arr2
End Sub
Option Explicit
Dim Cj 'Public Cj'同有必要用public,因为外面没有用
''通过模块级变量Cj让let和get产生联系
''Property Let 颜色(x%) '可写属性'Let后面括号一定要有参数
''
''End Property
''Property Get 形状() 'get后面括号一定可无可有参数
''    '可读的属性
''End Property
'''在类模块里叫做属性过程名称
'''在普通模块里叫做对象的属性
''Sub 吃() '吃是方法
''
''End Sub
''Function 称重量() '称重量是函数
''
''End Function
'Property Let 去重(Rg As Range) 'Rg是从普通模块里传递过来的
''是指等号后面部分
'    Dim Dic, arr1, ar
'    arr1 = Rg '因为字典优先装入对象,所以要到一下,先装数组
'    Set Dic = CreateObject('Scripting.Dictionary')
'    For Each ar In arr1
'  If ar <> '' Then
'    Dic(ar) = ''
'  End If
'    Next ar
'    Rg.Clear
'    If UBound(arr1, 1) = 1 Then
'  Rg(1).Resize(1, Dic.Count) = Dic.keys
'    Else
'  Rg(1).Resize(Dic.Count, 1) = Application.Transpose(Dic.keys)
'    End If
'End Property
'Property Let 算(x As Variant)
'    If x < 60 Then
'  Cj = '不及格'
'    ElseIf x < 70 Then
'  Cj = '及格'
'  ElseIf x < 80 Then
'  Cj = '良好'
'    Else
'  Cj = '优秀'
'    End If
'End Property
'Property Get 算()
'    算 = Cj
'End Property
''当我们学会类模块之后,let用sub
''get我们就用function代替


Property Let 算(x As Variant)
    If x < 60 Then
  Cj = '不及格'
    ElseIf x < 70 Then
  Cj = '及格'
    ElseIf x < 80 Then
  Cj = '良好'
    Else
  Cj = '优秀'
    End If
End Property


Property Get 结果()
    结果 = Cj
End Property

昨天 22:04

头像 火烧云 4楼

Option Explicit
'类模块
'插入和删除类模块
'类模块有三步曲
'第一步曲:创建类模块
'第二步曲:类的实例化,类模块本身不能用
'要实例化才能用,怎样实例化,定义一下就可以了
'第三步曲:归类
'Sub TestA()
'    Dim 橙子 As New 水果 '我们引用外部对象,前期绑定也是这样
'    橙子.
'End Sub
'类最大的一个特点,就是共享,团队合作
Sub TestB()
    Dim 李子 As New 水果
    李子.去重 = Selection
End Sub
Sub TestC()
    Dim 苹果 As New 水果
    苹果.去重 = Selection
End Sub
Sub TestD()
    Dim 香蕉 As New 水果, arr1, arr2(), x
    arr1 = Range('A1:A9')
    ReDim arr2(1 To UBound(arr1), 1 To 1)
    For x = 2 To UBound(arr1)
  香蕉.算 = arr1(x, 1)
  arr2(x - 1, 1) = 香蕉.算
    Next x
    [b2].Resize(UBound(arr1), 1) = arr2
End Sub
Option Explicit
Dim Cj 'Public Cj'同有必要用public,因为外面没有用
''通过模块级变量Cj让let和get产生联系
''Property Let 颜色(x%) '可写属性'Let后面括号一定要有参数
''
''End Property
''Property Get 形状() 'get后面括号一定可无可有参数
''    '可读的属性
''End Property
'''在类模块里叫做属性过程名称
'''在普通模块里叫做对象的属性
''Sub 吃() '吃是方法
''
''End Sub
''Function 称重量() '称重量是函数
''
''End Function
'Property Let 去重(Rg As Range) 'Rg是从普通模块里传递过来的
''是指等号后面部分
'Rg As Range表示你选择的区域
'    Dim Dic, arr1, ar
'    arr1 = Rg '因为字典优先装入对象,所以要到一下,先装数组
'    Set Dic = CreateObject('Scripting.Dictionary')
'    For Each ar In arr1
'  If ar <> '' Then
'    Dic(ar) = ''
'  End If
'    Next ar
'    Rg.Clear
'    If UBound(arr1, 1) = 1 Then
'  Rg(1).Resize(1, Dic.Count) = Dic.keys
'Rg (1)表示左上角第一个单元格
'    Else
'  Rg(1).Resize(Dic.Count, 1) = Application.Transpose(Dic.keys)
'    End If
'End Property
'Property Let 算(x As Variant)
'    If x < 60 Then
'  Cj = '不及格'
'    ElseIf x < 70 Then
'  Cj = '及格'
'  ElseIf x < 80 Then
'  Cj = '良好'
'    Else
'  Cj = '优秀'
'    End If
'End Property
'Property Get 算()
'    算 = Cj
'End Property
''当我们学会类模块之后,let用sub
''get我们就用function代替


Property Let 算(x As Variant)
    If x < 60 Then
  Cj = '不及格'
    ElseIf x < 70 Then
  Cj = '及格'
    ElseIf x < 80 Then
  Cj = '良好'
    Else
  Cj = '优秀'
    End If
End Property


Property Get 结果()
    结果 = Cj
End Property

昨天 22:06

头像 家庭主簿 5楼

'类模块
'插入和删除类模块
'类模块有三步曲
'第一步曲:创建类模块
'第二步曲:类的实例化,类模块本身不能用
'要实例化才能用,怎样实例化,定义一下就可以了
'第三步曲:归类
'Sub TestA()
'    Dim 橙子 As New 水果 '我们引用外部对象,前期绑定也是这样
'    橙子.
'End Sub
'类最大的一个特点,就是共享,团队合作
Sub TestB()
    Dim 李子 As New 水果
    李子.去重 = Selection
End Sub
Sub TestC()
    Dim 苹果 As New 水果
    苹果.去重 = Selection
End Sub
Sub TestD()
    Dim 香蕉 As New 水果, arr1, arr2(), x
    arr1 = Range('A1:A9')
    ReDim arr2(1 To UBound(arr1), 1 To 1)
    For x = 2 To UBound(arr1)
  香蕉.算 = arr1(x, 1)
  arr2(x - 1, 1) = 香蕉.算
    Next x
    [b2].Resize(UBound(arr1), 1) = arr2
End Sub
Option Explicit
Dim Cj 'Public Cj'同有必要用public,因为外面没有用
''通过模块级变量Cj让let和get产生联系
''Property Let 颜色(x%) '可写属性'Let后面括号一定要有参数
''
''End Property
''Property Get 形状() 'get后面括号一定可无可有参数
''    '可读的属性
''End Property
'''在类模块里叫做属性过程名称
'''在普通模块里叫做对象的属性
''Sub 吃() '吃是方法
''
''End Sub
''Function 称重量() '称重量是函数
''
''End Function
'Property Let 去重(Rg As Range) 'Rg是从普通模块里传递过来的
''是指等号后面部分
'    Dim Dic, arr1, ar
'    arr1 = Rg '因为字典优先装入对象,所以要到一下,先装数组
'    Set Dic = CreateObject('Scripting.Dictionary')
'    For Each ar In arr1
'  If ar <> '' Then
'    Dic(ar) = ''
'  End If
'    Next ar
'    Rg.Clear
'    If UBound(arr1, 1) = 1 Then
'  Rg(1).Resize(1, Dic.Count) = Dic.keys
'    Else
'  Rg(1).Resize(Dic.Count, 1) = Application.Transpose(Dic.keys)
'    End If
'End Property
'Property Let 算(x As Variant)
'    If x < 60 Then
'  Cj = '不及格'
'    ElseIf x < 70 Then
'  Cj = '及格'
'  ElseIf x < 80 Then
'  Cj = '良好'
'    Else
'  Cj = '优秀'
'    End If
'End Property
'Property Get 算()
'    算 = Cj
'End Property
''当我们学会类模块之后,let用sub
''get我们就用function代替


Property Let 算(x As Variant)
    If x < 60 Then
  Cj = '不及格'
    ElseIf x < 70 Then
  Cj = '及格'
    ElseIf x < 80 Then
  Cj = '良好'
    Else
  Cj = '优秀'
    End If
End Property


Property Get 结果()
    结果 = Cj

昨天 22:08

正在加载...

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多