【问题标题】:Simplify VBA code with repetitive operations通过重复操作简化 VBA 代码
【发布时间】:2022-12-23 19:39:54
【问题描述】:

我创建了一个包含大量文本框和勾选框的用户表单。初始化用户窗体时,数据将加载到文本框中,并且复选框值由工作簿选项卡之一中指定的值定义。

我写了很多重复的代码。例如,我为每个由数字填充的文本框包含了下面的代码。

Controls("ll_f_m_prior").Value = Format(Range("ll_f_m_prior_p"), "standard")

If Controls("ll_f_m_prior").Value = "n/a" Or Controls("ll_f_m_prior").Value = "" Then

    Controls("ll_f_m_prior").Enabled = False

    cb1.Enabled = False

End If

我有 25 多个重复代码的文本框。我正在寻找一种使用两个动态变量调用函数的方法。在上面的例子中,两个变量是 ll_f_m_prior 和 cb1。

我试过这段代码

Sub error1(var1 As String, var2 As String)
    
Controls(var1).Value = Format(Range(var1), "standard")
    
If Controls(var1).Value = "n/a" Or Controls(var1).Value = "" Then
    
    Controls(var1).Enabled = False
    
    x = var2 & ".Enabled"
    
    x = False
    
End If
    
End Sub

并使用函数调用子程序:

Call error1("ll_f_m_prior_p", cb1)

【问题讨论】:

    标签: excel vba userform


    【解决方案1】:

    当您使用 Call error1("ll_f_m_prior_p", cb1) cb1 调用 sub 时,不是字符串。 然而 sub 需要一个字符串。 因此,如果您将第二个变量更改为充当对象,那应该会使事情变得更容易。

    Sub error1(var1 As String, var2 As Object)
    
    Controls(var1).Value = Format(Range(var1), "standard")
    
    If Controls(var1).Value = "n/a" Or Controls(var1).Value = "" Then
       Controls(var1).Enabled = False
       var2.Enabled = False
    End If
    
    End Sub
    

    【讨论】:

    • 嗨,克里斯托弗,感谢您的帮助。我进行了上述更改,但出现错误。因此,目前,调用例程在一个大的子例程中。我将上面的代码放在一个单独的 module1 中,当我启动用户窗体时,我收到以下错误消息:“编译错误:未定义子或函数”
    • 听起来好像找不到潜艇。尝试将其设为 Public Sub,看看是否有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多