将用户窗体文本框中的更改内容保存为新的默认值

3

我有一个用户表单,其中有29个文本框中的值用作相当长的公式的参数。 我已将当前设置输入为文本框“Value”和“text”属性中的起始值。 我希望用户能够使用表单上的“保存”按钮永久更改表单参数作为新的启动默认值。 网络上有一些文章演示了这一点并使用了这些示例。 我已经汇编了下面的代码。

Private Sub ToggleButton1_Click()
'
'----------- Save Button -------------------------------------
'
Dim VBP As VBIDE.VBProject
Dim VBC As VBIDE.VBComponent
Dim VBD As UserForm

Set VBP = ThisWorkbook.VBProject
Set VBC = VBP.VBComponents("Calculation_Parameters")
Set VBD = VBC.Designer

With VBD
    With .Controls("Textbox1")
        .Value = 111
        .BackColor = vbRed
    End With
End With

End Sub

我已经尝试了至少20种变化,但还没有成功。使用这段代码时,我会收到一个“运行时错误'91':对象变量或With块变量未设置”的错误消息。调试指向"With .controls(Textbox1")"行有问题。我已选择“Microsoft Visual Basic For App Extensibility”引用。非常感谢任何想法。

我建议进行一些调试以更接近您的问题。 尝试找出哪个变量未设置,VBD还是VBD.Controls。 尝试在调试器中逐步执行并查看它们是否都设置为对象。 由于某种原因,这两者之一未被设置。 可能设置VBC.Designer没有返回任何内容? https://msdn.microsoft.com/en-us/library/office/gg264339.aspx - Toby Allen
如果用户保存了无效的参数怎么办?这是个好问题(对我来说很新颖,从未考虑过这样的自定义),但老实说,我更喜欢将自定义参数存储在配置文件中(分布式或在“保存”点击时自动生成)-因此将数据与编译代码分开,而不是让用户修改您的代码,冒着使用无效输入破坏它的风险。 - Matteo NNZ
看起来VBD没有被设置。您提供的链接说明:“如果VBComponent对象没有设计师,则Designer属性返回Nothing”。我尝试了Textbox、Labels、ToggleButtons,当“Set VBD”行运行时,它们都没有返回值。这很令人困惑,因为示例专注于修改这些控件。仍然没有解决方案,我将继续尝试。 - Jeff
我从网页http://www.xtremevbtalk.com/archive/index.php/t-317970.html获取了示例。我犯了一个错误,把代码放在表单本身中,但现在已经将其移动到模块中。现在没有任何设置命令起作用了。实际上这是进步。 - Jeff
1
为什么不将默认值保存到隐藏工作表中,并在打开时加载它们? - Siphor
1个回答

0
使用ADO程序库并将默认列表保存在Access数据库中,或者您可以简单地创建一个主列表,您的用户表单从Excel中编译,并且当用户表单中的值发生更改时,它会修改列表上的该项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接