如何在Access窗体上获取一个简单的文本框来表现

时间:2015-05-21 19:43:12

标签: vba ms-access textbox access-vba

我有一个Access 2010表单,它应该像一个对话框,而不是用来显示任何记录集数据。关于它如下:

  • 一个名为source_file_txt的未绑定源文本框,用于保存电子表格文件名,
  • 一个名为browse_btn的浏览按钮,用于打开文件查找器对话框,效果很好,
  • 一个名为import_btn的导入按钮,用于启动导入功能,稍后将写入。

我尝试但未通过根据“源”文本框中是否存在文本来启用/禁用“导入”按钮。 这是我的VBA代码:

Private Sub Form_Load()
    Debug.Print vbCrLf & "Form_Load() " & Now()
    enable_import
End Sub

Private Sub source_file_txt_Change()
    Debug.Print vbCrLf & "source_file_txt_Change() " & Now()
    enable_import
End Sub

Private Sub source_file_txt_Dirty(Cancel As Integer)
    Debug.Print vbCrLf & "source_file_txt_Dirty() " & Now()
    enable_import
End Sub

Private Sub browse_btn_Click()
    Debug.Print vbCrLf & "browse_btn_Click() " & Now()
    source_file_txt = browsed_file()
    enable_import
End Sub

Private Sub enable_import()
    Debug.Print vbCrLf & "enable_import() " & Now()
    Debug.Print "source_file_txt:           " & source_file_txt
    Debug.Print "source_file_txt.Value:     " & source_file_txt.Value
    Debug.Print "source_file_txt.OldValue:  " & source_file_txt.OldValue

' Essentially, the above ONLY reflects the contents of the textbox
' when it has been changed by code -- it FAILS to reflect the contents of
' the textbox when it has been changed by the user!

    Debug.Print "(Len(Nz(source_file_txt, """")) > 0): " & (Len(Nz(source_file_txt, "")) > 0)
    Import_btn.Enabled = (Len(Nz(source_file_txt, "")) > 0)
    Debug.Print "Import_btn.Enabled:                   " & Import_btn.Enabled
End Sub

以下是立即窗口的成绩单,其中添加了大括号{花括号}内的注释:

{Initially, nothing in the box ... response is good.} 
Form_Load() 5/21/2015 11:41:50 AM

enable_import() 5/21/2015 11:41:50 AM
source_file_txt:                 { Nothing is printed here and }
source_file_txt.Value:           { that truly reflects the     }
source_file_txt.OldValue:        { content of the box. Good.   }
(Len(Nz(source_file_txt, "")) > 0): False
import_btn.Enabled:                 False

{User pasted text into the box ... response is bad!}
source_file_txt_Change() 5/21/2015 11:42:02 AM

enable_import() 5/21/2015 11:42:02 AM
source_file_txt:                 { Nothing is printed here and }
source_file_txt.Value:           { that FAILS to reflect the   }
source_file_txt.OldValue:        { content of the box. Bad!    }
(Len(Nz(source_file_txt, "")) > 0): False
import_btn.Enabled:                 False

browse_btn_Click() 5/21/2015 11:42:16 AM

{VBA assigned text, returned from user's file browse, into the box ... response is good.}
enable_import() 5/21/2015 11:42:21 AM
source_file_txt:           C:\Users\mf\Documents\Assignments.xlsx
source_file_txt.Value:     C:\Users\mf\Documents\Assignments.xlsx
source_file_txt.OldValue:  C:\Users\mf\Documents\Assignments.xlsx
(Len(Nz(source_file_txt, "")) > 0): True { Above is good. }
import_btn.Enabled:                 True

{User cut text from the box ... response is bad!}
source_file_txt_Change() 5/21/2015 11:43:33 AM

enable_import() 5/21/2015 11:43:33 AM
source_file_txt:           C:\Users\mf\Documents\Assignments.xlsx
source_file_txt.Value:     C:\Users\mf\Documents\Assignments.xlsx
source_file_txt.OldValue:  C:\Users\mf\Documents\Assignments.xlsx
(Len(Nz(source_file_txt, "")) > 0): True { Above is bad! }
import_btn.Enabled:                 True

bahavior是相同的,有或没有以Me.为前缀的对象名称。 我怎样才能获得理想的行为? 我不明白为什么source_file_txt.Value没有反映出真正存在的东西。 也许它与Access有关,试图将这个表单与数据库绑定 - 它在底部显示一个无意义的(记录:1个搜索)导航控件。

解决方案

当我应该使用source_file_txt.Value时,我正在使用source_file_txt.Text。 前者不会改变,直到它为时已晚,不知怎的。 然而,仅仅改变代码是不够的。 它导致了一个焦点#34;两种情况下的错误。在这些情况下,我不得不SetFocus

固定代码:

Private Sub Form_Load()
    source_file_txt.SetFocus
    enable_import
End Sub

Private Sub browse_btn_Click()
    source_file_txt = browsed_file()
    source_file_txt.SetFocus
    enable_import
End Sub

Private Sub enable_import()
    Import_btn.Enabled = (Len(Nz(source_file_txt.Text, "")) > 0)
End Sub

1 个答案:

答案 0 :(得分:0)

怎么样

Import_btn.Enabled =Cbool(Len(Nz(source_file_txt,"")))