我需要定义一个全局变量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
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
的值写入到单元格J2
和N2
中。
注意,我已经替换了对ActiveCell
的引用,并明确声明了我们正在使用的Workbook/Worksheet
。