问题是这样的,我在VBA中测试一个对象的一个属性,这个属性是可写的布尔型。例如设对象名为oObjToTest,要测的属性名是sPropName。我先通过CallByName oObjToTest, sPropName, VbLet, bValue这个语句改变sPropName的值。其中bValue是布尔类型,其值为Non-COM compliant True,就是赋给它一个非零值,而不是赋给它一个True。运行上面的语句后oObjToTest.sPropName=False。然后我又用这个赋值语句:oObjToTest.sPropName=bValue,运行后oObjToTest.sPropName=True。就是说两次赋值结果竟然是不同的!有哪位大虾知道原因吗?不排除这个对象本身有bug的可能性。

解决方案 »

  1.   

    这样说来是CallByName调用出问题了
    还是自己查查自己的代码吧,CallByName oObjToTest, "sPropName", VbLet, bValue
      

  2.   

    感觉那边人气不如这边,所以在这边又开一贴。Public Sub Sub1(oObjToTest As Object, sPropName As String, Optional sObjNameToOutput As String)
        
        Dim bBadVal As Boolean
        bBadVal = 5
        
        Sub2 oObjToTest, sPropName, bBadVal, "Set to Non-COM compliant True from state True"End SubPrivate Sub Sub2(oObjToTest As Object, sPropName As String, bValue As Boolean, sResultNameToOutput As String)
        ' Assign the new value
        CallByName oObjToTest, sPropName, VbLet, bValue
        oObjToTest.sPropName=bValue'这句话没其他用,就是比较两个方法的结果。在watch window里 面观察结果
    End Sub这些代码应该可以说明问题了
    如果不是CallByName的问题,我想只能是这个oObjToTest对象本身有问题了。
      

  3.   

    楼上,sPropName就是一个字符串变量。我这里写的oObjToTest.sPropName可能让你误解了。我这里这样写只是让大家好理解。 我程序中是oObjToTest.Suppressed=bValue. 实际上sPropName="Suppressed"。所以程序没问题的。
      

  4.   

    你这代码我复制过来,用TextBox控件和Enabled作参数没问题的。
    建议你用TextBox和Enabled试一下看看吧