【发布时间】:2021-07-28 10:39:50
【问题描述】:
基本上这是我的问题。我的组合框会在更改时影响其他组合框,这一切都很完美,但我需要能够在单独的 Excel 文件打开时将值从单元格返回到组合框,就像我现在写的一样 - 它触发更改组合框和影响现在将是空的其他组合框,这很糟糕。我基本上需要的是在再次打开保存的工作簿后维护 ComboBoxes 中的选定项目。
我将它从 ComboBox 写入 Sheet 的方式:
'Paste value to sheet
Worksheets("Machine Specification").Range("C4").Value = UserForm_TVPM.Language_ComboBox.Text
以及我将其从工作表加载回 ComboBox 的方式:
UserForm_TVPM.Language_ComboBox.Value = Worksheets("Machine Specification").Range("C4").Value
卸载和显示用户窗体时也会出现同样的问题。因为我必须填充现在空的 ComboBoxes。
有人可以帮我解决这个问题吗?
附言
我有一个模块,其中包含许多具有加载功能的子例程,例如在原始帖子中为每个用户窗体提供的功能。这就是我从单元格到组合框的值。而且我有一个用户窗体初始化子例程,该子例程主要具有用于所述用户窗体中所有组合框的 additem 函数。稍后,当用户使用文件时 - 一切都很好,因为我可以隐藏用户表单而不会丢失其组合框中的日期,但是在以任何方式卸载用户表单时(天气关闭工作簿或只是转到另一个用户表单卸载前一个)数据将丢失,并且在用户窗体的下一次初始化时将重新加载。因为我有组合框,这些组合框的项目取决于其他组合框中的选择 - 在这种情况下,我会丢失用户窗体和工作表中的计算值。
我的理解是它的发生是因为在加载用户表单时,它都是空白的,并且在加载值时它会触发每个组合框更改事件,导致一些相关的组合框项目被清除重新计算以提供正确的选项范围可供选择,由于将组合框值传输到工作表,这反过来又删除了工作表中的相关组合框值。所以我通常需要维护所有的组合框值,因为它们在加载用户表单时被发送到工作表,就像我要隐藏用户表单然后再次显示它一样。 :)
【问题讨论】:
-
您尝试过 Application.EnableEvents 吗? docs.microsoft.com/en-us/office/vba/api/…
-
是的,我不确定我是否正确使用了它。我基本上在 change sub 中禁用了它,并且在所有功能启用它之后它没有任何效果
-
@АлексейР 不知何故
Application.EnableEvents不会禁用来自用户表单及其控件的事件,而只会禁用来自工作表的事件。 -
在这种情况下,我根本不理解它的概念。这不仅仅是关于保存......在卸载和显示现在空白的用户表单时也是如此,现在必须使用 Worksheet 中的值填充