在VBA中,我为了使一个非空值Textbox控件自动获得焦点,写了一个过程,主体代码如下,
其中有行代码写错了,结果花了我4个小时才找到凭空多出来一个字符的原因,你说冤不冤。
有心人请试试,望能给个理由......
    With TextBox1
        .PasswordChar = "*"
        .Text = "abcd"   '此处实际是从其他函数获得该值。
        Debug.Print "Txt1= " & .Text
        If Len(.Text) > 0 Then  '若TextBox1非空,自动获得焦点。
            .SetFocus
           .SelText = Len(.Text)
        End If
        Debug.Print "Txt2= " & .Text    
       '...此后面还有其他其他函数使用该.Text值    
    End With

解决方案 »

  1.   

    你在什么VBA里用的?我在ACCESS VBA里试你的代码,都没PasswordChar这个属性
      

  2.   

    另外,除非控件获得焦点。.text都不能被赋值的。运行时出错。怀疑你是在excel里用的userform。
      

  3.   

    那我就不试了,正打算从VBA撤退。
      

  4.   

    楼主写代码时粗心了一丁点儿:
    With TextBox1
        .PasswordChar = "*"
        .Text = "abcd"   '此处实际是从其他函数获得该值。 
        Debug.Print "Txt1= " & .Text
        If Len(.Text) > 0 Then  '若TextBox1非空,自动获得焦点。 
            .SetFocus
            '.SelText = Len(.Text)
            .SelLength = Len(.Text) '应该是这样写 
        End If
        Debug.Print "Txt2= " & .Text
        '...此后面还有其他其他函数使用该.Text值
    End With很容易发现的错误~~~~~~
      

  5.   


    .SelText = Len(.Text).SelStart = 0
    .SelLength = Len(.Text)
      

  6.   

        With TextBox1
            .PasswordChar = "*"
            .Text = "abcd"   '此处实际是从其他函数获得该值。
            Debug.Print "Txt1= " & .Text
            If Len(.Text) > 0 Then  '若TextBox1非空,自动获得焦点。
                .SetFocus
               .SelText = Len(.Text)  '这个是错误的
            End If
            Debug.Print "Txt2= " & .Text    
           '...此后面还有其他其他函数使用该.Text值    
        End With
      

  7.   

    我不明白的是为什么.SelText的新值会返回到.Text去?MSDN:“.SelText 的设置为新值,会将 SelLength 设置为 0 并用新字符串代替所选择的文本。”---但是我没有选中任何字符呀,难道.SelText默认是选中空字符Chr(0),然后会用新值(此处为.Len(.Text))偷偷摸摸的就给换掉了?
      

  8.   


    在 Excel VBA 中,当 .Text 为空时,会强制设置 .SelLength = 0。任何情况下,当 TextBox控件 的 .SelLength = 0 时,执行:
    .SelText = [String]
    等效于在 .SelStart 位置插入 [String] 这段文本内容。
      

  9.   


    再次仔细看了看MSDN:
      “.SelText--返回或设置包含当前所选择文本的字符串;如果没有字符被选中,则为零长度字符串 ("") ”----
    好像我的猜测也有根据:零长度字符串("")不就是指Chr(0)吗?唉!还是经验不足和基础不扎实呀。
    当时根本就没想到这点,也没注意到文本框里的星号由“******”变为了“*******”,
    害得我在自定义的字符串加解密函数里折腾了老半天......
      

  10.   

    纠正楼主一个问题:
    VB/VBA 中,Chr(0) ≠ ""你可以 Debug.Print len(""), len(Chr(0))
    试一下。