问题是这样的,我在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时,你的代码前面有些处理将这个bValue变为0
      

  2.   

    bValue的值一直不变。我就像最后这样把两句话放一前一后,而且也改变过两句话的顺续,结果仍然一样。另外,在VB6中这个问题不存在,两次运行后sPropName都是True。还有,如果给bValue赋值时用bValue=True or bValue=False,既给bValue赋予合法的布尔值,也没有这种问题。CallByName oObjToTest, sPropName, VbLet, bValue'result: sPropName=False
    oObjToTest.sPropName=bValue'result: sPropName=True
      

  3.   

    没发现你说的现象.Dim bvalue As Boolean
    Private Sub CommandButton1_Click()
    Sheet1.Range("a1").Characters.Insert "xxx"
    Sheet1.Range("a1").Characters.Font.Color = vbRed
    End SubPrivate Sub CommandButton2_Click()Dim f As Font
    Set f = Sheet1.Range("a1").Characters.Font
    bvalue = True
    CallByName f, "Bold", VbLet, bvalue
    MsgBox "Sheet1.Range(""a1"").Characters.Font.Bold=" & Sheet1.Range("a1").Characters.Font.Bold
    bvalue = False
    CallByName f, "Bold", VbLet, bvalue
    MsgBox "Sheet1.Range(""a1"").Characters.Font.Bold=" & Sheet1.Range("a1").Characters.Font.Bold
    End SubPrivate Sub CommandButton3_Click()bvalue = True
     Sheet1.Range("a1").Characters.Font.Bold = bvalue
    MsgBox "Sheet1.Range(""a1"").Characters.Font.Bold=" & Sheet1.Range("a1").Characters.Font.Bold
    bvalue = False
     Sheet1.Range("a1").Characters.Font.Bold = bvalue
    MsgBox "Sheet1.Range(""a1"").Characters.Font.Bold=" & Sheet1.Range("a1").Characters.Font.Bold
    End Sub