使用vba打开后,窗体中的宏停止工作

时间:2017-08-31 07:13:56

标签: vba ms-access

请帮我解释一下,为什么会发生这种情况,之后解决方案应该很简单:)

我有两种形式,显示不同的数据。

Form_1:有一个组合框(其中有名称),您可以在其中选择要查看的公司,更新后的宏搜索记录([ID]字段),并显示信息。 (更复杂的是,此[ID]字段被隐藏,并用于显示实际信息的子表单。)

表单_2:这是一个连续的表单,每个记录与Form_1中显示的公司有关,但是几个记录可以属于一个公司。每个记录都有一个按钮,用于打开Form_1,并连接信息。按钮的vba代码是:

Private Sub Button_Click()
DoCmd.OpenForm "Form_1", , , "[ID] = " & Me![ID]
End Sub

在代码中,使用相同的[ID]字段,如上所述:隐藏并用于子表单。 两种形式都按需工作,我很满意。

但是在使用按钮从Form_2打开Form_1后,组合框仍然为空(实际上我不需要填充它),如果我想用它来搜索其他项目,它就不会#39 ;工作,好像没有加载宏。显示名称列表,我可以单击它们中的任何一个,但[ID]字段不会刷新(当然也不会刷新子表单)。我必须关闭表单,然后从侧面列表再次打开它。

为什么宏停止工作? 我应该改变什么才能使它发挥作用?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

Form1已将过滤器设置为特定键值,因此尝试查找并重新定位表单的当前记录将失败,而不会显式重置过滤器。

OpenForm命令的Where条件不会更改表单的Record Source属性,也不会执行简单的搜索/重新定位。相反,它应用表单过滤器

 class ApplicationSecurity extends WebSecurityConfigurerAdapter {

    @Autowired
    private DataSource source;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/uploadfiles/**").access("hasRole('ADMIN')");
        http.authorizeRequests().antMatchers("/fonts/**").permitAll();
        http.authorizeRequests().antMatchers("/").permitAll();
        http.authorizeRequests().anyRequest().fullyAuthenticated().and()
                .formLogin().loginPage("/login").defaultSuccessUrl("/").failureUrl("/login?error").permitAll().and()
                .logout().permitAll();
    }

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.jdbcAuthentication().dataSource(source).
                usersByUsernameQuery("select username,password,enabled from users where username=?").
                authoritiesByUsernameQuery("select username, role from user_roles where username=?");
    }

}

此状态以多种方式表示

  • 在主页功能区(即工具栏)上:切换过滤器按钮处于活动状态...以不同颜色突出显示。
  • 表单底部的表单导航栏显示" 已过滤"用漏斗图标突出显示。
  • 访问状态栏显示" 已过滤"在其他指标附近的右边。

当然,所有这些指标都是隐藏的,所以你只需要知道每个命令和参数的作用。

可能的解决方案:

  • Form1&#39的ComboBox.AfterUpdate宏应该在搜索新的ID值之前关闭过滤器。
  • Form2的Button_Click事件在不应用过滤器的情况下打开表单,而是运行与ComboBox.AfterUpdate方法相同的代码 - 搜索并重新定位表单的记录而不是过滤它。
    • 这可以通过多种方式实现,并且在很大程度上超出了本答案的范围,但提示是在Form1模块中创建执行搜索的Public方法。 ComboBox.AfterUpdate方法和其他按钮都调用相同的公共方法,因此它们具有相同的行为。