VBA Excel - 使用按钮维护公共变量

时间:2015-02-19 03:04:15

标签: excel vba

我正在尝试创建一个包含常量字符串的文档。

我已经在这样的模块中声明了Public:

Public Abc As String

在“ThisWorkbook”中,我运行以下代码来初始化变量

Private Sub Workbook_Open()

    Abc = "C5"

End Sub

我有按钮编码来改变一些值,如:

If Range(Abc) = "" Then
    Range(Abc) = 1
Else
    Range(Abc) = Range(Abc) + 1
End If

当我使用此代码运行按钮时:

Sub BotaoNovoDia()

i = 3
While i <= 33
    If Cells(i, 11) = "" Then
        Cells(i, 11) = Range(Apresentacao)
        Cells(i, 12) = Range(Aceitacao)
        Cells(i, 13) = Range(Aceitou)
        Cells(i, 31) = Range("D41")

        Cells(i, 11).Interior.Color = Range(Apresentacao).Interior.Color
        Cells(i, 12).Interior.Color = Range(Aceitacao).Interior.Color


        If Range("K34") < 0.65 Then
            Range("K34").Interior.Color = vbRed
        Else
            Range("K34").Interior.Color = vbGreen
        End If

        If Range("L34") < 0.45 Then
            Range("L34").Interior.Color = vbRed
        Else
            Range("L34").Interior.Color = vbGreen
        End If

        Range(Aceitou) = 0
        Range(Rejeitou) = 0
        Range(NaoApres) = 0
        End
    Else
        i = i + 1
    End If
Wend
End Sub

我尝试再次运行第一个按钮我得到并且错误说:“运行时错误'1004':对象'_Global'的方法'范围'失败” 调试按钮将我带到试图访问公共变量值的fisrt行。我该怎么做才能保留Public变量中的值?

2 个答案:

答案 0 :(得分:1)

当您致电End(本身,而不是End If等的一部分)时,请清除全局。

不要使用End。

答案 1 :(得分:0)

使用命名范围是一个好主意;但是没有理由为什么你的公开声明不起作用 - 除了那个讨厌的End陈述。(我错过了第一次阅读......)

但是,您的每个功能范围都不明确,例如:哪个工作表是Range引用的,所以如果一个函数在另一个工作表上工作,按下触发“Change”的按钮可能会引用一个不喜欢该引用的不同地方。

e.g。您的范围应该类似于SomeWorkbook.TheWorksheet.Range(<range>),当您更改单元格值时,应该使用.Value来确保没有歧义 - 您可以通过此处搜索得知错误1004是最不具描述性的错误代码......