佛山小老鼠楼主第57节类模块基础【2016年6月16日Vba编程高级班上课笔记】
第57节类模块基础【2016年6月16日Vba编程高级班上课笔记】
9
课件 听课学员出勤截图 讲课内容 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代替
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
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
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
'类模块
'插入和删除类模块 '类模块有三步曲 '第一步曲:创建类模块 '第二步曲:类的实例化,类模块本身不能用 '要实例化才能用,怎样实例化,定义一下就可以了 '第三步曲:归类 '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 |
|