在VBA对象中存储范围值

在VBA对象中存储范围值,vba,excel,Vba,Excel,我编写了一个程序,将指定范围内的值(A1:B2)乘以作为参数传递的值(单元格D1中写入的值) 现在,如何使用不同的参数再次运行相同的宏,该参数将对原始值进行操作?我很确定我需要一些全局变量来告诉我的过程宏至少运行过一次(我找到了如何执行),但我不知道如何/在哪里存储原始值 例如,我有 Range("A1").Value = 1 Range("A2").Value = 1 Range("B1").Value = 1 Range("B2").Value = 1

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

现在,如何使用不同的参数再次运行相同的宏,该参数将对原始值进行操作?我很确定我需要一些全局变量来告诉我的过程宏至少运行过一次(我找到了如何执行),但我不知道如何/在哪里存储原始值

例如,我有

    Range("A1").Value = 1
    Range("A2").Value = 1
    Range("B1").Value = 1
    Range("B2").Value = 1
    Range("D1").Value = 2    
单击宏按钮并获取范围
范围(“A1:B2”)
中的值,如下所示

    Range("A1").Value = 2
    Range("A2").Value = 2
    Range("B1").Value = 2
    Range("B2").Value = 2
现在,在手动编辑从
2
3
范围(“D1”).Value
并再次单击宏按钮后,我希望我的程序返回以下值

    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
我希望这是一个很好的例子。谢谢


弗朗西斯科

如果我理解得很好,你想要的是一种跟踪每次你用按钮呼叫潜艇并在潜艇中使用这些数据的方法

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

'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 

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

最好也提供代码。根据您的总体要求,将原始值存储在VBA数组或工作表中。(或者根本不覆盖它们)。另外,请阅读的帮助主题,而且嗨,事实上我不知道我们谈论的是不是同一件事。当然,当你说“第二种方法是简单地将这些数据存储在一个范围内,并在子系统中使用/更新它”时,这就是我想要实现的目标(这就是目标:将原始数据存储在某个地方)。我试过这个方法,但很费时。我想知道(也就是说,我在谷歌上搜索)是否有可能让excel在内存中工作。非常感谢。again@Franco您可以将原始值存储在常量/公共变量中(参见我的帖子),并对这些变量进行操作,而不是对单元格进行操作。这样,调用过程后,“原始”值就不会更改。(我希望我没有弄错你的问题,但我觉得这是我想要完成的)谢谢@Antoin.D。但是,如果你看到我的帖子,我认为这是理论层面的解决方案(“我很确定我需要一些全局变量[…],但我不知道如何/在哪里存储原始值”),但我不知道如何实际实现它。要初始化的正确对象是什么?阵列?你能用我在示例中给出的数据为“我”(社区)编写一段代码吗?我只需要对象初始化的步骤和存储数据的步骤(我真的为任何语法错误道歉),非常感谢much@Franco在这里,我修改了我的答案,所以它使用了一个数组,您现在可以存储N个数据条目,在您的例子中,它将代表一个过程调用。并在代码中的任何地方再次使用它们,因为它是一个公共变量。请注意,数组中存储的数据类型取决于您自己,因此您可以尝试使用该类型来找到最佳选项!:)此外,有关VBA中阵列的快速指南,请参见此链接