【问题标题】:Global variable value in userform is not updated用户表单中的全局变量值未更新
【发布时间】:2020-08-03 00:35:31
【问题描述】:

我需要定义一个全局变量x,并根据用户的选择为x赋值,然后在两个单元格N2和J2中写入相同的值。 N2 发生在用户表单内,而 J2 发生在用户表单外。 我首先希望有一个弹出窗口供用户选择值 0.01 或 0.05。所以我使用用户表单来做到这一点。但是我不想直接运行这个用户表单,而是想在一个名为 macro2() 的 vba 模块中调用用户表单,见下文。在 macro2() 中,我首先调用用户窗体“user1”,弹出窗口将显示允许用户选择 0.01 或 0.05。如果我们选择 0.01,那么全局变量“x”的值为 0.01。然后当我们在单元格 N2 中写入变量 x 时,N2 的值将是 0.01(这很好)。但是在用户窗体退出并继续执行macro2() 的其余部分后,单元格J2 是0 而不是0.01,即使x 应该具有值0.01。

这很有趣,因为当我们第二次选择 0.05 时,N2 将具有值 0.05,但 J2 将携带旧的 x 值 0.01。谁能帮我解决这个问题?我本质上需要 N2 和 J2 携带相同的 x 值,所以我可以在以后的代码中调用 x 来处理许多其他事情。谢谢!

我的模块/宏代码如下所示:

Global x As Double
Sub Macro2()
    Dim frm As user1
    user1.Show vbModeless
    Range("J2").Select
    ActiveCell.FormulaR1C1 = x
End Sub

“user1”用户表单代码为:

Private Sub OptionButton1_Click()
    Range("N2").Select
    x = 0.01
    ActiveCell.FormulaR1C1 = x
    Me.Hide
End Sub

Private Sub OptionButton2_Click()
    Range("N2").Select
    x = 0.05
    ActiveCell.FormulaR1C1 = x
    Me.Hide
End Sub

Private Sub UserForm_Click()
    ActiveCell.FormulaR1C1 = x
End Sub

【问题讨论】:

  • Range("J2") 更新是否必须在用户窗体之外进行,还是可以与Range("N2") 同时写入?

标签: excel public


【解决方案1】:

Sub Macro2() 每次调用时都会将x 的值写入Range("J2")。这就是为什么下次运行该子程序时旧值会写入J2。`

OptionButton_Click 事件只是将x 写入Range("N2") 然后隐藏表单。

您向Range("J2") 写入任何内容的唯一时间是运行Macro2,它解释了您有趣的结果。

按原样使用您的代码并进行一些修改:

在模块 1 中:

Global x As Double
Sub Macro2()
    Dim frm As User1
    User1.Show
End Sub

在用户窗体模块中:

Private Sub OptionButton1_Click()
    x = 0.01
    With ThisWorkbook.Sheets("Sheet1")
        .Range("N2").Value = x
        .Range("J2").Value = x
    End With
    Me.Hide
End Sub

Private Sub OptionButton2_Click()
    x = 0.05
    With ThisWorkbook.Sheets("Sheet1")
        .Range("N2").Value = x
        .Range("J2").Value = x
    End With
    Me.Hide
End Sub

这会将x 的值分配为与您的代码相同的值,具体取决于单击optionbutton,但是它将x 的值写入两个单元格J2N2

请注意,我已经替换了对 ActiveCell 的引用,并明确声明了我们正在使用的 Workbook/Worksheet

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多