Private Function CreaterOpation(ByVal oper As String) As operation
    Select Case oper
        Case "+"
            Dim operation1 As New OperationAdd
            CreaterOpation = operation1
        Case "-"
            Dim operation2 As New OperationSub
            CreaterOpation = operation2
        Case "*"
            Dim operation3 As New OperationMul
            CreaterOpation = operation3
        Case "/"
            Dim operation4 As OperationDiv
            CreaterOpation = operation4
    End Select
End Function
CreaterOpation = operation1这一句是返回自定义数据类型但提示
对象变量或with块变未设置

解决方案 »

  1.   

    SET SET
    SET CreaterOpation = operation1 
      

  2.   

    SET CreaterOpation = operation1 
    如果这样会提示类型不匹配
      

  3.   

    所有的operation,add 应该是同类。 
    或Private Function CreaterOpation(ByVal oper As String) As object
      

  4.   

    OperationAdd、OperationSub 等都要实现 operation 接口。
      

  5.   

    我也发现这个问题了
    OperationAdd、OperationSub 怎样实现operation接口呢我作类模块写的operation代码
    '保持属性值的局部变量
    Private mvarNum1 As Double '局部复制
    Private mvarNum2 As Double '局部复制
    Public Function GetResult() As Double
    End FunctionPublic Property Let Num2(ByVal vData As Double)
    '向属性指派值时使用,位于赋值语句的左边。
    'Syntax: X.Num2 = 5
        mvarNum2 = vData
    End Property
    Public Property Get Num2() As Double
    '检索属性值时使用,位于赋值语句的右边。
    'Syntax: Debug.Print X.Num2
        Num2 = mvarNum2
    End PropertyPublic Property Let Num1(ByVal vData As Double)
    '向属性指派值时使用,位于赋值语句的左边。
    'Syntax: X.Num1 = 5
        mvarNum1 = vData
    End Property
    Public Property Get Num1() As Double
    '检索属性值时使用,位于赋值语句的右边。
    'Syntax: Debug.Print X.Num1
        Num1 = mvarNum1
    End Property
    用类模块写的operaionAdd
    Implements operation
    '保持属性值的局部变量
    Private mvarNum1 As Double '局部复制
    Private mvarNum2 As Double '局部复制
    Public Function GetResult() As Double
        Dim result As Double
        result = mvarNum1 + mvarNum2
        GetResult = result
    End FunctionPublic Property Let Num2(ByVal vData As Double)
    '向属性指派值时使用,位于赋值语句的左边。
    'Syntax: X.Num2 = 5
        mvarNum2 = vData
    End Property
    Public Property Get Num2() As Double
    '检索属性值时使用,位于赋值语句的右边。
    'Syntax: Debug.Print X.Num2
        Num2 = mvarNum2
    End PropertyPublic Property Let Num1(ByVal vData As Double)
    '向属性指派值时使用,位于赋值语句的左边。
    'Syntax: X.Num1 = 5
        mvarNum1 = vData
    End Property
    Public Property Get Num1() As Double
    '检索属性值时使用,位于赋值语句的右边。
    'Syntax: Debug.Print X.Num1
        Num1 = mvarNum1
    End Property
    但是提示说要类模块需要实现'GetResult'为接口的'operation'
      

  6.   

    在 Implements 关键字上 F1,看看 MSDN 帮助和示例。
      

  7.   

    Msdn里好像只有sub,是不是function不能实现
      

  8.   

    Implements operation
    '保持属性值的局部变量
    Private mvarNum1 As Double '局部复制
    Private mvarNum2 As Double '局部复制
    Public Function operation_GetResult() As Double
        Dim result As Double
        result = mvarNum1 + mvarNum2
        operation_GetResult = result
    End FunctionPublic Property Let operation_Num2(ByVal vData As Double)
    '向属性指派值时使用,位于赋值语句的左边。
    'Syntax: X.Num2 = 5
        mvarNum2 = vData
    End Property
    Public Property Get operation_Num2() As Double
    '检索属性值时使用,位于赋值语句的右边。
    'Syntax: Debug.Print X.Num2
        Num2 = mvarNum2
    End PropertyPublic Property Let operation_Num1(ByVal vData As Double)
    '向属性指派值时使用,位于赋值语句的左边。
    'Syntax: X.Num1 = 5
        mvarNum1 = vData
    End Property
    Public Property Get operation_Num1() As Double
    '检索属性值时使用,位于赋值语句的右边。
    'Syntax: Debug.Print X.Num1
        Num1 = mvarNum1
    End Property
      

  9.   

    但是现在又出过程声明与同名事件或过程的描述不匹配Public Function operation_GetResult() As Double