将范围值存储在VBA对象中

时间:2017-06-26 10:35:43

标签: excel vba excel-vba

我编写了一个过程,它将指定范围(A1:B2)中的值乘以作为参数传递的值(在单元格D1中写入的值)。

现在,我该怎样做才能再次使用不同的参数运行相同的宏,这些参数将对原始值进行操作?我很确定我需要一些全局变量来告诉我的程序宏已经运行了至少一次(我发现了怎么做)但我不知道如何/在哪里存储原始值。

例如,我有

    Range("A1").Value = 1
    Range("A2").Value = 1
    Range("B1").Value = 1
    Range("B2").Value = 1
    Range("D1").Value = 2    

点击宏按钮,获取Range("A1:B2")范围内的值,如下所示

    Range("A1").Value = 2
    Range("A2").Value = 2
    Range("B1").Value = 2
    Range("B2").Value = 2

现在,在手动编辑Range("D1").Value23并再次点击宏按钮后,我希望我的程序返回以下值

    Range("A1").Value = 3
    Range("A2").Value = 3
    Range("B1").Value = 3
    Range("B2").Value = 3

简约程序可以是这样的结构

    dim rng as Range
    dim MyRange as Range
    set MyRange = Range("A1:B2")

    For each rng in MyRange
          rng.value = rng.value*Range("D1").Value
    next rng

我希望这是一个很好的例子。感谢

弗朗西斯

1 个答案:

答案 0 :(得分:1)

如果我理解得很清楚,你想要的是一种跟踪每次你用按钮调用你的sub并在这个sub中使用这个数据的方法。

一种方法是在模块中创建一个公共变量(我通常在我的项目中创建一个变量模块)并在你用你的按钮调用的子中更新这些数据。

'Your public variable inside a module (VariablesModule)

 Public param() As Variant

'Your general code

 Call procedure(VariablesModule.param)

'Inside your sub

Sub procedure(byVal paramVal as Variant)
'(your code)
ReDim param(0 To n) As Variant
Set param(1) = ABCDEFG
End sub 

第二种方法是简单地将这些数据存储在一个范围内,并在您的子资源中使用/更新它。