userform中的全局变量值未更新

问题描述 投票:0回答:1

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

这非常有趣,因为第二次选择0.05时,N2的值为0.05,而J2的旧值为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
excel public
1个回答
0
投票

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

OptionButton_Click事件仅将x写入Range("N2"),然后隐藏表格。

唯一向Range("J2")写任何东西的时间是当您运行Macro2来解释有趣的结果时。

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

在Module1中:

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

在UserForm模块中:

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

© www.soinside.com 2019 - 2024. All rights reserved.