我有一个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
答案 0 :(得分:0)
怎么样
Import_btn.Enabled =Cbool(Len(Nz(source_file_txt,"")))