【问题标题】:UserForm allowing a User to Update a certain or multiple bits of an existing Private Sub CodeUserForm 允许用户更新现有私有子代码的某个或多个位
【发布时间】:2020-12-18 00:15:06
【问题描述】:

有人知道我是否可以允许用户更新现有私有子代码的某些部分,或者有任何想法吗?

例如:

当前: UserForm_Initialize Textbox1 = "Test"
用户更新后: UserForm_Initialize TextBox1 = "Hello"

【问题讨论】:

  • 如果您想为后续运行保留更改,您可以在 VBA 模块中以编程方式编写 VBA 代码(例如:stackoverflow.com/questions/34837006/…),但您很容易以非常复杂的结构结束.我宁愿在某处不断改变变量,例如在 .ini 文件中。如果您只想为正在运行的会话保留更改,那么用户表单会保留这些值,直到您卸载它。即使这样,您也可以将值保留在用户表单之外,例如在全局变量中。
  • 您的意思是让 UserForm 初始化以使用最后一个 TextBox1 值(由用户提供)?

标签: excel vba textbox userform insert-update


【解决方案1】:

假设您需要在下次显示TextBox1中使用的最后一个文本时打开表单,请使用下一种方法:

  1. 将下一个声明复制到表单代码顶部(在声明区域中):
Option Explicit

 'It is good to use relevant constants, able to better reflect their meaning:
 Private Const MyApp As String = "MyApplication"
 Private Const Sett As String = "Settings"
 Private Const Txt1 As String = "Txt1Val"
  1. 将此代码放入TextBox1 Change事件中:
Private Sub TextBox1_Change()
  SaveSetting MyApp, Sett, Txt1, TextBox1.Text
End Sub
  1. 复制Userform_Initialize事件中的下一个代码:
  Dim Txt1Val As String
  Txt1Val = GetSetting(MyApp, Sett, Txt1, "No value")
  If Not Txt1Val = "No value" Then Me.TextBox2.Text = Txt1Val

现在,当用户更改TextBox1 文本时,新字符串会被存储在注册表中,并用于在下一次用户窗体初始化期间加载...

如果有不清楚的地方,请不要犹豫。

【讨论】:

  • Savesettings 将数据存储在系统注册表中;如果您移动到另一台计算机或操作系统,数据将不再可用。最好使用工作簿中的名称,或者更简单地说,使用单元格。
  • @Zer0Kelvin:您在问题中看到这样的请求了吗?我没有。无论如何,这个问题很短而且不够清楚。我要求澄清,但没有答案。我还提到了代码工作所基于的假设。而且写——读注册表非常快,不消耗Excel资源。
  • 我不明白您所说的“您在问题中看到这样的请求了吗?”是什么意思?但是,这个问题在概念上是错误的,但似乎它打算记住在文本框中输入的最后一个值,以便在下一次打开时再次显示它。关于使用注册表,它比使用名称更有效,但(略)比使用单元格效率低。我想指出的是,如果将文件移动到另一台 PC 或文件存储在网络文件夹中,则存储在注册表中的值不会跟随文件。
  • @Zer0Kelvin:当然不是。但没有人说这是必要的。无论如何,在这种情况下必须是一个起点,它将是当文件移动到另一台 PC 时......
  • @new11:上面的代码没有解决你的问题吗?如果没有,您能否更好地解释要做什么才能满足您的需求?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 2019-08-21
  • 1970-01-01
  • 2020-02-26
  • 2019-02-15
  • 1970-01-01
  • 2015-08-30
相关资源
最近更新 更多