【问题标题】:Anyway to populate a userform textbox with a public variable?无论如何用公共变量填充用户表单文本框?
【发布时间】:2020-04-13 07:46:37
【问题描述】:

我正在尝试使用公共变量填充用户窗体上的文本框,以允许用户复制并粘贴到外部程序中。我可以将基本字符串传递到文本框中,但似乎无法传递变量。这是我当前的代码:

VBA 按钮单击

Option Explicit
Public PathConfig As String
Public BuildableLand As String

Public Sub Import_Click()

PathConfig = "TestConfig"
BuildableLand = "TestBuildable"
CopyPaste.Show
CopyPaste.ConfigText.Text = PathConfig
CopyPaste.BuildableLandText.Text = BuildableLand

End Sub

用户表单

文本框分别命名为“ConfigText”和“BuildableLandText”

用户表单代码

Private Sub ExitForm_Click()

Unload Me

End Sub

Private Sub UserForm_Initialize()

CopyPaste.ConfigText.Text = PathConfig
CopyPaste.BuildableLandText.Text = BuildableLand

End Sub

当我单步执行代码时,PathConfig/BuildableLand 变量似乎并未将其值保留给用户表单。公共变量不够吗?

【问题讨论】:

  • 尝试在 Module 而不是表单中定义您的 Public 变量。
  • 我的 excel 文件中的所有其他代码都依赖于位于各个工作表中的按钮 - 因此我将使用/传递的变量嵌入在各种工作表中(即对象)。我可以在不使用模块的情况下从对象传递到表单吗?
  • 您为什么不想使用模块?如果表单是公开的,则所有表单都可以在那里“看到”它们。
  • 我有很多现有的代码写入对象,包括上面定义的变量,我宁愿不将它们全部复制到模块中。我认为仅在模块中将各个变量声明为公共变量不足以解决我的问题。我只想简单地将一对变量从 VBA 复制到 Web 界面中。这是一个超级次要的便利,所以如果没有一种简单的方法可以将变量从对象中按钮上的代码传递到用户窗体,我将继续前进。
  • 以@braX 所说的内容为基础。创建一个模块并将其命名为“MagicNumbers”。在此模块中声明所有公共常量。还将所有文字字符串和数字声明为公共常量。在那里(通过使用注释行)为全局变量创建一个部分。这将使您能够看到代码中交织在一起的所有“魔法”——然后您就可以开始修复它了。

标签: vba variables userform public


【解决方案1】:

上面代码的稍微改进的版本可能看起来像这样

Option Explicit

Private Sub Import_Click()

    Dim frm As CopyPaste
    Set frm = New CopyPaste

    With frm
        .ConfigText.Text = PathConfig
        .BuildableLandText.Text = BuildableLand
        .Show
    End With

End Sub

另外创建一个代号为 shConf 的额外工作表,用于您需要的配置值和具有以下功能的模块

Option Explicit

Function PathConfig() As String        
    'Using Names instead of a direct cell reference would probably better
    PathConfig = shConf.Range("A1")
End Function

Function BuildableLand() As String
    BuildableLand = shConf.Range("A2")
End Function

用户窗体初始化事件中不需要代码。

您还应该重新考虑在用户窗体的退出事件中使用Unload,因为这会破坏类。请改用Hide!使用Unload,用户表单不再存在,您无法检索用户输入。

【讨论】:

  • 无论如何都会将变量分配给 PathConfig/BuildableLand 而不是单元格值?上面的代码是较大代码的一小部分,其中正确定义了这些变量(作为完整的文件路径),然后我想分配它们。我可以将它们放到一个单元格中,作为我想的代码中的中间步骤,但它看起来很笨重。我可以做一些非常丑陋的事情吗,比如打开用户窗体,将变量复制到剪贴板,粘贴到文本框,然后重复第二个变量?
  • 我不太明白你需要什么。这似乎是一个 XY 问题。
猜你喜欢
  • 1970-01-01
  • 2015-10-17
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 2016-02-29
  • 2021-10-17
  • 2023-03-24
相关资源
最近更新 更多