2016-04-26 57 views
0

我对Access相对来说比较陌生,我选择的任何SQL和VBA都是自学的,所以我非常感谢那些不是太重的答案与技术术语...说,我有一个问题,如果用户选择不输入数据允许组合框留在窗体上的问题。另外,我正在使用Access 2016.如何让一个组合框留空//跳过一个表格

最初我碰到的问题是,如果组合框完全被跳过并留空,或者用户选择了组合框,然后尝试继续前进而未从列表中进行选择,他们得到错误“您试图将Null值赋值给不是Variant数据类型的变量”,并且无法移动到表单上的任何其他字段或保存输入的记录。

我发现这个article详细说明了一个可能的解决方案,但我似乎无法让它工作。余由未结合的组合框,设置行来源:

SELECT EmailID, PersonalEmail FROM EmailT UNION SELECT "<N/A>","<N/A>" FROM EmailT 
ORDER BY PersonalEmail; 

其中PersonalEmail是类型短文本的字段和EMAILID是自动编号。我也按照文章的步骤来设置组合框(列宽等),并将其设置为限制到列表=是。

这里是我的确切代码:

Private Sub Combo62_AfterUpdate() 
If Combo62 = "<N/A>" Then 
    EmailID = Null 
Else 
    EmailID = Combo62 
End If 
End Sub 

Private Sub Form_Current() 
If IsNull(EmailID) Then 
    Combo62 = "<N/A>" 
Else 
    Combo62 = EmailID 
End If 
End Sub 

< N/A>现在显示了我的名单上,但如果选择了它,我得到的错误:“您输入的值不适用于此例如,您可能在数字字段或大于FieldSize设置许可的数字中输入了文本。“

访问的调试器突出行:

EmailID = Null 

,但我不知道我现在应该采取尝试和解决这个问题什么步骤。

我完全接受其他允许组合框空白的方法,如果有人知道更好的方法来做到这一点。就我所知,我错过了一些非常明显的东西!预先感谢任何见解!

编辑:感谢您的帮助球员,我从来没有弄清楚到底是什么问题,但我从另一个论坛得到了一些建议,重新考虑我的数据库设计,所以这最终成为一个空问题 - 这是完全不同的现在!

+0

是EmailID整数?整数不能为空,你将需要找到另一种方式来处理它,例如设置为-1 –

+0

EmailID是一个整数 - 我没有意识到它们不能为空。我试图将它设置为-1,但仍然无法让代码在没有错误的情况下运行 – AliG

+0

只有变量可以在vba中为null,对于数字数据类型,有一个带有值(整数为0)的Default构造函数。所以你的IsNull(EmailID)也是无用的 –

回答

0

如果表单的记录源包含具有一对多关系的查询,则可能出现此错误。尝试仅使用基表作为表单的记录源。如果需要显示相关数据,请使用子表单。其余的代码可能是不必要的。

+0

我试着建立一个基于这种设计方法的新窗体,但也遇到了问题。如果我尝试在下拉列表中选择一个选项,或者尝试首先在子表单中键入组合框,则会出现错误“您无法为此对象分配一个值。*该对象可能是读取时的控件-only form。*该对象可能在设计视图中打开的表单上。*该值对于该字段可能太大。“我确信它在设计视图中并未打开... – AliG