程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了将值从单元格传输到 ComboBox 避免触发所述 ComboBox 更改大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决将值从单元格传输到 ComboBox 避免触发所述 ComboBox 更改?

开发过程中遇到将值从单元格传输到 ComboBox 避免触发所述 ComboBox 更改的问题如何解决?下面主要结合日常开发的经验,给出你关于将值从单元格传输到 ComboBox 避免触发所述 ComboBox 更改的解决方法建议,希望对你解决将值从单元格传输到 ComboBox 避免触发所述 ComboBox 更改有所启发或帮助;

基本上这是我的问题。我有组合框会影响其他组合框的变化,这一切都很完美,但我需要能够在一个单独的 Excel 文件打开时将值从单元格返回到组合框,就像我现在写的一样 - 它会触发更改组合框和影响其他现在将是空的组合框,这很糟糕。我基本上需要的是在再次打开保存的工作簿时在 ComboBoxes 中维护选定的项目。

我将它从 ComboBox 写入工作表的方式:

'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

卸载和显示用户窗体时出现同样的问题。因为我必须填充现在为空的组合框。

有人可以帮我解决这个问题吗?

附言

我有一个模块,其中包含许多带有加载功能的子程序,例如在原始帖子中为每个用户表单提供的。这就是我从单元格到组合框获取值的方式。而且我有一个用户表单初始化子例程,该子例程主要具有用于所述用户表单中所有组合框的 additem 函数。稍后当用户处理文件时 - 一切都很好,因为我可以隐藏用户表单而不会丢失其组合框中的日期,但是在以任何方式卸载用户表单时(天气关闭工作簿或只是转到另一个卸载前一个用户表单)数据将丢失,并且在下次初始化用户表单时将重新加载。因为我有组合框,这些项目依赖于其他组合框中的选择 - 在这种情况下,我丢失了用户表单和工作表中的计算值。

我的理解是发生这种情况是因为在加载用户表单时,它都是空白的,并且在加载值时它会触发每个组合框更改事件,从而导致重新计算一些相关的组合框项目以提供正确的选项范围以供选择,由于将组合框值传输到工作表,这反过来会删除工作表中的相关组合框值。所以我通常需要维护所有组合框值,因为它们在加载用户表单时被发送到工作表,就像我隐藏用户表单然后再次显示它一样。 :)

解决方法

您可以将 ComboBox 的 Controlsource 设置为您的单元格。因此,它始终显示与单元格相同的值,您无需将其从 ComboBox 粘贴到单元格,反之亦然。

UserForm_TVPm.Language_ComboBox.Controlsource = "'Machine Specification'!C4"

或者在组合框的属性窗口中设置 Controlsource

我唯一的想法是将全局变量作为开关。

Option Explicit

Private SkipChangeEvent As Boolean

Private Sub Language_ComboBox_Change()
    If SkipChangeEvent Then Exit Sub
    
    'your code here
End Sub

Public Sub Example()
    SkipChangeEvent = True   'disable change event
    UserForm_TVPm.Language_ComboBox.Value = Worksheets("Machine Specification").Range("C4").Value
    SkipChangeEvent = false  'enable change event
End Sub

但我更喜欢第一个解决方案。


根据评论,我提出了另一种解决方案:

在你想使用的每个用户表单中,放在最上面:

Option Explicit

Private IsInitialized As Boolean 'this is false by default and false after every unload too.

这必须是私有的,每个用户表单都需要自己的变量声明,否则它不适用于多个用户表单。

你的变更事件中做

Private Sub Language_ComboBox_Change()
    If Not IsInitialized Then Exit Sub ' events don't run until you tell the userform IsInitialized is true.
    
    'your code here
End Sub

在初始化完成后,无论您在何处拥有用于初始化组合框值的代码,都应放置以下代码:

IsInitialized = True

大佬总结

以上是大佬教程为你收集整理的将值从单元格传输到 ComboBox 避免触发所述 ComboBox 更改全部内容,希望文章能够帮你解决将值从单元格传输到 ComboBox 避免触发所述 ComboBox 更改所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。