Excel宏覆盖变量的值

时间:2016-10-25 00:52:28

标签: excel vba excel-vba variables macros

我正在编写一个宏,可以在Excel表格中保存变量(利润)的价值,适用于多种情况(通过更改价格和折扣)。为了开始,我有一个贯穿每个场景的宏,并将变量的值设置为在该场景中计算的利润。但是,当我运行宏时 - 我的三个变量A1 A2和A3中的所有变量似乎都具有最后和最终值。

我做错了什么以及如何解决这个问题?

Sub Macro1()
'
' Macro1 Macro
'

'
With Sheets("Inputs")
    .Range("I72").Value = "Base"

   Dim A1
    .Range("I5").Value = "Low"
    .Range("I91").Value = "Reduced 8%"
    Set A1 = Range("I174")

    Dim A2
    .Range("I5").Value = "Low"
    .Range("I91").Value = "Reduced 4%"
    Set A2 = Range("I174")

    Dim A3
    .Range("I5").Value = "Low"
    .Range("I91").Value = "Current"
    Set A3 = Range("I174")

    MsgBox A1
    MsgBox A2
    MsgBox A3

End With

2 个答案:

答案 0 :(得分:1)

您必须声明Double类型的A1,A2和A3并存储单元格

Option Explicit

Sub Macro1()
    '
    ' Macro1 Macro
    '

    '
    With Sheets("Inputs")
        .Range("I72").Value = "Base"

       Dim A1 As Double
        .Range("I5").Value = "Low"
        .Range("I91").Value = "Reduced 8%"
        A1 = Range("I174").Value

        Dim A2 As Double
        .Range("I5").Value = "Low"
        .Range("I91").Value = "Reduced 4%"
        A2 = Range("I174").Value

        Dim A3 As Double
        .Range("I5").Value = "Low"
        .Range("I91").Value = "Current"
        A3 = Range("I174").Value

        MsgBox A1
        MsgBox A2
        MsgBox A3

    End With

End Sub

,而您的代码将其声明为Variant类型(从而使它们能够存储每个类型),然后使用use {{1}存储Range对象}}关键字,该范围始终指向在每次计算时更改的同一单元格

答案 1 :(得分:0)

你正在写作范围。将A1,A2和A3的单元格更改为其他一些单元格值。所有3个都指的是相同的细胞